L4:Mail :: queue error给定[]的邮箱中的地址不符合RFC 2822,3.6.2

时间:2013-09-11 04:57:23

标签: php laravel laravel-4 swiftmailer

我在发送电子邮件时将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

,它可以正常工作

2 个答案:

答案 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');
        }
    );   
}