我在发送电子邮件时将send
替换为queue
时出错。这是我的代码:
foreach ($recs as $rec)
{
$em = $rec->email;
Mail::queue('emails.newsletter',$data,
function($message) use(&$em) {
$message->to($em)->subject('Newsletter | Bla Bla');
});
}
我的邮件驱动程序是smtp,主机是来自godaddy的relay-hosting.secureserver.net
。
如果我使用Mail::send
而不是Mail::queue
答案 0 :(得分:0)
考虑到您使用的所有电子邮件都是有效的,我的猜测是因为您正在使用& foreach中的运算符(引用),之后你不会将它取消,在foreach php docs的片段下面
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
当你使用最有可能在以后消耗作业的队列时(不是立即作为:: send)它没有取得它应该的东西(因为混乱的参考) - 所以你给邮件服务器提供一个空的电子邮件地址 - 这就是你得到验证错误的原因。
首先,我认为您根本不需要参考,所以只需删除&运营商
function($message) use($em) {
其次,请在这里阅读References and foreach
答案 1 :(得分:0)
我有同样的问题并通过按值传递所有数据来解决它。顺便说一句,建议仅将值传递给排队的闭包以避免意外的序列化行为。
foreach ($recs as $rec)
{
$em = $rec->email;
Mail::queue(
'emails.newsletter',
$data,
function($message) use ($em) {
$message->to($em)->subject('Newsletter | Bla Bla');
}
);
}