phpmailer 和 gmail SMTP 错误:无法连接到服务器:网络无法访问 (101) SMTP connect() 失败

问题描述 投票:0回答:6

我需要帮助,请 这是我的代码:

require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;

$mail->SMTPSecure = "tls";
$mail->Port = 587;

$mail->Username = '[email protected]';
$mail->Password = 'somepass';
$mail->addAddress('[email protected]', 'Josh Adams');
$mail->Subject = 'PHPMailer GMail SMTP test';
$body = 'This is the HTML message body in bold!';
$mail->MsgHTML($body);
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

我收到此错误: 2013-12-11 15:15:02 SMTP 错误:无法连接到服务器:网络无法访问 (101) SMTP connect() 失败。邮件程序错误:SMTP 连接()失败。

请问有什么帮助吗?

smtp gmail phpmailer
6个回答
8
投票

您可能需要首先隔离此问题以确定它是否确实是网络问题;或者它是否特定于 PHP 邮件程序或您的代码。在您的服务器上,从命令提示符处尝试使用 telnet 连接到端口 587 上的 smtp.gmail.com,如下所示:

telnet smtp.gmail.com 587

您应该会看到来自 smtp.gmail.com 的回复,如下所示:

Trying 173.194.74.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP f19sm71757226qaq.12 - gsmtp

您是否看到了这一点,或者连接尝试是否挂起并最终超时?如果连接失败,可能意味着您的托管公司正在阻止端口 587 上的传出 SMTP 连接。


4
投票

这对我有用:

改变:

  $mail->SMTPSecure = 'ssl';
  $mail->Host = 'smtp.gmail.com';
  $mail->Port = '465';

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

0
投票

以下代码:

$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Host = 'ssl://smtp.gmail.com:465';

0
投票

我在 Godaddy 托管上遇到了同样的问题,所以我花了很多时间并通过禁用服务器端的 SMTP 限制来修复它。

SMTP 代码适用于 PHPMailer

 $mail = new PHPMailer(true);

try {
    //Server settings
    //$mail->SMTPDebug = SMTP::DEBUG_SERVER;                       //Enable verbose debug output
    $mail->SMTPDebug = 2;                       //Enable verbose debug output           
    //$mail->isSMTP();                                             //Send using SMTP

    $mail->Host         = "tls://smtp.gmail.com";
    $mail->SMTPAuth     = true;
    $mail->Username     = [email protected];
    $mail->Password     = SMTP_PASSWORD;
    $mail->SMTPSecure   = "tls";
    $mail->Port         = 587;
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    //Recipients
    $mail->setFrom('[email protected]', 'Online Order');
    $mail->addAddress('[email protected]');     //Add a recipient
    $mail->addReplyTo('[email protected]', 'Jewellery');
   

    //Attachments
    //$mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Order';
    $mail->Body    = 'This is test email content';
    $mail->AltBody = 'This is test email content';

    if($mail->send()){
        return '1';                 
    }else{
        return 'Order email sending failed';
    }


0
投票

我还收到了 PHPMailer 错误:SMTP connect() 失败。

  1. 确保您的凭据正确。如果使用 smtp.gmail.com,您将必须添加两步验证并创建应用程序密码。您可以在 Gmail 帐户安全部分找到它。在您的项目中,使用创建的应用程序密码而不是主 gmail acc 密码。 PS 不要用创建的应用程序密码替换您的 gmail acc 主密码,它们必须不同。

  2. 您可以尝试对 SSL 使用不同的端口 465,对 TLS 使用不同的端口 587。

  3. 检查 Windows 防火墙是否阻止任何端口。 https://www.itechtics.com/check-windows-firewall-blocking-ports/?utm_content=cmp-true

  4. 您也可以尝试通过命令提示符使用telnet来查看是否存在网络问题。 https://mailtrap.io/blog/telnet-smtp-test/

     telnet smtp.gmail.com 587
    

    或者如果使用其他端口则

     telnet smtp.gmail.com 465
    

PS 您还可以尝试使用 openssl 而不是 telnet 。我想通过命令提示符使用 telnet 发送电子邮件,看看是我的代码失败还是其他原因。但不幸的是,telnet遇到了一些问题,无法使其工作,因此改用openssl并设法通过发送电子邮件。 https://www.baeldung.com/linux/openssl-send-emails

如果想尝试使用openssl我建议点击链接https://www.baeldung.com/linux/openssl-send-emailsand:

  • 从命令开始

    openssl s_client -host smtp.gmail.com -port 587 -starttls smtp -crlf

  • 当需要添加

    rcpt to: <recipientEmailAddress>
    命令时,请确保以小写形式书写 rcpt,并在 <> 之间添加电子邮件。

我希望它能帮助别人!


-3
投票

改变

$mail->SMTPSecure = "tls";

$mail->SMTPSecure = 'ssl';

© www.soinside.com 2019 - 2024. All rights reserved.