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将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
解析argc argv在php中的应用
Jun 24 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
php图像验证码生成代码
Jun 08 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
YII中assets的使用示例
2014/07/31 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
微信小程序如何获取用户收货地址
2018/11/27 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
使用python绘制温度变化雷达图
2019/10/18 Python
Python操作Jira库常用方法解析
2020/04/10 Python
python 读取、写入txt文件的示例
2020/09/27 Python
如何一键升级Python所有包
2020/11/05 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
Hotels.com南非:酒店预订
2017/11/02 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
租房协议书范本
2014/04/09 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
消防安全主题班会
2015/08/12 职场文书