Swift_TransportException错误:预期的响应代码250,但得到代码“”,带有消息“” - Laravel

时间:2016-11-04 14:17:50

标签: php laravel email smtp google-compute-engine

我在使用Laravel应用程序发送大量电子邮件时遇到问题。

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

服务器:Google Compute Engine,VM Instance(Ubuntu Server) - Standar 1

这是我的配置:

MAIL_DRIVER=smtp  
MAIL_HOST=smtp-relay.gmail.com  
MAIL_PORT=587  
MAIL_USERNAME=my_email@mydomain.com  
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('info@mydomain.com', 'My Name Team');
           $message->to($email)->subject('Fake Subject!');
        });
    }
}

它可以很好地发送100到200封电子邮件,但在某些时候它只会崩溃!!!

我使用php artisan命令发送此电子邮件,这是输出:
output sending email

有谁知道如何修复它?

提前致谢!

3 个答案:

答案 0 :(得分:1)

有些人和你得到的问题一样。尝试做以下可能会在下面的程序将解决您的问题。

A。)从gmail登录并访问了链接https://www.google.com/settings/security/lesssecureapps并打开了安全性较低的应用。 B.)编辑.env文件如下:

  

MAIL_DRIVER = SMTP

     

MAIL_HOST = smtp.gmail.com

     

MAIL_PORT = 587

     

MAIL_USERNAME =用户名//i.e。 username@gmail.com

     

MAIL_PASSWORD =密码// Gmail帐户密码

     

MAIL_ENCRYPTION = SSL

C。)在您的控制器中,记下如下:

  

$ rawData = request :: all();

     

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

     

{

     

$ MESSAGE-肽从('info@echosofts.c​​om”,   'Echosofts') - > to(array_map('trim',explode(',',   $ RAWDATA [ 'all_email_id']))) - &GT受试者($ RAWDATA [ 'mail_title']);

     

});

然后电子邮件工作正常,除了发件人电子邮件ID是我的谷歌帐户(username@gmail.com)而不是info@cgindians.com。

D。)为了克服发件人电子邮件更改问题,我访问了我的Google帐户并执行以下操作: “设置图标” - >设置 - >帐户和导入 - >发送邮件as->添加您自己的另一个电子邮件地址。

答案 1 :(得分:0)

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

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

还要留意日志,看看你是否能够发现未来的任何模式,可能会让你知道出了什么问题。如果是网络问题,除此之外没有太多可以做的事情。

答案 2 :(得分:0)

请先试试 转到

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

并添加$this->_transport->stop();

return $sent;之前。

最终代码如下所示。

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

相关问题