之前做專案的時候做了一個用phpmailer發送郵件的功能《CI框架結合PHPmailer發送郵件》,昨天步署上線(剛開始用新浪雲,嫌貴,換成阿里了),測試的時候,發送郵件卻意外報錯了..........
然後我在class.phpmailer.php中,將
public function IsSMTP() { $this->Mailer = 'smtp'; } //改成 public function IsSMTP() { $this->Mailer = 'SMTP'; }
然後將:
switch($this->Mailer) { case 'sendmail': return $this->SendmailSend($header, $body); case 'smtp': return $this->SmtpSend($header, $body); default: return $this->MailSend($header, $body); } //改成 switch($this->Mailer) { case 'sendmail': return $this->SendmailSend($header, $body); case 'SMTP': return $this->SmtpSend($header, $body); default: return $this->MailSend($header, $body); }
我本來以為這樣就可以了,重啟Apache,再次測試一下,結果第一個錯誤是解決了,又出現了一個報錯:
? ? ? ? ?
不知道你們有沒有出現,我運氣差,只好又求助度娘,終於找到原因:有的虛擬主機,或伺服器,為了安全起見屏蔽了「fsockopen()函數」導致無法傳送郵件。
下面說解決方法:
首先,在php.ini中去掉下面的兩個分號
;extension=php_sockets.dll
;extension=php_openssl.dll
之前我用PHPmailer的時候已經去掉了,這裡只是提示一下。
接著取代fsockopen函數
將class.smtp.php檔案中fsockopen函數換成pfsockopen函數:
$this->smtp_conn = @fsockopen($host, // the host of the server $port, // the port to use $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs //fsockopen改为: $this->smtp_conn = @pfsockopen($host, // the host of the server $port, // the port to use $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs
這樣設定完,我的已經可以成功傳送郵件了,如果同樣有這方面問題的,可以參考上面的範例試試看。
以上是使用phpmailer發送郵件提示SMTP Error錯誤的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!