Swift_TransportException 无法与主机 smtp.gmail.com 建立连接

Posted

技术标签:

【中文标题】Swift_TransportException 无法与主机 smtp.gmail.com 建立连接【英文标题】:Swift_TransportException Connection could not be established with host smtp.gmail.com 【发布时间】:2012-12-20 01:28:49 【问题描述】:

我一生都想不通为什么它会失败..这是我得到的确切错误:

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection  
could not be established with host smtp.gmail.com [Connection refused #111]' in 
/home/content/38/6896038/html/test/lib/classes/Swift/Transport/StreamBuffer.php:259 
Stack trace: #0 
/home/content/38/6896038/html/test/lib/classes/Swift/Transport/StreamBuffer.php(64): 
Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/content/38/6896038/html/test/lib/classes/Swift/Transport/AbstractSmtpTransport.php(115): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/content/38/6896038/html/test/lib/classes/Swift/Mailer.php(80): Swift_Transport_AbstractSmtpTransport->start() #3 /home/content/38/6896038/html/test/contact.php(55): Swift_Mailer->send(Object(Swift_Message)) #4 main thrown in /home/content/38/6896038/html/test/lib/classes/Swift/Transport/StreamBuffer.php on line 259

我使用的代码是我从教程和阅读这里的例子中得到的,这里是:

require_once 'lib/swift_required.php';

$transport = Swift_MailTransport::newInstance();

// Create the Transport the call setUsername() and setPassword()
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('email@googleappsdomain.com')
  ->setPassword('xxx')
  ;

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

$nombre = $_POST['name'];
$apellido = $_POST['apellido'];
$email = $_POST['email'];
$telefono = $_POST['telefono'];
$title = $_POST['jobtitle'];

// Create the message
$message = Swift_Message::newInstance()

  // Give the message a subject
  ->setSubject('Nuevo applicante para: ' . $title)

  // Set the From address with an associative array
  ->setFrom(array('no-reply@topytop.com.pe' => 'no-reply'))

  // Set the To addresses with an associative array
  ->setTo('email@thisemail.com')

  // Give it a body
  ->setBody('<html>
                <head></head>
                <body>
                    <table>
                        <tr>
                            <td>Nombre:</td><td>' . $nombre . ' ' . $apellido .'</td>
                        </tr>
                        <tr>
                            <td>Email:</td><td>' . $email . '</td>
                        </tr>
                        <tr>
                            <td>Telefono:</td><td>'. $telefono .'</td>
                        </tr>
                    </table>
                </body>
            </html>', 'text/html')

  // Optionally add any attachments
  ->attach(Swift_Attachment::fromPath($_FILES["file"]["tmp_name"])->setFilename($_FILES['file']['name']));

// Send the message
$result = $mailer->send($message);

非常感谢任何帮助,我已经完成了阅读和搜索,但找不到解决方案:(

编辑:显然这是 gmail 的问题,我更改为不同的 smtp 并且它有效.. :S

【问题讨论】:

看起来一切(代码方面)设置正确,您是否尝试过通过您在此处使用的登录信息登录 Google Apps?如果您刚刚创建帐户,gmail 要求您同意某些条款才能使用该帐户。除非您在该页面上点击“同意”,否则无法访问 SMTP。 是的,我正在使用该电子邮件。 您的服务器是否允许通过 465 端口进行 SSL 连接?我知道一些禁用此功能的共享主机。如果是这种情况,通常您只需联系支持人员,他们就会为您打开端口。 代码没有任何错误,更有可能是您的托管服务提供商禁用了您帐户中的所有SMTP功能,请联系您的托管服务提供商寻求解决方案。 【参考方案1】:

致命错误:未捕获的异常“Swift_TransportException”带有消息“无法与主机 smtp.gmail.com 建立连接 [连接被拒绝 #111]

连接被拒绝是一个非常明确和明确的错误消息。表示由于远端主动拒绝连接,无法建立socket连接。

Google 阻止连接的可能性很小。

很可能您的网络托管服务提供商的防火墙设置阻止了端口 465 上的传出连接,或者他们阻止了 SMTP 到 Gmail。 465 是安全 SMTP 的“错误”端口,尽管它经常被使用,而且 Gmail 确实在那里侦听。请尝试使用端口 587。如果连接仍然被拒绝,请致电您的主机并询问他们发生了什么事。

【讨论】:

@Charles,看来你可以帮助我。看看这个:***.com/questions/48654849/…【参考方案2】:

我刚遇到这个问题,并通过编辑 config 文件夹下的 mail.php 解决了它。通常在使用共享主机时,他们的托管公司允许您创建电子邮件,例如

XXXX@yourdomainname.com

。因此,请转到共享主机 cpanel 下的电子邮件设置并添加新电子邮件。获取该电子邮件和密码并将其设置在

mail.php.

应该可以了!

【讨论】:

如果 OP 使用的是 gmail 的 SMTP 服务器,那么共享托管公司的配置到底如何相关?更不用说不存在的电子邮件不太可能产生“连接被拒绝”错误。【参考方案3】:

从您的 config.yml 中删除 spool: type: memory

然后你将像这样添加try catch

    try
        $mailer = $this->getMailer();
        $response = $this->getMailer()->send($message);
    catch(\Swift_TransportException $e)
        $response = $e->getMessage() ;
    

【讨论】:

看来你可以帮助我。看看这个:***.com/questions/48654849/…【参考方案4】:

我有一段时间遇到同样的问题,将:smtp.gmail.com 替换为 173.194.65.108 实际上对我有用!

【讨论】:

【参考方案5】:

就我而言,我使用的是 Laravel 5,但我忘记更改位于您的目录根文件夹中的 .env 文件中的邮件全局变量(这些变量会覆盖您的邮件配置)

   MAIL_DRIVER=smtp
   MAIL_HOST=smtp.gmail.com
   MAIL_PORT=465
   MAIL_USERNAME=yourmail@gmail.com
   MAIL_PASSWORD=yourpassword

默认情况下,邮件主机是:

   MAIL_HOST=mailtraper.io

我遇到了同样的错误,但这对我有用。

【讨论】:

【参考方案6】:

tcp:465 被阻止。尝试添加新的防火墙规则并添加规则端口 465。或检查 587 并将加密更改为 tls。

【讨论】:

【参考方案7】:

我在使用 Godaddy 虚拟主机时遇到了同样的问题,我通过编辑我的 .env 文件解决了这个问题,

MAIL_DRIVER=smtp
MAIL_HOST=XXXX.XXXX.in
MAIL_PORT=587
MAIL_USERNAME=dexxxxx
MAIL_PASSWORD=XXXXXXXX
MAIL_ENCRYPTION=tls

MAIL_HOST 是 Godaddy 的域名,MAIL_USERNAME 是 Godaddy 的用户名,MAIL_PASSWORD 是 Godaddy 的密码。

我希望这可以帮助你。

【讨论】:

在哪里可以找到 .env 文件?我也在用godaddy!谢谢! 默认情况下不会在 cpanel 上显示。您可以使用 ftp 连接来查看此文件。它将位于您项目的根目录中【参考方案8】:

我遇到了同样的问题,我设法通过禁用我的 AVAST Anti Virus 来解决它。以及我在浏览器中的 AVAST 扩展。防病毒有时会阻止您的应用程序。 :) 我希望它对任何人都有帮助。

【讨论】:

通过步骤或示例进行探索以更好地理解 感谢您的解决方案,在我禁用了本地主机中的 avast mail shield 后它开始工作【参考方案9】:

我的解决方案是改变:

  'driver' => 'smtp',

 'driver' => 'mail',

在应用程序/配置/邮件中

希望有帮助

【讨论】:

通过使用邮件驱动程序,邮件将使用 php.ini 中设置的 smtp 设置发送。这不是解决上述问题的方法【参考方案10】:

首先,检查 gmail SMTP 服务器。您应该必须允许访问安全性较低的应用程序而不允许使用 swift mailer。为此,请先在您的电子邮件帐户中登录,然后进入隐私设置,然后单击签名和安全性,然后单击无法访问的应用程序,然后再进行较少安全应用选项,然后再次尝试邮件程序,它会工作。

【讨论】:

【参考方案11】:

就我而言,我在使用 GoDaddy 和 SSL 加密时遇到了问题。

将加密设置为 Null 并将端口设置为 80(或任何支持的端口)就可以了。

【讨论】:

【参考方案12】:

如果您已经托管了您的网站,建议您使用电子邮件或创建官方邮件来发送电子邮件 假设您的网址是 www.example.com。然后转到 cpanel 创建一个电子邮件,该电子邮件将是 send@example.com。然后请求设置电子邮件。将电子邮件地址更改为 send@example.com。然后更改您的 smtp,即 mail.example.com。 ssl 将保持 465

【讨论】:

你确定吗?如果不使用 cPanel 怎么办?【参考方案13】:

在 v 5.8.38 中,我将 env 文件设置如下:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=mygmail@gmail.com
MAIL_PASSWORD=difficultCombination
MAIL_ENCRYPTION=ssl
MAIL_FROM_NAME=myWebappName

在做php artisan config:clear之后,它在分片服务器上运行良好。

【讨论】:

以上是关于Swift_TransportException 无法与主机 smtp.gmail.com 建立连接的主要内容,如果未能解决你的问题,请参考以下文章

Laravel & Cpanel:如何修复 Swift_TransportException(邮件服务器)?

StreamBuffer.php 第 268 行中的 Swift_TransportException:

Laravel 5.2 邮件发送中的 Swift_TransportException

Swift_TransportException无法与主机mywebsite.com建立连接

Laravel 5 邮箱重置密码

我正在尝试通过联系表格发送电子邮件