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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
Laravel框架路由管理简单示例
May 07 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php模拟登陆的实现方法分析
2015/01/09 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
jquery实现div阴影效果示例代码
2013/09/16 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
理理Vue细节(推荐)
2019/04/16 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
Python代码调试的几种方法总结
2015/04/15 Python
Python求导数的方法
2015/05/09 Python
python实现梯度下降算法
2020/03/24 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python能否java成为主流语言吗
2020/06/22 Python
序列化Python对象的方法
2020/08/01 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
幼儿园辞职信范文
2015/02/27 职场文书
小学安全教育主题班会
2015/08/12 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js