欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-01-21 11:20:58
...
首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。

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

1. 覆盖phpmailer

请从附件进行下载:

复制代码 代码如下:

http://cywl.php.net:81/201405/yuanma/ecmall_phpmailer_lib(php.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 增加一个配置项

复制代码 代码如下:


邮件服务器加密方式:

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



同时,修改邮件测试的参数传递

复制代码 代码如下:


然后还需要修改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方式没有测试过。