ECMall支持SSL连接邮件服务器的配置方法详解
ECMall支持SSL连接邮件服务器的配置方法详解
发布时间:2016-12-29 来源:查字典编辑
摘要:首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。然后,得对相应代码做一定调整。1.覆盖phpmailer请从附件进...

首先,主要是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>邮件服务器加密方式:</th>

<td>

{html_radios name="email_ssl" options=$email_ssl checked=$setting.email_ssl}

<label>此功能要求您的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教程学习
编程开发子分类