首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。
然后,得对相应代码做一定调整。
1. 覆盖phpmailer
请从附件进行下载:
http://files.cnblogs.com/x3d/ecmall_phpmailer_lib.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} 此功能要求您的php必须支持openssl模块, 如果您要使用此功能,请联系您的空间商确认支持此模块
同时,修改邮件测试的参数传递
然后还需要修改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( 0 => lang::get('no'), 1 => 'ssl', 2 => '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方式没有测试过。
http://www.bkjia.com/phpjc/771648.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/771648.htmltecharticle首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。 然后,得对相应代码做一定调整。 1. 覆盖phpmailer 请从附件进行下载: http:...