单列多邮箱按逗号分隔发送邮件触发Swift_RfcComplianceException报错求助
解决Swift_RfcComplianceException邮箱格式错误问题
嗨,这个问题很好搞定!咱们先揪出问题根源:
你的数据库里邮箱地址是空格分隔的(比如smith1@gmail.com smith2@gmail.com),但代码里却用了逗号来拆分字符串:explode(',', $project->emails)——这就导致拆分后的数组里只有一个带空格的完整字符串,而RFC 2822规范明确禁止邮箱地址包含空格,自然就触发报错了。
修复步骤及代码示例
我们需要用正确的分隔符(空格)来拆分,同时还要处理可能的多余空白(比如多个空格、首尾空格),确保得到干净的邮箱数组:
if (!empty($project->emails)) { // 处理任意空白分隔的邮箱,清理首尾空白并过滤空值 $emails = array_filter(preg_split('/\s+/', trim($project->emails))); // 确保数组非空再执行发送逻辑 if (!empty($emails)) { Mail::to($emails)->send(new ProjectMail($project)); } }
代码细节解释
trim($project->emails):去掉字符串首尾的空格,避免拆分出无效的空元素preg_split('/\s+/', ...):用正则匹配任意数量的空白字符(包括单个空格、多个空格、制表符等)作为分隔符,比explode(' ', ...)更健壮,能应对各种不规范的空格情况array_filter(...):过滤拆分后可能出现的空字符串,确保最终数组里全是有效的邮箱地址
额外场景提醒
如果以后你的邮箱存储格式改成逗号分隔(比如smith1@gmail.com, smith2@gmail.com),可以调整为以下代码,同时处理逗号前后的空格:
$emails = array_filter(array_map('trim', explode(',', $project->emails)));
内容的提问来源于stack exchange,提问作者Muhammad AbuBaker
相关产品推荐
相关产品推荐

