L4:邮件::队列错误 邮箱中给定的地址 [] 不符合 RFC 2822、3.6.2


L4: Mail::queue error Address in mailbox given [] does not comply with RFC 2822, 3.6.2

当我在发送电子邮件时将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');
        }
    );   
}