ECMall支持SSL連接郵件服務器的配置方法詳解

 更新時間:2014年05月19日 10:13:39   作者:   我要評論
這篇文章主要介紹了ECMall支持SSL連接郵件服務器的配置方法詳解

首先,主要是ecmall使用的phpmailer版本太低,不支持加密連接。

然后,得對相應代碼做一定調整。

1. 覆蓋phpmailer

請從附件進行下載:

復制代碼 代碼如下:

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類 */
            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方式沒有測試過。

相關文章

  • 分享五個PHP7性能優化提升技巧

    分享五個PHP7性能優化提升技巧

    本文給大家分享五個PHP7性能優化提升技巧,對php7性能提升相關知識感興趣的朋友一起學習吧
    2015-12-12
  • ThinkPHP3.1的Widget新用法

    ThinkPHP3.1的Widget新用法

    這篇文章主要介紹了ThinkPHP3.1的Widget新用法,需要的朋友可以參考下
    2014-06-06
  • Laravel5中Cookie的使用詳解

    Laravel5中Cookie的使用詳解

    這篇文章主要介紹了Laravel5中Cookie的使用,需要的朋友可以參考下
    2017-05-05
  • php Session無效分析資料整理

    php Session無效分析資料整理

    Session在開發中是非常重要的一個數據存儲變量了,它可以實現不同頁面之間的傳值了,下面我們來為各位介紹在使用Session時碰到過期無效的一些問題吧,需要的朋友可以參考下
    2016-11-11
  • PHP 自動加載的簡單實現(推薦)

    PHP 自動加載的簡單實現(推薦)

    下面小編就為大家帶來一篇PHP 自動加載的簡單實現(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • ThinkPHP結合AjaxFileUploader實現無刷新文件上傳的方法

    ThinkPHP結合AjaxFileUploader實現無刷新文件上傳的方法

    這篇文章主要介紹了ThinkPHP結合AjaxFileUploader實現無刷新文件上傳的方法,是ThinkPHP文件上傳中一個比較典型的應用技巧,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • PHP實現QQ、微信和支付寶三合一收款碼實例代碼

    PHP實現QQ、微信和支付寶三合一收款碼實例代碼

    這篇文章主要給大家介紹了關于利用PHP如何實現QQ、微信和支付寶三合一收款碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-02-02
  • PHPThumb圖片處理實例

    PHPThumb圖片處理實例

    這篇文章主要介紹了PHPThumb圖片處理實例,例如生成縮略圖、圖片尺寸調整、圖片截取、圖片加水印、圖片旋轉等,需要的朋友可以參考下
    2014-05-05
  • 使用PHPMailer發送郵件實例

    使用PHPMailer發送郵件實例

    這篇文章為大家詳細主要介紹了使用PHPMailer發送郵件的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 淺談使用 PHP 進行手機 APP 開發(API 接口開發)

    淺談使用 PHP 進行手機 APP 開發(API 接口開發)

    做過 API 的人應該了解,其實開發 API 比開發 WEB 更簡潔,但可能邏輯更復雜,因為 API 其實就是數據輸出,不用呈現頁面,所以也就不存在 MVC(API 只有 M 和 C),那么我們來探討下,如何使用php進行手機API接口開發
    2014-08-08

最新評論

码报108