2016-05-06 134 views
0

在過去的兩天裏,我一直在試圖讓PHP腳本發送電子郵件,它似乎並沒有工作。首先,我嘗試了普通的PHP郵件功能,然後是PHPMailer,然後是Swiftmailer。PHPMailer說無法連接到SMTP主機

我試過同時使用Gmail的帳戶和SMTP和我的互聯網提供商的電子郵件帳戶和SMTP,沒有工作。我試圖ping兩個SMTP服務器,他們工作正常,telnet也正確回答。在telnet smtp.gmail.com 587上表示220 smtp.gmail.com ESMTP q125sm9630397wmd.19 - gsmtp。我已經嘗試了端口465和587以及tls和ssl的組合。對於Gmail,我還編輯了我的gmail帳戶,以確保它允許不太安全的設備,並允許imap等

我在Windows 7上運行我自己的電腦上的apache。我轉發了端口465和587.我已經瀏覽了PHPMailer的故障排除頁面。我也禁用了防火牆進行測試,但這沒有幫助。

我已經正確編輯了php.ini設置,並確保了;已從extension = php_openssl.dll中刪除。

這是一個基於PHPMailer的規定適用於Gmail的例子我的PHPMailer的代碼(我編輯了SMTP,賬號及密碼):

require '/PHPMailer/PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

$mail->SMTPDebug = 3;        // Enable verbose debug output 

$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'smtp.x.x'; // Specify main and backup SMTP servers 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Username = '[email protected]';     // SMTP username 
$mail->Password = 'password';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 

$mail->setFrom('[email protected]', 'Mailer'); 
$mail->addAddress('[email protected]');  // Add a recipient 

$mail->isHTML(true);         // Set email format to HTML 

$mail->Subject = 'Here is the subject'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->send()) { 
$checkup = 'Something went wrong'; 
echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
$checkup = 'Success'; 
} 

當我使用我的互聯網服務提供商與我的互聯網服務提供商SMTP電子郵件地址我得到這個錯誤:

