wordpress遷到阿里雲後,解決郵件無法發送問題及“您的密碼重設鏈接無效”問題...

9166166-38c2ea3fc4d45c33.jpg
wordpress _ itlao5.com

自從將wordpress從香港主機切換回阿里雲,郵件一直都是不能使用的狀態,因爲是個人博客站點,所以也沒怎麼關注這一功能,昨晚上一朋友跟我反饋註冊賬號收不了郵件,於是決定來處理一下。

因爲wordpress默認使用的是mail()函數推送郵件,這個是阿里雲虛擬主機不支持的,所以,我們需要改爲smtp方式發送郵件

  1. 準備個郵箱,並且開啓smtp,阿里雲郵件推送,騰訊,163等都可以,我用的是同站點下的阿里雲企業郵箱。
  2. 安裝wordpress插件,我用的Easy WP SMTP(這裏我使用WP Mail SMTP插件時,配置好以後總是提示我出錯,所以改用的Easy WP SMTP),其中的smtp配置根據對應郵箱給出的提示進行就可以了,注意阿里雲服務器默認是關閉25端口的,所以Type of Encryption選擇None時,需要用80端口,我選擇的ssl,則是465端口,SMTP Host我是阿里雲企業郵箱,所以是smtp.mxhichina.com
  3. 阿里雲虛擬主機默認fsockopen函數是禁用的,這可能導致郵件無法發送,所以需要進入主機後臺,php高級設置--函數數值中,將PHP函數fsockopen設置爲啓動

以上設置過後,wordpress就可以發送郵件了,可以使用Easy WP SMTP的Test功能進行驗證。


另外,我還改了註冊及密碼找回裏面的一些小體驗問題:

1. 註冊和密碼找回郵件鏈接點擊後進入的不是重新設置密碼頁面,提示“您的密碼重設鏈接無效”;這個是由於鏈接前後帶有<>導致的,我們可以通過修改代碼,去掉<>來解決該問題
  • 解決找回密碼時提示“您的密碼重設鏈接無效”:

    打開WP根目錄下的 wp-login.php,找到如下代碼(374行左右):

    <pre>$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";</pre>

修改爲:

    <pre>$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";</pre>

即去掉兩個尖括號即可。

  • 解決新用戶註冊時,點擊郵件中的重置密碼鏈接提示“您的密碼重設鏈接無效”:

    打開WP安裝目錄下的/wp-includes/pluggable.php,找到如下代碼(1741行左右):

    <pre>$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";</pre>

修改爲:

    <pre>$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";</pre>

因爲是修改wordpress核心代碼,所以每次wordpress升級都需要重新修改。

當然,我們也可以通過修改functions.php來達到目的,我們可以加入以下函數

    <pre class="EnlighterJSRAW" data-enlighter-language="null">/**
    * 修復WordPress找回密碼提示“抱歉,該key似乎無效”問題
    */
    function reset_password_message( $message, $key ) {
        if ( strpos($_POST['user_login'], '@') ) {
        $user_data = get_user_by('email', trim($_POST['user_login']));
    } else {
        $login = trim($_POST['user_login']);
        $user_data = get_user_by('login', $login);
    }
        $user_login = $user_data->user_login;
        $msg = __('有人要求重設如下帳號的密碼:'). "\r\n\r\n";
        $msg .= network_site_url() . "\r\n\r\n";
        $msg .= sprintf(__('用戶名:%s'), $user_login) . "\r\n\r\n";
        $msg .= __('若這不是您本人要求的,請忽略本郵件,一切如常。') . "\r\n\r\n";
        $msg .= __('要重置您的密碼,請打開下面的鏈接:'). "\r\n\r\n";
        $msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
        return $msg;
    }
    add_filter('retrieve_password_message', reset_password_message, null, 2);</pre>

以上函數因爲是在主題中,所以每次修改主題都需要重新增加函數。

2. 另外,我發送我發送郵件後,顯示的名字是Wordpress,這就有點尷尬了...於是又折騰了一小會
在functions.php中加入以下代碼:
    <pre class="EnlighterJSRAW" data-enlighter-language="null">// 修改郵件發件人,地址
    add_filter('wp_mail_from', 'new_mail_from');
    add_filter('wp_mail_from_name', 'new_mail_from_name');
    function new_mail_from($old) {
     return '[email protected]';
    }
    function new_mail_from_name($old) {
     return 'IT老五';
    }
    // end 修改郵件發件人,地址</pre>

將顯示的發件人改爲IT老五,發件郵箱顯示爲[email protected],當然,同樣的問題是每次切換主題後需要重新修改。

  • 個人博客: IT老五 簡書:ThinkinLiu


    源創不易,允許轉載,來源誤刪,多謝合作

9166166-747b35dbf0925653
IT老五(it-lao5)(https://itlao5.com):關注公衆號,一起源創,一起學習!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章