You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单列多邮箱按逗号分隔发送邮件触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:32:54