本文轉自IT擺渡網歡迎轉載,請標明出處。
更多文章請閱讀
具體問題情況
最近在查找主題BUG的時候發現一個很有趣的現象,就是 SMTP 郵箱設置的問題,評論回覆是可以是可以不正常發送的,但是卻沒有任何審覈的提示,通過郵箱找回出現如下錯誤:
無法發送電子郵件。
可能原因:您的主機禁用了mail()函數。
檢測mail函數是否禁用
使用PHP探針來檢測主機商是否禁用了mail函數。
PHP探針代碼如下,保存爲php文件上傳到服務器打開就可以測試出來:
<!--?php if (function_exists('mail')) { echo "支持mail()函數!"; } else echo "不支持mail()函數!"; ?-->
解決方案
本來以爲是衡天主機禁用了mail()函數,但是通過PHP探針發現,並沒有禁用。
下面提供禁用和支持mail函數都出現mail函數被禁用的解決方案給大家,親身經歷啊,別再有人栽倒這裏了。
主機禁用mail函數解決方案
通過上面的PHP探針,如果發現主機禁用了mail函數則直接使用SMTP發送郵件來代替原來的mail函數
在這裏送上使用的SMTP郵箱設置代碼(示例爲博客郵箱設置),丟進 functions.php 就行了。
function mail_smtp( $phpmailer ){
$phpmailer->From = “[email protected]”; //發件人
$phpmailer->FromName = “PHP二次開發”; //發件人暱稱
$phpmailer->Host = “smtp.ym.163.com”; //SMTP服務器地址
$phpmailer->Port = 25; //SMTP端口,常用的有25、465、587,具體谷歌百度
$phpmailer->SMTPSecure = “”; //SMTP加密方式,常用的有SSL/TLS,具體谷歌百度
$phpmailer->Username = “[email protected]”; //郵箱帳號
$phpmailer->Password = *; //郵箱密碼(縉哥哥就用星號代替了)
$phpmailer->IsSMTP(); //使用SMTP發送
$phpmailer->SMTPAuth = true; //啓用SMTPAuth服務
}
add_action(‘phpmailer_init’,’mail_smtp’);
主機支持mail函數解決方案
如果測試支持mail函數往下看:
由於之前只有測試管理員的郵箱,後來我試着註冊新用戶,使用郵箱找回密碼的功能,結果郵件正常發送,毫無意外。
接着,我更換SMTP郵箱賬戶爲163郵箱,重新用管理員郵箱找回密碼,結果也是正常接收,毫無意外。
終於,大徹了,原來收件郵箱和發件郵箱不能相同。這個結果另我很意外,居然是出現在這麼小的環節上,弄得我以爲是主題問題,更改了好幾次代碼,囧,不過也因此修復了一個重大BUG。折騰啊,年輕不折騰還什麼時候折騰。
不過話說回來,自從更換了163郵箱後,163郵箱裏就收到一大堆的審覈啊,評論回覆啊,註冊啊的郵件提醒,神煩有木有,乾脆就單獨弄個管理員郵箱作爲發件郵箱,這樣就可以有效減少接收的郵件,這下子耳根子清靜了。