当我在发送电子邮件时将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
,它工作正常
考虑到您使用的所有电子邮件都是有效的,我的猜测是,发生这种情况是因为您在foreach中使用了&运算符(引用),之后没有取消设置它,在foreach php文档中的片段下方
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) {
其次,阅读 这里 参考文献 和
我遇到了同样的问题,并通过按值传递所有数据来解决它。顺便说一句,建议仅将值传递给排队的闭包,以避免意外的序列化行为。
foreach ($recs as $rec)
{
$em = $rec->email;
Mail::queue(
'emails.newsletter',
$data,
function($message) use ($em) {
$message->to($em)->subject('Newsletter | Bla Bla');
}
);
}