PHPMailer无法发送电子邮件

时间:2014-08-15 03:55:10

标签: php email 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

enabled extension=php_openssl.dll已经php.ini了。

这是我的代码:

$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 {
}

谢谢

2 个答案:

答案 0 :(得分:2)

这通常被报告为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';

您可以通过在服务器上运行某些命令来实现连接(您需要安装dnsutilstelnet个软件包)。首先检查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;

答案 1 :(得分:0)