首先,主要是ecmall使用的PHPmailer版本太低,不支持加密连接。
然后,得对相应代码做一定调整。
1. 覆盖PHPmailer
请从附件进行下载:
2. 改造lib
涉及到两个lib:mail.lib.PHP 、mail_quequ.lib.PHP
{
$this->Mailer($from,$host,$port,$user,$pass,$SMTPSecure);
}
function Mailer($from,$SMTPSecure = false)
....
MailQueue中同理。
global.lib.PHP 约300行
function &get_mailer()中增加一行:
$mailer = new Mailer($sender,$from,$username,$password,$secure);//同时传递参数
后台模板:setting.email_setting.html 增加一个配置项
* 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');
}
}
{
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方式没有测试过。