1. 云栖社区>
  2. PHP教程>
  3. 正文

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

作者:用户 来源:互联网 时间:2017-12-01 15:17:57

邮件服务器

ECMall支持SSL连接邮件服务器的配置方法详解 - 摘要: 本文讲的是ECMall支持SSL连接邮件服务器的配置方法详解,首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。然后,得对相应代码做一定调整。1. 覆盖phpmailer请从附件进行下载:http://cywl.jb51.net:81/201405/yuanma/ecmall_

首先,主要是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方式没有测试过。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索邮件服务器 ,以便于您获取更多的相关知识。