ECMall支持SSL连接邮件服务器的配置方法详解 |
首先,主要是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类 */ tls方式没有测试过 。 |