我无法使用gmail

时间:2015-04-29 21:24:01

标签: email gmail localhost phpmailer swiftmailer

我最近无法通过本地主机上的php发送邮件。我在应用程序的不同部分使用PHPMailerSwiftMailer

SwiftMailer我得到了这个:

Connection could not be established with host smtp.gmail.com [ #0]

使用PHPMailer,消息为:

SMTP Error: Could not connect to SMTP host.

我在SwiftMailer上的设置如下所示:

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
->setUsername(APP_GMAIL_EMAIL)
->setPassword(APP_GMAIL_PWD);

我已经在SO和其他地方经历了几个主题,并尝试了许多修复程序。但错误消息保持不变。一些"解决方案"我试过的是:

  1. php.ini中启用OpenSSL(之前已关闭)
  2. smtp.gmail.com更改为smtp.googlemail.com
  3. smtp.gmail.com替换为某些Gmail邮箱地址
  4. smtp.gmail.com替换为gethostbyname('smtp.gmail.com')
  5. ->setSourceIp('0.0.0.0')setUsername
  6. 之后,将setPassword添加到上面的实例化代码中

    此代码以前正在运行,我不确定可能会破坏该功能的原因。作为故障排除的一部分,我刚刚确认Linux共享主机上的类似代码是令人满意的电子邮件,这表明问题是以某种方式来自我的环境。因此,我甚至尝试过不同的互联网访问来源,以防它是ISP的事情。

    我怎么能破解这个坚果?

1 个答案:

答案 0 :(得分:5)

我已经能够克服这个问题,至少是SwiftMailer。我的PHP从5.2.5升级到5.6之后必须出现解决方案,这是我目前的版本。洞察力来自这个页面:

https://github.com/swiftmailer/swiftmailer/issues/544

  

如果您使用的是PHP 5.6,则会因为" SSL而发生错误   上下文选项"用于swiftmailer中的流上下文。在PHP中   5.6 verify_peer和verify_peer_name默认设置为TRUE,因此PHP检查SSL证书。目前不可能   使用一些选项在swiftmailer中禁用它。

     

您可以通过修改功能来禁用SSL检查   " _establishSocketConnection"在StreamBuffer.php中。添加这些行   在stream_socket_client命令之前:

$options['ssl']['verify_peer'] = FALSE; 
$options['ssl']['verify_peer_name'] = FALSE;
  

如果可以在不破解的情况下设置这些选项,那就太棒了   代码。

感谢https://stackoverflow.com/a/29448735/2554788首先向我指出了上述帖子。

顺便说一下,StreamBuffer.php的路径是:

\lib\classes\Swift\Transport

但是有一个警告:这个解决方案基于攻击类中的代码,并且可能会在升级SwiftMailer版本后失败(在这种情况下,您需要返回并且再次破解代码。)

或许,更多当前版本的SwiftMailer已将它们的行为放在PHP 5.6中(我目前使用的是SwiftMailer 5.1)。我打算尽快尝试升级,希望能解决这个问题。