在做郵件發送的時候遇到了一個問題,就是:
Trying to smtp.qq.com:465 Error: Remote host returned “” Error: Cannot connenct to relay host smtp.qq.com Error: (0) Error: Cannot send email to pooy@pooy.net
這個問題是說鏈接不到郵件服務器。我首先是按照騰訊的企業郵箱來做配置的。
在后臺,系統基本參數-》核心設置 里面設置如下:
然后在后臺參考/user/reg_new.php這個注冊程序,寫了一個test腳本:
$to = "pooy@pooy.net";
$userhash = md5($cfg_cookie_encode.'--'.$mid.'--'.$email);
$url = $cfg_basehost.(empty($cfg_cmspath) ? '/' : $cfg_cmspath)."/member/index_do.php?fmdo=checkMail&mid={$mid}&userhash={$userhash}&do=1";
$url = preg_replace("#http:\/\/#i", '', $url);
$url = 'http://'.preg_replace("#\/\/#", '/', $url);
$mailtitle = "{$cfg_webname}--會員郵件驗證通知";
$mailbody = '';
$mailbody .= "尊敬的用戶[{$uname}],您好:\r\n";
$mailbody .= "歡迎注冊成為[{$cfg_webname}]的會員。\r\n";
$mailbody .= "要通過注冊,還必須進行最后一步操作,請點擊或復制下面鏈接到地址欄訪問這地址:\r\n\r\n";
$mailbody .= "{$url}\r\n\r\n";
$mailbody .= "Power by pooy!\r\n";
$headers = "From: ".$cfg_adminemail."\r\nReply-To: ".$cfg_adminemail;
if($cfg_sendmail_bysmtp == 'Y' && !empty($cfg_smtp_server))
{
$mailtype = 'TXT';
require_once(DEDEMINC.'/mail.class.php');
$smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
$smtp->debug = true;
$smtp->sendmail($to,$cfg_webname,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
}else{
@mail($to, $webname, $subject, $headers);
}
上面這段代碼,里面利用了2中發送郵件的方式,第一種是利用/include/mail.class.php這個類來發送,第二種是利用系統的郵件系統發送。
執行之后,就開始報錯:
Trying to smtp.qq.com:465 Error: Remote host returned “” Error: Cannot connenct to relay host smtp.qq.com Error: (0) Error: Cannot send email to pooy@pooy.net
然后使用:
@mail($to, $webname, $subject, $headers);
發現可以正常發送,只是有丁點慢。不過還能接受。然后就開始調試,1個小時無果,然后就打開foxmail添加該企業郵箱,發現了一個問題:
如果仔細查看,會發現foxmail默認導入的時候是使用的是:
服務器:smtp.qq.com
端口 :25
而不是企業郵箱里面提示的: