phpmailer本身是一個很不錯的開源郵件類,也非常的易用簡單,就是偶爾會出現程序上傳到服務器上不能發送郵件的情況,在之前也有同學問過我這個問題,當時的時候總是不以為然,今天終於讓我碰上了,用phpmailer 在本地測試正常,上傳到服務器上就不行了,當然了是用的SMTP方式,最終確定是fsockopen 函數惹的禍,因為安全原因fsockopen 和pfsockopen 經常被服務器端關閉。解決方法如下:
而代之的應該是 stream_socket_client()函數,不過他的參數有一點不一樣。
應這樣更改phpmailer 的 class.stmp.php文件:
$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
改為
$this->smtp_conn = @stream_socket_client( $host.':'.$port, // the host of the server $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs
這裡 PHP版本應高於 5.0 的,因為較早版本沒有stream_socket_client()函數的。
OK ,問題解決了。