2016-05-06 191 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 ...”字符串必须在不同的行(你会发现他们评论你是否搜索它们)。 –

相关问题