2015-04-21 37 views
5

以下是我的环境描述,因为它有点特别: 我使用Windows 8.1 PC结合使用Vagrant运行的虚拟机。它基本上是一台Debian 64位机器。 这个虚拟机实际上是我的服务器。尝试使用SwiftMailer发送带有Symfony 2的电子邮件:无法与主机smtp.gmail.com建立连接[#0]

然后,我为我的项目使用Symfony 2,我试图使用SwiftMailer和gmail(使用我自己的gmail地址)来发送电子邮件,这要归功于联系表单(用户的电子邮件地址,用户和邮件内容)。

我的行为将填写表单中给出的电子邮件数据并发送邮件。 顺便说一下,它通过使用 - > isValid()方法来检查数据是否有效。

我的问题来了,我提交表单后,我收到来自SwiftMailer一个例外:连接无法与主机smtp.gmail.com建立[#0]

这里是我的config_dev.yml:

swiftmailer: 
    transport: gmail 
    username: "%gmail_user%" 
    password: "%gmail_password%" 
    delivery_address: "%gmail_user%" 
    encryption: ssl 
    host: smtp.gmail.com 
    port: 465 
    auth_mode: login 

“%gmail_user%”和stuff是在一个parameters.yml文件中定义的。这里的内容:

parameters: 
mailer_transport: gmail 
mailer_user: null 
mailer_password: null 
gmail_user: [email protected] 
gmail_password: my_gmail_passwd 

很多在整个互联网搜索之后,我尝试了很多东西从这里或从其他地方,并没有什么做的工作:使用TLS,试图端口587,随着IP尝试smtp.gmail.com服务器给了我同样的错误。

的SSL扩展似乎也启用:

php --info | grep openssl 
OpenSSL support => enabled 

,并告诉OpenSSL版本一些其他的东西。

我检查了我的IMAP设置以及启用或禁用应用程序访问我的Gmail的一般设置。

我也试过telnet smtp.google.com 465,并且自从我达到连接后它工作正常。

我只是不知道该怎么做。我希望你们中的一些人有同样的问题,可以帮助我。

祝您有美好的一天!

编辑:问题解决,一个新出现

经过进一步调查,我随机试图改变config_dev.yml文件方式:

transport: mail 

这解决了我的问题与SwiftMailerException ,尽管邮件没有到达delivery_address电子邮件地址,即使我将其更改为另一个我拥有的地址(一个hotmail邮件地址)。 我会努力工作,但我希望我的解决方案能够提供帮助。

编辑#2:试图解决发送问题,但没有任何工作。

这将是一本书.. 我试图在config.yml加入这个补充卷轴系统:

spool: {type: memory } 

邮件似乎因为探查告诉我,他把它交给发送。 我将此添加到我的控制器发送所有可能被缠绕的邮件:

$spool = $transport->getSpool(); 
$sent = $spool->flushQueue($this->container->get('swiftmailer.transport.real')); 

我还添加了这个检查,如果它真的发:

if ($this->mailer->send($message)) { 
     echo '[SWIFTMAILER] sent email to ' . $toEmail; 
    } else { 
     echo '[SWIFTMAILER] not sending email: ' . $mailLogger->dump(); 
    }  

我真的迷路了,不知道该怎么做..

这里是一个发送邮件在控制器代码:

$message = \Swift_Message::newInstance() 
     ->setSubject("The subject from the form") 
     ->setFrom("The address from the form") 
     ->setTo("The address which comes from an entity") 
     ->setBody("The body from the form made with a twig template"); 

     $mailer = $this->container->get('mailer'); 

     $mailLogger = new \Swift_Plugins_Loggers_ArrayLogger(); 
     $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($mailLogger)); 

     if ($mailer->send($message)) { 
      echo 'sent email'; 
     } else { 
      echo 'not sending email: ' . $mailLogger->dump(); 
     } 

这总是告诉我'发送邮件',但我从来没有收到它。

+0

你是说用'运输:mail'允许您发送电子邮件?这有点奇怪。你可以发布创建和发送消息的控制器吗? – George

+0

使用'transport:mail'而不是'transport:gmail'解决了SwiftMailer异常。但是我仍然没有收到邮件,但我认为它来自线轴。 – AndoniLarz

+0

你需要在你的配置'spool:{type:memory}'中手动添加spool。尝试添加,看看它是否工作 – George

回答

1

我找到了解决方案,从来没有在这里回答,但因为这个问题有2000+的意见,我觉得这很重要。

所以,一切都很好,我不知道的唯一的事情是,开发(在dev环境又名时)期间,swiftmailer似乎禁用交付,告诉这里: http://symfony.com/doc/current/email/dev_environment.html#disabling-sending

所有我有做的是设置在此和config_dev.yml文件config_test.yml

swiftmailer: 
    disable_delivery: false 

只是要小心了地址你的邮件去。例如,在这个项目上,它会向我们的客户发送虚假邮件,这将会很成问题。

为了防止这种情况,你可以做什么symfony的文件中说(http://symfony.com/doc/2.8/email/dev_environment.html#sending-to-a-specified-address-es

# app/config/config_dev.yml 
swiftmailer: 
    delivery_addresses: ['[email protected]'] 
1

您是否尝试与cURL建立连接?我和elasticsearch(elastica)类似,显然它使用了一个我不知道的cURL HTTP代理,因为它是在php.ini中配置的。

题外话:你也可以尝试如果mailcatcher适合您的需求。

+0

不,我不使用cURL(我猜Symfony至少没有)我认为mailcatcher是集成的以流浪汉,所以我可以使用它是的,但它更简单的与Gmail。不过谢谢。 – AndoniLarz

+1

请通过添加更完整的解决方案来改进您的答案(例如,您如何使用cURL)。因为它现在写的更多的是评论而不是答案。 –

1

我有同样的错误(Connection could not be established with host smtp.gmail.com [ #0]),原因是在防病毒(Avast!)。当我禁用它时,错误消失了。

相关问题