PHPMailer说无法连接到SMTP主机 [英] PHPMailer saying could not connect to SMTP host

查看:142
本文介绍了PHPMailer说无法连接到SMTP主机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在过去的两天里,我一直在尝试获取一个PHP脚本来发送电子邮件,但它似乎无法正常工作.首先,我尝试了普通的php邮件功能,然后尝试了PHPMailer,然后尝试了Swiftmailer.

For the past 2 days I've been trying to get a PHP script to send an e-mail and it doesn't seem to work. First I've tried the normal php mail function, then PHPMailer and then Swiftmailer.

我试图同时使用gmail的帐户和SMTP以及我的Internet提供商的电子邮件帐户和SMTP,但是都没有用.我尝试对两个SMTP服务器执行ping操作,它们工作正常,并且telnet也正确答复.在telnet smtp.gmail.com 587上说220 smtp.gmail.com ESMTP q125sm9630397wmd.19-gsmtp.我已经尝试过端口465和587,以及tls和ssl的组合.对于gmail,我还编辑了gmail帐户,以确保允许使用安全性较低的设备并允许使用imap等.

I've tried to use both gmail's accounts and SMTP and the email account and SMTP of my internet provider, none worked. I tried to ping both SMTP servers and they worked fine and telnet replied correctly as well. On telnet smtp.gmail.com 587 it said 220 smtp.gmail.com ESMTP q125sm9630397wmd.19 - gsmtp. I've tried both port 465 and 587 and combinations with tls and ssl. For gmail I also edited my gmail account to make sure it's allowed for less secure devices and to allow imap etc.

我正在Windows 7上的我自己的PC上运行apache.我已经转发了465和587端口.我已经通过了PHPMailer的疑难解答页面.我也禁用了防火墙进行测试,但这没有帮助.

I'm running apache on my own pc on windows 7. I've forwarded ports 465 and 587. I've already gone through the troubleshooting page of PHPMailer. I also disabled the firewall for testing, but that didn't help.

我已经正确编辑了php.ini设置,并且还确保了;.已从extension = php_openssl.dll中删除.

I have edited the php.ini settings correctly and also made sure the ; was removed from extension=php_openssl.dll.

这是我为gmail提供的示例PHPMailer的PHPMailer代码(我编辑了SMTP,帐户和密码):

This is my code for PHPMailer based on the example PHPMailer provided for gmail (I edited out the SMTP, accounts and passwords):

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 = 'x@x.x';                 // 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('x@x.x', 'Mailer');
$mail->addAddress('x@x.x');     // 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上将其与互联网提供商的电子邮件地址一起使用时,会出现此错误:

When I use that on my internet provider's SMTP with my internet provider email address I get this error:

