Laravel 8 报邮箱不符合RFC 2822规范但收件人格式正确如何解决
触发原因
- 错误提示中出现的
[Service Cotation Groupage]是显示名称而非邮箱地址,说明程序将显示名称误作为邮箱参数传入了邮件地址校验逻辑,不符合RFC 2822的邮箱格式要求。 - 外层传参
$mail为合法邮箱的前提下,问题大概率出在SendCotationEmail自定义邮件类内部:Laravel 邮件类的to()、from()、replyTo()等地址配置方法的第一个参数要求为邮箱地址,第二个为可选的显示名称,如果参数顺序写反、或者变量赋值混淆,就会把名称传入邮箱参数位触发校验失败。 - 也有可能是外层
$mail变量取值错误,比如误取了联系人数组中的名称字段而非邮箱字段,可先调试确认该变量实际值。
解决方法
- 先调试确认外层传入的
$mail变量实际值,确认是am.name@example.com的合法邮箱字符串,排除外层传参错误。 - 核查
SendCotationEmail类的build()方法中的地址配置代码,确认地址类方法的传参顺序正确,示例如下:
// 正确写法:第一个参数为邮箱,第二个参数为可选显示名 public function build() { return $this->to($userEmail, $userName) ->from('system@your-domain.com', '业务通知') ->view('emails.cotation'); }
避免出现以下参数顺序颠倒的错误写法:
// 错误写法:将显示名作为第一个参数传入,会触发邮箱格式校验错误 $this->to($userName, $userEmail)
- 如果是在邮件类内部动态拼接收件人信息,先打印校验传给地址方法第一个参数的取值,确保为合法邮箱格式即可。
内容的提问来源于stack exchange,提问作者Amaury Schmitt
相关产品推荐
相关产品推荐

