PHPMailer无法发送电子邮件

我的项目包含一个发送电子邮件的功能,即PHPMailer.它运行良好,从我的localhost服务器发送电子邮件,但它今天停止发送电子邮件,现在它显示此错误消息

SMTP Error: Could not connect to SMTP host.

我添加了此代码$mail-> SMTPDebug = 1;查看调试错误,现在显示此消息:

SMTP ERROR: Failed to connect to server: php_network_getaddresses: getaddrinfo failed: The requested name is valid, but no data of the requested type was found.  (0) SMTP Error: Could not connect to SMTP host

我已经在php.ini中启用了extension = php_openssl.dll.

这是我的代码:

$mail = new PHPMailer();
$mail->SMTPSecure = 'ssl';
$mail->IsSMTP();
$mail->Username = "myemail@gmail.com"; // your GMail user name
$mail->Password = "password"; 
$mail->AddAddress($email); // recipients email 
$mail->FromName = "username"; // readable name
$mail->IsHTML(true);
$mail->Subject = "title";
$mail->Body    = " Message"; 
$mail->SMTPDebug = 1; 
$mail->Host = "ssl://smtp.gmail.com"; // GMail
$mail->Port = 465;
$mail->IsSMTP(); // use SMTP
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->From = $mail->Username;
if($mail->Send()){
} else {
}

谢谢

解决方法:

这通常被报告为PHPMailer问题(并且这个问题有很多重复),但它几乎总是由于本地DNS故障,防火墙阻塞或本地网络上的其他网络问题.

首先,确保您使用的是latest PHPMailer.

不要在端口465上使用SSL,它是deprecated since 1998,仅供未获得备忘录的Microsoft产品使用;在端口587上使用TLS代替:

$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;

或者更简洁:

$mail->Host = 'tls://smtp.gmail.com:587';

您可以通过在服务器上运行某些命令来连接它(您将需要安装dnsutils和telnet软件包).首先检查DNS是否正常工作:

dig +short smtp.gmail.com

如果您的DNS工作正常,您将得到类似的内容:

gmail-smtp-msa.l.google.com.
173.194.67.108
173.194.67.109

接下来尝试telnet到您需要的端口上的主机:

telnet smtp.gmail.com 587

这应该给你这样的东西:

Trying 173.194.67.109...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP ex2sm16805587wjd.30 - gsmtp

(输入quit退出).

如果其中任何一个失败,PHPMailer也将无法正常工作.所以去修复你的网络,然后再试一次.如果您无法控制自己的防火墙或DNS,则可能需要向ISP提出支持请求以解决此问题.如果他们无法解决问题,则需要更换ISP.

回到PHPMailer,您可以通过设置获得关于连接的较低级别反馈:

$mail->SMTPDebug = 4;
上一篇:php邮件附件


下一篇:PHPMailer使用Gmail作为SMTP服务器.无法连接到SMTP主机.邮件程序错误:SMTP错误:无法连接到SMTP主机