2016-05-06 12:27:04 Connection: opening to smtp.x.x:587, timeout=300, options=array ( ) 2016-05-06 12:27:04 
Connection: opened 2016-05-06 12:27:04  
SERVER -> CLIENT: 220-smtp6.mnd.mail.iss.as9143.net ESMTP Fri, 06 May 2016 14:27:07 +0200 220-Sending spam or unsolicited commercial e-mail to this server is strictly 220-prohibited by our NO UBE / NO UCE policy. Abuse will be prosecuted and/or 220 charged per attempted recipient at international postal rates. 2016-05-06 12:27:04 
CLIENT -> SERVER: EHLO localhost 2016-05-06 12:27:04    
SERVER -> CLIENT: 250-smtp6.mnd.mail.iss.as9143.net Hello (MY IP ADDRESS, edited out for security) 250-SIZE 31457280 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP 2016-05-06 12:27:04
CLIENT -> SERVER: STARTTLS 2016-05-06 12:27:04  SERVER -> CLIENT: 220 TLS go ahead 2016-05-06 12:27:04  SMTP Error: Could not connect to SMTP host. 2016-05-06 12:27:04 CLIENT -> SERVER: QUIT 2016-05-06 12:27:04  
SERVER -> CLIENT: MIA�x�����dqi7��=���&J��3ʚ���ă�S�_��Z�$��NH�؏�|��m>[z@�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�Ai`Jㅇ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 ERROR: QUIT command failed: MIA�x�����dqi7��=���&J��3ʚ���ă�S�_��Z�$��NH�؏�|��m>[z@�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�Ai`Jㅇ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    
Connection: closed 2016-05-06 12:27:04  
SMTP connect() failed. Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

如您所见,它已连接,SMTP服务器似乎可以通过IP识别我并说继续",然后突然失败.我到处都是,对如何解决它一无所知.

As you can see it connects, the SMTP server seems to recognize me by IP and says 'go ahead' and then it suddenly fails. I've been looking everywhere and I'm completely clueless as to how I can fix it.

当我使用gmail的SMTP + gmail帐户时,它会说:

When I use gmail's SMTP + the gmail account it says this:

2016-05-06 17:42:40 Connection: opening to smtp.gmail.com:587, timeout=300, options=array ( ) 2016-05-06 17:42:40   
Connection: opened 2016-05-06 17:42:40  
SERVER -> CLIENT: 220 smtp.gmail.com ESMTP 8sm9564071wms.14 - gsmtp 2016-05-06 17:42:40 CLIENT -> SERVER: EHLO localhost 2016-05-06 17:42:40    
SERVER -> CLIENT: 250-smtp.gmail.com at your service, [MY IP ADDRESS] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250 SMTPUTF8 2016-05-06 17:42:40   
CLIENT -> SERVER: STARTTLS 2016-05-06 17:42:40  
SERVER -> CLIENT: 220 2.0.0 Ready to start TLS 2016-05-06 17:42:40  SMTP Error: Could not connect to SMTP host. 2016-05-06 17:42:40
CLIENT -> SERVER: QUIT 2016-05-06 17:42:40  
SERVER -> CLIENT: 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��c@>����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��c@>����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  
Connection: closed 2016-05-06 17:42:40  SMTP connect() failed.  Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

在调试模式4上,它表示相同(这仅显示了当时获得的巨大文本墙的一部分):

On debug mode 4 it says the same (this shows only a part of the huge text wall you get then):

CLIENT -> SERVER: STARTTLS 2016-05-06 17:55:10 
SMTP -> get_lines(): $data is "" 2016-05-06 17:55:10    
SMTP -> get_lines(): $str is "220 TLS go ahead " 2016-05-06 17:55:10    
SERVER -> CLIENT: 220 TLS go ahead 2016-05-06 17:55:10  SMTP Error: Could not connect to SMTP host. 2016-05-06 17:55:10 
CLIENT -> SERVER: QUIT 2016-05-06 17:55:10  
SMTP -> get_lines(): $data is "" 2016-05-06 17:55:10    
SMTP -> get_lines(): $str is "MIA " 2016-05-06 17:55:10 
SMTP -> get_lines(): $data is "MIA " 2016-05-06 17:55:10

它表示准备启动TLS,然后说连接再次失败.我已经在stackoverflow上阅读了很多与此相关的主题,但是到目前为止,所提供的解决方案和选项都没有奏效.有人知道吗?

It says Ready to start TLS and then it says connection failed again. I've read a lot of topics about this on stackoverflow, but none of the solutions and options offered there has worked so far. Does anyone have any idea?

推荐答案

@David Kariuki解决方案中的SMTPOptions行解决了我的问题. 由于TLS握手失败,导致SMTP连接失败.

The SMTPOptions line in @David Kariuki's solution fixed my issue. Was getting a SMTP connect failure due to the failure in the TLS handshake.

$mail->SMTPOptions = array(
                  'ssl' => array(
                      'verify_peer' => false,
                      'verify_peer_name' => false,
                      'allow_self_signed' => true
                  )
              );

这篇关于PHPMailer说无法连接到SMTP主机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