Laravel Swift Mailer恶意电子邮件地址的例外情况?

时间:2014-06-21 03:16:38

标签: php email laravel swiftmailer

我有一个非常奇怪的问题,我会详细解释为什么在事实发生后它很奇怪......

代码......

Mail::send('emails.cron.loggedinusers', $data, function($message){

    // Get Admin user emails
    $adminUserEmails = DB::table('users')->where('user_role', 'admin')->lists('email');

    // Build nice comma separated list of Admin Emails addresses  
    // and also wrap each email in quotes
    $filter = function($adminUserEmails){ return "'$adminUserEmails'"; };
    $toEmails = array_map($filter, $adminUserEmails);
    $toEmails = implode(', ', array_values($toEmails));
    print_r($toEmails);

    // Send email to Admins Only
    $message->from('one@email.com', 'Jason');
    $message->to('one@email.com')->cc($toEmails);
    $message->subject('[TIMECLOCK ALERT] Users are logged into the Timeclock!');
});

当我运行上面的代码从数据库中获取4个电子邮件地址并尝试通过电子邮件发送给他们时,我收到了这个令人讨厌的错误消息......

请记住,我已更改此处显示的实际电子邮件值以保护其身份,但脚本中的REAL电子邮件均为合法电子邮件...

Swift_RfcComplianceException
Address in mailbox given ['one@email.com', 'two@email.com',  
'three@email.com', 'four@email.com']   
does not comply with RFC 2822, 3.6.2.

现在,如果我用实际的字符串文本替换变量$toEmails ... $message->to('one@email.com')->cc('one@email.com', 'two@email.com', 'three@email.com', 'four@email.com');

然后它发送电子邮件没有问题,也没有错误消息!

这对我来说很奇怪和奇怪,因为我真的打印$toEmails变量来筛选并将其输出复制/粘贴到上面的电子邮件代码中,它邮寄得很好但是只要我使用变量而不是文本字符串,我得到上面那个可怕的错误信息。我无法理解为什么会这样做,如果您有任何想法请与我分享???

1 个答案:

答案 0 :(得分:1)

您收到的错误消息在这里有点误导,也许值得一个错误报告。 RFC 2822, 3.6.2.与发起人字段有关,而tocc不是from这样的发起人字段。

然而,消息的另一部分正确地说明了问题所在:

  

给定['one@email.com', 'two@email.com', 'three@email.com', 'four@email.com']的邮箱中的地址不符合......

这是正确的。它不是邮箱,而是邮箱列表。 Swift邮件程序在这里需要邮箱,而不是邮箱列表。这就是消息告诉你的内容。您未能在此处提供邮箱。你可能认为你可以在这里提供一个邮箱列表,但很明显这给了你一个例外,所以这不行。

你已经找到了解决方案,不提供列表,而是在另一个邮箱之后添加一个邮箱,每个参数一个。

这里更多的问题是$message类的接口比其他任何东西所期望的。由于您没有注意到错误消息的误导性部分,我猜您不会被该部分误导。