我在使用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
有谁知道如何修复它?
提前致谢!
答案 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.com”, '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