我的项目包含一个发送电子邮件的功能,即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;