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

2015-01-24信息快讯网

这篇文章主要介绍了ECMall支持SSL连接邮件服务器的配置方法详解

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

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

1. 覆盖phpmailer

请从附件进行下载:

http://cywl.jb51.net:81/201405/yuanma/ecmall_phpmailer_lib(jb51.net).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方式没有测试过。

使用PHPMailer实现邮件发送代码分享
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
php生成百度sitemap站点地图类函数实例
PHP中使用Session配合Javascript实现文件上传进度条功能
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
自定义session存储机制避免会话保持问题
Drupal简体中文语言包安装教程
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
PHP会话控制:Session与Cookie详解
php实现的支持imagemagick及gd库两种处理的缩略图生成类
php中unserialize返回false的解决方法
PHP提示Cannot modify header information - headers already sent by解决方法
PHP正则替换函数preg_replace和preg_replace_callback使用总结
dedecms函数分享之获取某一栏目所有子栏目
PHP小技巧之JS和CSS优化工具Minify的使用方法
php开启openssl的方法
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
PHP中把stdClass Object转array的几个方法
codeigniter框架The URI you submitted has disallowed characters错误解决方法
php中session过期时间设置及session回收机制介绍
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
PHP的preg_match匹配字符串长度问题解决方法
php获取网卡的MAC地址支持WIN/LINUX系统
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
在PHP模板引擎smarty生成随机数的方法和math函数详解
PHP函数addslashes和mysql_real_escape_string的区别
CodeIgniter框架提示Disallowed Key Characters的解决办法
使用openssl实现rsa非对称加密算法示例
©2014-2024 dbsqp.com