2016-11-04 156 views
1

我从我的Laravel应用程序发送大量电子邮件时遇到问题。Swift_TransportException错误:预期的响应代码250,但得到代码“”,并带有消息“” - Laravel

之前解释的问题,这是服务器配置:

服务器:谷歌计算引擎,VM实例(Ubuntu服务器) - STANDAR 1

这是我的配置:

MAIL_DRIVER=smtp 
MAIL_HOST=smtp-relay.gmail.com 
MAIL_PORT=587 
[email protected] 
MAIL_PASSWORD=******** 
MAIL_ENCRYPTION=tls 

因此,我为此使用Google App工作帐户,并且在为一位收件人发送电子邮件时,所有工作都非常顺利!

问题是,当我尝试发送邮件给我所有的客户:

foreach ($users as $key => $user) { 
// content construction 
    if ($have_one){ 
    Mail::queue('emails.contact', $body, function($message) use($email) 
     { 
      $message->from('[email protected]', 'My Name Team'); 
      $message->to($email)->subject('Fake Subject!'); 
     }); 
    } 
} 

它工作得很好很首创100-200电子邮件发送,但在某些时候,它只是让它崩溃!

我用一个PHP工匠命令发送此类电子邮件,这是输出:
output sending email

有谁知道如何解决它?

提前致谢!

+0

是它通常是在一个特定的用户失败或它似乎随机的? – user3158900

+0

嗨,谢谢你的回复!这似乎是**随机行为**。有时它停在100,120或90-150之间的任何其他用户。 – uTombou

+0

您可以阅读。这是不一样的,但可能接近。请阅读链接。 http://stackoverflow.com/questions/37469770/laravel-swiftmailer-expected-response-code-250-but-got-code-530-with-messag – Manish

回答

0

我认为有时候这种事情只是发生,通常是网络相关的问题。你可以做的最好的做法是将代码放入try/catch块,记录何时发生,然后再次尝试电子邮件。

有时它有助于放弃sleep($n),让它在继续之前睡一会儿。

还要留意日志,看看您是否可以在将来发现任何模式,以便让您了解发生了什么问题。如果这是一个网络问题,除此之外没有太多可以完成的事情。

+0

感谢您的建议! yeap!事实上这个错误是来自try catch事件! – uTombou

1

有些人与你遇到的问题相同。试着做下面的程序可能会解决你的问题。答:

答:)从Gmail登录并访问链接https://www.google.com/settings/security/lesssecureapps并打开安全性较低的应用程序。 B.)编辑.ENV文件象下面这样:

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=username //i.e. [email protected]

MAIL_PASSWORD=password //Gmail accounts password

MAIL_ENCRYPTION=ssl

C.)在你的控制器,写下如下:

$rawData = request::all();

Mail::queue('program.meeting.emailInvite', $rawData, function($message) use ($rawData)

{

$message->from('[email protected]', 'Echosofts')->to(array_map('trim', explode(',', $rawData['all_email_id'])))->subject($rawData['mail_title']);

});

然后通过电子邮件发送,不同的是发送者电子邮件ID做工精细是我的谷歌帐户([email protected])而不是[email protected]。 D)为了克服发件人电子邮件更改问题,我访问了我的谷歌帐户,并执行以下操作: “设置图标” - >设置 - >帐户和导入 - >发送邮件为 - >添加另一个电子邮件地址拥有。

+0

嗨@Manish感谢您花时间研究! 嗯..我已经做了“lesssecureapps”的事情......(这就是我如何从我的laravel应用程序首先发送电子邮件)。 让我试试其他的建议! 我唯一担心的是:以这种方式发送电子邮件,所有收件人都会被其他人看到,对吗? '(array_map('trim',explode(',',$ rawData ['all_email_id'])))' – uTombou

0

请先尝试 转到

vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mailer.php 

而就return $sent;前加$this->_transport->stop();

最终代码如下所示。

public function send(Swift_Mime_Message $message, &$failedRecipients = null) 
    { 
     $failedRecipients = (array) $failedRecipients; 

     if (!$this->_transport->isStarted()) { 
      $this->_transport->start(); 
     } 

     $sent = 0; 

     try { 
      $sent = $this->_transport->send($message, $failedRecipients); 
     } catch (Swift_RfcComplianceException $e) { 
      foreach ($message->getTo() as $address => $name) { 
       $failedRecipients[] = $address; 
      } 
     } 
     $this->_transport->stop(); 
     return $sent; 
    } 

还要检查这个环节https://github.com/mustafaileri/swiftmailer/commit/d289295235488cdc79473260e04e3dabd2dac3ef

+0

好吧,请给我一分钟! – uTombou

+0

可悲的是它没有工作!感谢努力的人!我会继续搜索! – uTombou

相关问题