• 技术文章 >后端开发 >php教程

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

    2016-07-13 10:29:38原创594
    首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。

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

    1. 覆盖phpmailer

    请从附件进行下载:

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

    2. 改造lib

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

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

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

    MailQueue中同理。

    3. 封装调用函数

    global.lib.php 约300行

    function &get_mailer()中增加一行:

    $secure   = Conf::get('email_ssl');//增加这一行
            $mailer = new Mailer($sender, $from, $protocol, $host, $port, $username, $password, $secure);//同时传递参数

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

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

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

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

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

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

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

    以及测试邮件方法。

    function send_test_email()
        {
            if (IS_POST)
            {
                $email_from = Conf::get('site_name');
                $email_type = $_POST['email_type'];
                $email_host = $_POST['email_host'];
                $email_ssl = $_POST['email_ssl'];//增加
                $email_port = $_POST['email_port'];
                $email_addr = $_POST['email_addr'];
                $email_id   = $_POST['email_id'];
                $email_pass = $_POST['email_pass'];
                $email_test = $_POST['email_test'];
                $email_subject = Lang::get('email_subjuect');
                $email_content = Lang::get('email_content');
    
                /* 使用mailer类 */
                import('mailer.lib');
                $mailer = new Mailer($email_from, $email_addr, $email_type, $email_host, $email_port, $email_id, $email_pass, $email_ssl);//增加
                $mail_result = $mailer->send($email_test, $email_subject, $email_content, CHARSET, 1);
                if ($mail_result)
                {
                    $this->json_result('', 'mail_send_succeed');
                }
                else
                {
                    $this->json_error('mail_send_failure', implode("\n", $mailer->errors));
                }
            }
            else
            {
                $this->show_warning('Hacking Attempt');
            }
        }

    tls方式没有测试过。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/771648.htmlTechArticle首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。 然后,得对相应代码做一定调整。 1. 覆盖phpmailer 请从附件进行下载: http:...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:3 PHP Python ecmall
    上一篇:svn黄色叹号解决_PHP教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 浅析PHP中的类自动加载相关文件• 系统讲解PHP缓存技术• 一文理解和实现现代PHP框架里的IOC容器• 深入了解PHP:用gdb调试源码• 实例介绍:使用Docker快速搭建多版本PHP开发环境
    1/1

    PHP中文网