我有一个非常奇怪的问题,我会详细解释为什么在事实发生后它很奇怪......
代码......
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
变量来筛选并将其输出复制/粘贴到上面的电子邮件代码中,它邮寄得很好但是只要我使用变量而不是文本字符串,我得到上面那个可怕的错误信息。我无法理解为什么会这样做,如果您有任何想法请与我分享???
答案 0 :(得分:1)
您收到的错误消息在这里有点误导,也许值得一个错误报告。 RFC 2822, 3.6.2.与发起人字段有关,而to
和cc
不是from
这样的发起人字段。
然而,消息的另一部分正确地说明了问题所在:
给定[
'one@email.com', 'two@email.com', 'three@email.com', 'four@email.com'
]的邮箱中的地址不符合......
这是正确的。它不是邮箱,而是邮箱列表。 Swift邮件程序在这里需要邮箱,而不是邮箱列表。这就是消息告诉你的内容。您未能在此处提供邮箱。你可能认为你可以在这里提供一个邮箱列表,但很明显这给了你一个例外,所以这不行。
你已经找到了解决方案,不提供列表,而是在另一个邮箱之后添加一个邮箱,每个参数一个。
这里更多的问题是$message
类的接口比其他任何东西所期望的。由于您没有注意到错误消息的误导性部分,我猜您不会被该部分误导。