PHP 邮件程序的 Gmail SMTP 错误

Gmail SMTP Error With PHP Mailer

我知道这个问题已经被问了很多,我已经通读了其中的大部分。

我在尝试使用我的 Gmail 帐户通过 PHP 邮件程序和 WAMP 服务器从 PHP 发送电子邮件时遇到此错误。

  1. 它一直工作到昨天没有任何问题(大约 3 个月以来)。
  2. 我没有更改邮件助手函数中的任何代码。
  3. php-openssl.dll 在我的 wamp 设置中启用。
  4. 尝试使用 ssl 和 465,无法连接。
  5. 我在 google 设置中启用了 "Allow less secured apps"。
  6. 我试过使用 gethostbyname()。它不起作用。
  7. 它正在与我组织的电子邮件服务器一起使用,该服务器不使用任何安全措施。

这是我的php邮件程序功能代码。正在从数据库中检索所有设置。因为它是一个多用户应用程序。

// Email Settings
    $from=$details->from;
    $mailer=$details->mailer;
    $subject=$details->subject;

    $mail = new PHPMailer(true);                                // Passing `true` enables exceptions
    try {
        //Server settings
        $mail->SMTPDebug = $settings->debug;                    // Enable verbose debug output
        $mail->isSMTP();                                        // Set mailer to use SMTP
        $mail->Host = $settings->host;          // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                                 // Enable SMTP authentication
        $mail->Username = $settings->login;                     // SMTP username
        $mail->Password = $pass;                                // SMTP password
        $mail->SMTPSecure = $settings->security;                // Enable TLS encryption, `ssl` also accepted
        $mail->Port = $settings->port;                          // TCP port to connect to

        //From
        $mail->setFrom($from, $mailer);

        //Recipients
        $mail->addAddress($details->to,$details->recipientName);     // Add a recipient           // Name is optional
        $mail->addReplyTo($from, $mailer);
        foreach($quote->cc as $cc)
        {
            $mail->addCC($cc);
        }
        //Attachments
        foreach($quote->attachments as $file)
        {
            $mail->addAttachment($file);    // Add attachments  // Optional name
        }
        //Content
        $mail->isHTML(true);                                  // Set email format to HTML
        $mail->Subject = $subject;
        $mail->Body    = $message;
        $mail->AltBody = 'Non-HTML Mail Clients Not Supported, Please View This email in a browser or get a HTML friendly Email Client.';
        $mail->send();
    }
    catch (Exception $e)
    {
        $return=array(1,'Error: '.$mail->ErrorInfo);
    }
return $return;
}

我得到的错误是

2017-12-04 07:15:26 SERVER -&gt; CLIENT: 220 smtp.gmail.com ESMTP w9sm23070345pfk.16 - gsmtp<br>
2017-12-04 07:15:26 CLIENT -&gt; SERVER: EHLO projects<br>
2017-12-04 07:15:26 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [49.213.37.11]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2017-12-04 07:15:26 CLIENT -&gt; SERVER: STARTTLS<br>
2017-12-04 07:15:27 SERVER -&gt; CLIENT: 220 2.0.0 Ready to start TLS<br>
SMTP Error: Could not connect to SMTP host.<br>
2017-12-04 07:15:27 CLIENT -&gt; SERVER: QUIT<br>
2017-12-04 07:15:27 <br>
2017-12-04 07:15:27 <br>
SMTP Error: Could not connect to SMTP host.<br>
[1,"Error: SMTP Error: Could not connect to SMTP host."]

感谢任何帮助。

PS : 我使用的设置是

  1. 主持人:smtp.gmail.com。
  2. 用户名和密码:我已经检查过,我可以在 gmail web 上登录我的帐户。
  3. 安全性:tsl
  4. 端口:587。

我怀疑是不是我的代码。因为如果这是我的代码,那么它就无法与我组织的电子邮件服务器一起使用,它不像 gmail 那样复杂。

我看到了与您的问题类似的错误,我通过以下方式解决了我的问题:

  1. 从 apache 启用 extentsion ssl
  2. 从 PHPMailer 更新最新代码
  3. 添加一些代码:

    $mail->SMTPOptions = array(
    
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
    

    );

成功了!