2016-05-06 12:27:04連接:打開smtp.xx:587,超時= 300,選項=數組()2016-05-06 12:27:04連接:打開2016-05-06 12:27:04服務器 - >客戶端:220-smtp6.mnd.mail.iss.as9143.net ESMTP週五,06五月2016 14:27:07 +0200 220-發送垃圾郵件或不請自來商業電子郵件到這臺服務器是嚴格禁止我們的NO UBE/NO UCE政策。虐待將以國際郵寄費率向每個嘗試接受者起訴和/或收取220元費用。 2016-05-06 12:27:04客戶端 - >服務器:EHLO localhost 2016-05-06 12:27:04 SERVER - >客戶端:250-smtp6.mnd.mail.iss.as9143.net你好(我的IP地址,出於安全考慮)250-SIZE 31457280 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP 2016-05-06 12:27:04客戶端 - >服務器:STARTTLS 2016-05-06 12:27:04 SERVER - >客戶端:220 TLS繼續2016-05-06 12:27:04 SMTP錯誤:無法連接到SMTP主機。 2016-05-06 12:27:04客戶端 - >服務器:QUIT 2016-05-06 12:27:04服務器 - >客戶端:MIA x dqi7 = &J 3ʚ ă S Z $ NH | m> [[email protected] f g G .pAGD 8Q : J *'L a8% v (*YC u ФW s l #6F w 9 | \% ! B =: /U m bc\ cڊ 4 d -U seEZ PC Q AiJㅇK�U�]h���H�v���i���cF M΂�x ���}���V�HR�c�!��, *) $Oȕ ȕ EMƍ &B + u9A R j'[7 y a N 2016-05-06 12:27:04 SMTP錯誤:QUIT命令失敗:MIA x dqi7 = &J 3ʚ ă S Z $ NH | m> [z @ f g G .pAGD8Q:J'La8%v(*YCuФWs l #6F w 9 | \% ! B=: /U m bc\ cڊ 4 d - EEZ PC Q AiJㅇK�U�]h���H�v���i���cF M΂�x ���}���V�HR�c�!��, *) $Oȕ ÖEMƍ &B + u9A R j'[7 y a N 2016-05-06 12:27:04連接:關閉2016-05-06 12:27:04 SMTP connect()失敗。郵件程序錯誤:SMTP連接()失敗。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

正如你可以看到它連接,SMTP服務器似乎通過IP識別我並說「繼續」,然後突然失敗。我一直在尋找,我完全不知道如何解決它。

當我使用Gmail的SMTP +的Gmail帳戶它說: 2016-05-06 17:42:40連接:打開smtp.gmail.com:587,超時= 300,選項=陣列()2016 -05-06 17:42:40連接:打開2016-05-06 17:42:40 SERVER - >客戶端:220 smtp.gmail.com ESMTP 8sm9564071wms.14 - gsmtp 2016-05-06 17:42:40客戶端 - >服務器:EHLO localhost 2016-05-06 17:42:40 SERVER - > CLIENT:250-smtp.gmail。[我的IP地址] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250 SMTPUTF8 2016-05-06 17:42:40客戶端 - >服務器:STARTTLS 2016-05-06 17 :42:40服務器 - >客戶端:220 2.0.0準備啓動TLS 2016-05-06 17:42:40 SMTP錯誤:無法連接到SMTP主機。 2016-05-06 17:42:40客戶端 - >服務器:QUIT 2016-05-06 17:42:40服務器 - >客戶端:MIA b8 4} 5KO q0$ & Br Q P = r$ %➽, X 「 c 5ȭ D C b B T bڌڌ ܋ X1T%_��� �QQ����y}]OO�����8d�R|�$�����b�����[� ,��5�[*�H����5�l���B����a����f��f���Pj��[email protected]>����vk+Cq�r*��-�4��� W勱A A�S ,�w:�q�1�����.����*�',ȁ��iH�T0�E�/1W�� |�i4�{�Gk�J�n,US�F�|���|L����n}Qp� 2016-05-06 17:42:40 SMTP ERROR: QUIT command failed: MIA��b8 ��4}�5KO�q0$&��B.r��Q���P��=���r$�%➽,��X�"�c�5ȭ�D�C�b���B��@��T�?bڌ_�*܋����X1`T%_��� �QQ����y}]OO�����8d�R|�$�����b�����[� ,��5�[*�H����5�l���B����a����f��f���Pj��[email protected]>����vk+Cq�r*��-�4���`W勱AA S, w: q 1 .,',ȁ iH T0 E /1W | i4 { G ,US F | |L n}Qp 2016-05-06 17:42:40連接:關閉2016-05-06 17:42:40 SMTP在調試模式4中,它說的是相同的(這隻顯示了當時的巨大文本牆的一部分): 客戶端 - >服務器:STARTTLS 2016-05-06 17:55:10 SMTP - > get_lines():$ data是「」2016-05-06 17:55:10 SMTP - > get_lines():$ str是「220 TLS繼續」2016-05-06 17:55:10 SERVER - >客戶端:220 TLS繼續2016-05-06 17:55:10 SMTP錯誤:無法連接到SMTP主機。 2016-05-06 17:55:10客戶端 - >服務器:QUIT 2016-05-06 17:55:10 SMTP - > get_lines():$ data是「」2016-05-06 17:55:10 SMTP - > get_lines():$ str是「MIA」2016-05-06 17:55:10 SMTP - > get_lines():$ data是「MIA」2016-05-06 17:55:10

它說準備好啓動TLS,然後說連接再次失敗。我已經閱讀了很多關於這個在stackoverflow上的話題,但是迄今爲止提供的解決方案和選項都沒有工作。有人有什麼主意嗎?

+0

您是否嘗試過使用您擁有的smtp憑據從本地郵件客戶端發送電子郵件? – wodka

+0

是的,我用outlook連接到我的主機提供商地址,然後我可以發送電子郵件沒有任何問題。 – DrD

+0

如果你只是添加phpinfo();在你打電話的文件中 - 是否顯示正在加載的openssl? – wodka

回答

1

同樣的問題,我使用Gmail和我從網站上下載cacert.pem證書https://curl.haxx.se/docs/caextract.html你也應該寫在php.ini文件解決了這個問題:

延長= php_openssl.dll OpenSSL的。憑證檔案錯誤= C:\ XAMPP \ PHP \演員\ SSL \ cacert.pem

它必須在標籤中的Gmail帳戶被激活:選項的訪問和安全性:允許不夠安全的應用訪問選項:在

此解決方案得益於matteobin用戶貢獻,stackoverflow

+0

最後一個解決方案,:) :) 只要記住,在php.ini文件的「擴展= ...」和「openssl.cafile ...」字符串必須在不同的行(你會發現他們評論你是否搜索它們)。 –

相關問題