我有一个问题,从我的Laravel应用程序发送大量的电子邮件。
在解释问题之前,这是服务器配置:
服务器:Google Compute Engine, VM Instance (Ubuntu Server) - standard 1
这是我的配置:
MAIL_DRIVER=smtp
MAIL_HOST=smtp-relay.gmail.com
MAIL_PORT=587
MAIL_USERNAME=my_email@mydomain.com
MAIL_PASSWORD=********
MAIL_ENCRYPTION=tls
所以,我使用谷歌应用程序工作帐户为此目的,一切工作得很好,当我发送电子邮件的一个收件人!
问题是当我试着给我所有的客户发邮件时:
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命令发送这些电子邮件,下面是输出:
输出发送电子邮件
有谁知道怎么修理它吗?
提前感谢!
有些人有同样的问题,你得到。尝试做以下步骤可能会解决您的问题。
a)从gmail登录并访问链接https://www.google.com/settings/security/lesssecureapps并打开不太安全的应用程序。b .)编辑.env文件,如下所示:
MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME =用户名//即。username@gmail.com
MAIL_PASSWORD=password//Gmail帐户密码
sslMAIL_ENCRYPTION =
c .)在你的控制器中,写下如下内容:
$rawData = request::all();
邮件::队列(program.meeting。emailInvite’,rawData美元,function($message) use ($rawData)
{
美元消息->("info@echosofts.com",Echosofts) ->(到("修剪",爆炸(',',$ rawData [' all_email_id ']))) ->主题($ rawData [' mail_title ']);
});
然后电子邮件工作正常,除了发件人的电子邮件ID是我的谷歌帐户(username@gmail.com)而不是info@cgindians.com。
d .)为了克服发件人电子邮件更改问题,我访问了我的谷歌帐户,并做了以下操作:"设置图标"->设置->帐户和导入->发送邮件->添加另一个您自己的电子邮件地址
我认为有时这种事情只是发生,通常是与网络有关的问题。你能做的最好的事情就是把你的代码放到try/catch块中,当它发生时记录下来,然后再次尝试发送邮件。
有时放下sleep($n)
并让它在继续之前休眠一秒钟是有帮助的。
还要密切关注日志,看看将来是否可以发现任何模式,这些模式可能会让您了解哪里出了问题。如果是网络问题,那么除了这个之外就没有什么可做的了。
请先试一下转到
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