php教程 php手册 ECMall如何支持SSL连接邮件服务器的配置

ECMall如何支持SSL连接邮件服务器的配置

Jun 13, 2016 am 09:35 AM
3 php python

首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。

然后,得对相应代码做一定调整。

1. 覆盖phpmailer

请从附件进行下载:

 http://files.cnblogs.com/x3d/ecmall_phpmailer_lib.zip

2. 改造lib

涉及到两个lib:mail.lib.php 、mail_quequ.lib.php

在这两个类的构造函数中,增加一个参数传递。如Mailer

<span>function</span> __construct(<span>$from</span>, <span>$email</span>, <span>$protocol</span>, <span>$host</span> = '', <span>$port</span> = '', <span>$user</span> = '', <span>$pass</span> = '', <span>$SMTPSecure</span> = <span>false</span><span>)//增加<span>$SMTPSecure</span>
    {
        </span><span>$this</span>->Mailer(<span>$from</span>, <span>$email</span>, <span>$protocol</span>, <span>$host</span>, <span>$port</span>, <span>$user</span>, <span>$pass</span>, <span>$SMTPSecure</span><span>);
    }

    </span><span>function</span> Mailer(<span>$from</span>, <span>$email</span>, <span>$protocol</span>, <span>$host</span> = '', <span>$port</span> = '', <span>$user</span> = '', <span>$pass</span> = '', <span>$SMTPSecure</span> = <span>false</span><span>)
</span>....
로그인 후 복사

MailQueue中同理。

3. 封装调用函数

global.lib.php 约300行

function &get_mailer()中增加一行:

<span>$secure</span>   = Conf::get('email_ssl'<span>);//增加这一行
        </span><span>$mailer</span> = <span>new</span> Mailer(<span>$sender</span>, <span>$from</span>, <span>$protocol</span>, <span>$host</span>, <span>$port</span>, <span>$username</span>, <span>$password</span>, <span>$secure</span>);//同时传递参数
로그인 후 복사

4. 调整后台email设置界面,增加相关设置项

后台模板:setting.email_setting.html 增加一个配置项

<span><</span><span>tr</span><span>></span>
                <span><</span><span>th </span><span>class</span><span>="paddingT15"</span><span>></span><span>
                    邮件服务器加密方式:</span><span></</span><span>th</span><span>></span>
                <span><</span><span>td </span><span>class</span><span>="paddingT15 wordSpacing5"</span><span>></span><span>
                    {html_radios name="email_ssl" options=$email_ssl checked=$setting.email_ssl}
                    </span><span><</span><span>label </span><span>class</span><span>="field_notice"</span><span>></span>此功能要求您的php必须支持OpenSSL模块, 如果您要使用此功能,请联系您的空间商确认支持此模块<span></</span><span>label</span><span>></span>
                <span></</span><span>td</span><span>></span>
            <span></</span><span>tr</span><span>></span>
로그인 후 복사

同时,修改邮件测试的参数传递

<span><</span><span>script </span><span>type</span><span>="text/javascript"</span><span>></span><span>
$(</span><span>function</span><span>(){
    $(</span><span>'</span><span>#send_test_email</span><span>'</span><span>).click(send_test_email);
});
</span><span>function</span><span> send_test_email(){
    </span><span>var</span><span> email_type </span><span>=</span><span> $(</span><span>'</span><span>input[name="email_type"]:checked</span><span>'</span><span>).val();
    </span><span>var</span><span> email_ssl </span><span>=</span><span> $(</span><span>'</span><span>input[name="email_ssl"]:checked</span><span>'</span><span>).val();//增加这一行
    $.ajax({
        type:</span><span>"</span><span>POST</span><span>"</span><span>,
        url:</span><span>"</span><span>index.php</span><span>"</span><span>,
        data:</span><span>'</span><span>app=setting&act=send_test_email&email_type=</span><span>'</span><span>+</span><span>email_type</span><span>+</span><span>'</span><span>&email_host=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_host</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_port=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_port</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_addr=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_addr</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_id=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_id</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_pass=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_pass</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_test=</span><span>'</span><span>+</span><span>$(</span><span>"</span><span>#email_test</span><span>"</span><span>).val()</span><span>+</span><span>'</span><span>&email_ssl=</span><span>'</span><span>+</span><span>email_ssl,
        dataType:</span><span>"</span><span>json</span><span>"</span><span>,
        success:</span><span>function</span><span>(data){
            </span><span>if</span><span>(data.done){
            alert(data.msg);
            }
            </span><span>else</span><span>{
                alert(data.msg);
            }
        },
        error: </span><span>function</span><span>(){alert(</span><span>'</span><span>{$lang.mail_send_failure}</span><span>'</span><span>);}
    });
}
</span><span></</span><span>script</span><span>></span>
로그인 후 복사

然后还需要修改setting.app.php

