doudandui1592 2016-05-06 18:23
浏览 461

PHPMailer说无法连接到SMTP主机

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.

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.

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.

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

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';
}

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

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.

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

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

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?

  • 写回答

2条回答 默认 最新

  • dongpo2458 2017-10-27 19:37
    关注

    The same problem I had using Gmail and I solved it by downloading the cacert.pem certificate from the site https://curl.haxx.se/docs/caextract.html You should also write the php.ini file as follows:

    extension = php_openssl.dll openssl.cafile = C: \ xampp \ php \ extras \ ssl \ cacert.pem

    It must be activated in the GMail account in the label: Access and security of the option: Allow less secure apps access option: ON

    This solution is thanks to matteobin user contribution, of stackoverflow

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题