【问题标题】:PHPMailer cannot send emailPHPMailer 无法发送电子邮件
【发布时间】:2023-03-20 09:26:01
【问题描述】:

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

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 中有enabled 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 {
}

谢谢

【问题讨论】:

    标签: php email phpmailer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2015-09-06
        • 2020-11-25
        • 2017-07-19
        • 2017-10-05
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多