<span>/*</span><span>*
     *    EMAIL 设置
     *
     *    @author    Hyber
     *    @return    void
     </span><span>*/</span>
    <span>function</span><span> email_setting()
    {
        </span><span>$model_setting</span> = &af('settings'<span>);
        </span><span>$setting</span> = <span>$model_setting</span>->getAll(); <span>//</span><span>载入系统设置数据</span>
        <span>if</span> (!<span>IS_POST)
        {
            </span><span>$this</span>->assign('setting', <span>$setting</span><span>);
            </span><span>$this</span>->assign('mail_type', <span>array</span><span>(
                MAIL_PROTOCOL_SMTP  </span>=> Lang::get('smtp'),<span>
                MAIL_PROTOCOL_LOCAL </span>=> Lang::get('email'),<span>
            ));<br />        <span>//增加
            </span></span><span>$this</span>->assign('email_ssl', <span>array</span><span>(
                </span>0 => Lang::get('no'),
                1  => 'SSL',
                2  => 'TLS',<span>
            ));
            </span><span>$this</span>->display('setting.email_setting.html'<span>);
        }
        </span><span>else</span><span>
        {
            </span><span>$data</span>['email_type']     = <span>$_POST</span>['email_type'<span>];
            </span><span>$data</span>['email_host']     = <span>$_POST</span>['email_host'<span>];
            </span><span>$data</span>['email_ssl']       = <span>$_POST</span>['email_ssl'<span>];<span>//增加
            </span></span><span>$data</span>['email_port']     = <span>$_POST</span>['email_port'<span>];
            </span><span>$data</span>['email_addr']     = <span>$_POST</span>['email_addr'<span>];
            </span><span>$data</span>['email_id']       = <span>$_POST</span>['email_id'<span>];
            </span><span>$data</span>['email_pass']     = <span>$_POST</span>['email_pass'<span>];
            </span><span>$data</span>['email_test']     = <span>$_POST</span>['email_test'<span>];
            </span><span>$model_setting</span>->setAll(<span>$data</span><span>);

            </span><span>$this</span>->show_message('edit_email_setting_successed'<span>);
        }
    }</span>
로그인 후 복사

以及测试邮件方法。

<span>function</span><span> send_test_email()
    {
        </span><span>if</span><span> (IS_POST)
        {
            </span><span>$email_from</span> = Conf::get('site_name'<span>);
            </span><span>$email_type</span> = <span>$_POST</span>['email_type'<span>];
            </span><span>$email_host</span> = <span>$_POST</span>['email_host'<span>];
            </span><span>$email_ssl</span> = <span>$_POST</span>['email_ssl'<span>];<span>//增加
            </span></span><span>$email_port</span> = <span>$_POST</span>['email_port'<span>];
            </span><span>$email_addr</span> = <span>$_POST</span>['email_addr'<span>];
            </span><span>$email_id</span>   = <span>$_POST</span>['email_id'<span>];
            </span><span>$email_pass</span> = <span>$_POST</span>['email_pass'<span>];
            </span><span>$email_test</span> = <span>$_POST</span>['email_test'<span>];
            </span><span>$email_subject</span> = Lang::get('email_subjuect'<span>);
            </span><span>$email_content</span> = Lang::get('email_content'<span>);

            </span><span>/*</span><span> 使用mailer类 </span><span>*/</span><span>
            import(</span>'mailer.lib'<span>);
            </span><span>$mailer</span> = <span>new</span> Mailer(<span>$email_from</span>, <span>$email_addr</span>, <span>$email_type</span>, <span>$email_host</span>, <span>$email_port</span>, <span>$email_id</span>, <span>$email_pass</span>, <span>$email_ssl</span><span>);<span>//增加
            </span></span><span>$mail_result</span> = <span>$mailer</span>->send(<span>$email_test</span>, <span>$email_subject</span>, <span>$email_content</span>, CHARSET, 1<span>);
            </span><span>if</span> (<span>$mail_result</span><span>)
            {
                </span><span>$this</span>->json_result('', 'mail_send_succeed'<span>);
            }
            </span><span>else</span><span>
            {
                </span><span>$this</span>->json_error('mail_send_failure', <span>implode</span>("\n", <span>$mailer</span>-><span>errors));
            }
        }
        </span><span>else</span><span>
        {
            </span><span>$this</span>->show_warning('Hacking Attempt'<span>);
        }
    }</span>
로그인 후 복사

 

tls方式没有测试过。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

DeepSeek Xiaomi를 다운로드하는 방법 DeepSeek Xiaomi를 다운로드하는 방법 Feb 19, 2025 pm 05:27 PM

DeepSeek Xiaomi를 다운로드하는 방법

당신은 그에게 Deepseek에게 어떻게 물어 봐요 당신은 그에게 Deepseek에게 어떻게 물어 봐요 Feb 19, 2025 pm 04:42 PM

당신은 그에게 Deepseek에게 어떻게 물어 봐요

DeepSeek을 검색하는 방법 DeepSeek을 검색하는 방법 Feb 19, 2025 pm 05:18 PM

DeepSeek을 검색하는 방법

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

DeepSeek을 프로그래밍하는 방법 DeepSeek을 프로그래밍하는 방법 Feb 19, 2025 pm 05:36 PM

DeepSeek을 프로그래밍하는 방법

문자열로 모음을 계산하는 PHP 프로그램 문자열로 모음을 계산하는 PHP 프로그램 Feb 07, 2025 pm 12:12 PM

문자열로 모음을 계산하는 PHP 프로그램

DeepSeek을 사용하여 계정을 해결하는 방법 DeepSeek을 사용하여 계정을 해결하는 방법 Feb 19, 2025 pm 04:36 PM

DeepSeek을 사용하여 계정을 해결하는 방법

See all articles