ECMall支持SSL连接邮件服务器的配置方法详解


Posted in PHP onMay 19, 2014

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

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

1. 覆盖phpmailer

请从附件进行下载:

http://cywl.3water.com:81/201405/yuanma/ecmall_phpmailer_lib(3water.com).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(
=> Lang::get('no'),
 => 'SSL',
 => '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方式没有测试过。

PHP 相关文章推荐
php仿discuz分页效果代码
Oct 02 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
Yii开启片段缓存的方法
Mar 28 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
php中使用websocket详解
Sep 23 PHP
如何打开php的gd2库
Feb 09 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 #PHP
php开启openssl的方法
May 15 #PHP
PHP整数取余返回负数的相关解决方法
May 15 #PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 #PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 #PHP
php实例分享之二维数组排序
May 15 #PHP
php表单请求获得数据求和示例
May 15 #PHP
You might like
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php字符串函数学习之substr()
2015/03/27 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
理解javascript对象继承
2016/04/17 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
小程序实现多列选择器
2019/02/15 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python实现电子书翻页小程序
2019/07/23 Python
基于python使用tibco ems代码实例
2019/12/20 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
法制宣传月活动方案
2014/05/11 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Java版 单机五子棋
2022/05/04 Java/Android
Java 定时任务技术趋势简介
2022/05/04 Java/Android