为添加到PHPMailer / Gmail问题集合而道歉。我已经全部阅读过了,但仍无法解决这个问题。首先是错误信息:
2015-03-25 16:22:44连接:开通时间:2015-03-25 16:22:54 SMTP 错误:无法连接到服务器:连接尝试失败 因为关联方在一段时间后没有正确回应 时间或已建立的连接因连接的主机而失败 未能回应。 (10060)SMTP连接()失败。消息不是 发送。邮件程序错误:SMTP connect()失败。
此代码与我多次成功发送来自secureserver.net
帐户的电子邮件的代码相同,因此我非常确信该脚本是可靠的。问题必须在我尝试使用的gmail设置中(?)。
try {
$mail = new PHPMailer(true);
$mail->IsSMTP(); // Using SMTP.
$mail->CharSet = 'utf-8';
$mail->SMTPDebug = 2; // Enables SMTP debug information - SHOULD NOT be active on production servers!
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = 'true'; // Enables SMTP authentication.
$mail->Host = "smtp.gmail.com"; // SMTP server host.
$mail->Port = 587; // Setting the SMTP port for the GMAIL server.
$mail->Username = "XXXXXXXXXX@gmail.com"; // SMTP account username (GMail email address).
$mail->Password = "XXXXXXXXXX"; // SMTP account password.
$mail->AddReplyTo('XXXXXXXXXX@gmail.com', 'me'); // Use this to avoid emails being classified as spam - SHOULD match the GMail email!
$mail->AddAddress('someone.else@gmail.com', 'Someone Else'); // Recipient email / name.
$mail->SetFrom('XXXXXXXXXX@gmail.com', 'me'); // Sender - SHOULD match the GMail email.
$mail->Subject = 'PHPMailer Test Subject via smtp, basic with authentication';
$mail->Body = 'Test Body';
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
// $mail->MsgHTML($message);
$mail->Send();
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
我也尝试过465 / ssl端口(甚至是25端口,虽然这几乎肯定不会起作用)。我已经通过telnet验证我可以到达端口587:
telnet smtp.gmail.com 587
试用2607:f8b0:4001:c11 :: 6c ...
已连接 到gmail-smtp-msa.l.google.com。
逃脱角色是' ^]'。
220 mx.google.com ESMTP f1sm1137441igt.14 - gsmtp
我错过了什么?我已经过了几个小时了,我没有看到任何错误。谢谢!
答案 0 :(得分:1)
您检查过the troubleshooting guide吗?
使用SMTPDebug = 4
调试低级别连接(而不是SMTP)问题。
您确定使用的是最新的PHPMailer吗?你的代码看起来像是一个旧的例子。
从测试中消除PHPMailer会很好,因为我怀疑你的问题是较低级别的。编写一个简单的脚本,只需fsockopen
到端口587并从中读取,如下所示:
<?php
$fp = fsockopen('tcp://smtp.gmail.com', 587, $errno, $errstr, 10);
echo fgets($fp, 128);
fclose($fp);
如果有效,您会看到类似220 mx.google.com ESMTP eo1sm5152802wib.16 - gsmtp
的内容。
如果这不起作用,可以怀疑像php.ini设置,禁用功能,缺少扩展等等。