无法与主机smtp.gmail.com(173.194.205.108)建立SwiftMailer连接[#0]

本文概述

  • 1. gethostbyname也许是你的敌人还是盟友
  • 2.更改Gmail的SMTP
  • 3.如果你使用Symfony
当你将SwiftMailer与Gmail帐户一起使用来发送电子邮件时(即使你使用Laravel, Symfony CakePHP之类的框架), 此问题也不是很常见, 并且会发生。一些开发人员也遇到了同样的问题, 该代码在你的开发计算机中本地运行, 但在部署服务器上未按预期工作。
许多开发人员在使用Swift Mailer和Gmail发送电子邮件时都遇到了这个问题, 可惜每种可能的解决方案可能并不适用于所有人。在本文中, 我们将分享一些可能的解决方案, 它们可能有助于解决你项目中的这个问题。
1. gethostbyname也许是你的敌人还是盟友 PHP的gethostbyname函数获取与给定Internet主机名相对应的IPv4地址。在某些情况下, 此功能有助于使代码正常工作, 但对于另一些将smtp地址作为字符串提供的方法则可以解决问题(我们建议你同时测试一下, 看看会发生什么情况):
< ?php // For some users works using the gethostbyname function $smtp_host_ip = gethostbyname('smtp.gmail.com'); // But for others only the smtp address $smtp_host_ip = 'smtp.gmail.com'; $transport = \Swift_SmtpTransport::newInstance($smtp_host_ip, 465, 'ssl')-> setUsername('qweqwe@qweqweqew.com')-> setPassword('qweqwe+'); $mailer = \Swift_Mailer::newInstance($transport); $message = \Swift_Message::newInstance()-> setFrom(array("john@doe.com" => 'John Doe'))-> setTo(array("john@doe.com" => 'John Doe')); $message-> setBody('< h3> Contact message< /h3> ', 'text/html'); $mailer-> send($message);

2.更改Gmail的SMTP 你可以使用SMTP, SSL / TLS连接到Gmail邮件服务器。要使用Swift Mailer做到这一点, 你需要在端口465上连接到smtp.gmail.com, 但是, 如果你在尝试发送电子邮件时收到上述异常, 请更改gmail的smtp地址, 而不要使用smtp.gmail.com以下任何IP或地址:
  • 173.194.65.108
  • 173.194.205.108
  • 74.125.133.108
  • gmail-smtp-msa.l.google.com
建议你使用服务器中的终端对smtp.gmail.com地址进行ping操作, 该地址应打印可用于发送电子邮件的SMTP的IP地址:
无法与主机smtp.gmail.com(173.194.205.108)建立SwiftMailer连接[#0]

文章图片
如前所述, 这在某些情况下可能有效。
3.如果你使用Symfony 如果你在symfony项目中工作, 使用SwiftMailer发送电子邮件的代码可能类似于:
public function indexAction($name){$message = \Swift_Message::newInstance()-> setSubject('Hello Email')-> setFrom('send@example.com')-> setTo('recipient@example.com')-> setBody($this-> renderView(// app/Resources/views/Emails/registration.html.twig'Emails/registration.html.twig', array('name' => $name)), 'text/html')/** If you also want to include a plaintext version of the message-> addPart($this-> renderView('Emails/registration.txt.twig', array('name' => $name)), 'text/plain')*/; $this-> get('mailer')-> send($message); return $this-> render(...); }

无论通过哪种方式, 你的代码都无法直接处理凭据, 因为它们是通过parameters.yml文件或config.yml检索的, 这可能会帮助你解决问题。首先修改你的parameter.yml(或根据你的工作流配置config.yml)中的传输选项:
# Swiftmailer Configurationswiftmailer:transport: mail

然后将假脱机类型设置为内存:
# app/config/config.ymlswiftmailer:# ...spool: { type: memory }

或在parameters.yml中(根据你的工作流程):
# app/config/parameters.ymlparameters:spool: { type: memory }

当你使用SwiftmailerBundle从Symfony应用程序发送电子邮件时, 默认情况下将立即发送电子邮件。但是, 你可能希望避免Swift Mailer和电子邮件传输之间的通信性能下降, 这可能导致用户在发送电子邮件时等待下一页加载。通过选择” 假脱机” 电子邮件而不是直接发送电子邮件, 可以避免这种情况。这意味着Swift Mailer不会尝试发送电子邮件, 而是将消息保存到文件等位置。然后可以从后台处理程序中读取另一个进程, 并负责在后台处理程序中发送电子邮件。目前, Swift Mailer仅支持后台处理到文件或内存。
【无法与主机smtp.gmail.com(173.194.205.108)建立SwiftMailer连接[#0]】愿力量与你同在, 祝你编程愉快!

    推荐阅读