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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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 用数组降低程序的时间复杂度
2009/12/04 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
出国留学介绍信
2014/01/13 职场文书
总经理助理的职责
2014/03/14 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
获奖感言一句话
2015/07/31 职场文书
2015年中秋寄语
2015/07/31 职场文书