如何解决:PHP中无法通过主机smtp.gmail.com建立连接[连接超时#110]错误

时间:2019-07-09 17:27:12

标签: php email smtp gmail swiftmailer

我正在尝试为我正在使用的登录系统设置电子邮件验证系统。我的PHP代码中几乎所有东西都可以正常工作,直到$ mailer-> send($ message)行返回上述错误。

我已经在stackoverflow和其他站点上查看了其他几个类似的问题,但是所提出的解决方案均无效。我在发送验证电子邮件的gmail帐户上启用的安全性较低的应用程序。我已经尝试分别使用端口465和587的ssl和tls。我不想禁用不必要的任何安全性。尽管我对编码知识相当有信心,但恐怕我对类似服务器相关问题的经验很少。过去,我已经成功创建了一个通过电子邮件验证的登录系统,但是我不记得如何避免此问题。如果这与防火墙或类似问题有关,我只要求提供更多信息,因为可以认为我本质上是该领域的外行。

<?php
require_once './vendor/autoload.php';

function sendVerificationEmail($userEmail, $verificationCode)
{
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
->setUsername("fromEmail@email.com")
->setPassword("password");

$mailer = new Swift_Mailer($transport);
$body = "";
    $message = (new Swift_Message('Verify your email'))
        ->setFrom("fromEmail@email.com")
        ->setTo($userEmail)
        ->setBody($body);

    echo "Message Created. Send To: " . $userEmail;
    try
    {
      if ($mailer->send($message, $errors))
      {
        echo "email success.";
        return true;
      }
      else
      {
        echo "email no good.";
        echo "ERROR: " . $errors;
        return false;
      }
    }
    catch(Swift_SwiftException $e)
    {
      echo "ERROR: " . $e->getMessage();
    }
}

?>

许多代码是从标准教程派生的。我只是想确保在实际包含验证功能之前先发送一封电子邮件。我不知道为什么这不发送电子邮件。专门返回“无法使用主机smtp.gmail.com [连接超时#110]建立连接”错误。

谢谢您的时间。

2 个答案:

答案 0 :(得分:0)

这始终是您的应用程序与Google服务器之间的连接问题。每当Google拒绝连接时,Google都会实际返回错误,包括知识库文章。您可以使用SMTP测试器工具甚至任何Outlook,电话IMAP / SMTP连接轻松测试同一连接。恐怕我无法为您提供代码,但是我可以肯定地告诉您问题不是您的Google帐户(我已经看过很多次了)。

您还可以尝试使用Google的非限制性服务器(ASPMX.L.GOOGLE.COM)端口25,无需进行身份验证,它可以在不使用用户名/密码的情况下测试连接,但只能将电子邮件发送到google服务器。

祝你好运

答案 1 :(得分:0)

我最终通过使用用于Wordpress的SMTP插件(WP Mail SMTP)解决了该问题,该插件托管了页面和登录系统。它使用了我设置的一些0Auth2内容,所以我没有完全浪费我的精力。谢谢大家的时间和帮助。