Laravel 10使用Mail facade添加邮件头遇方法未定义错误求助
解决Laravel邮件添加自定义头部(Message-ID等)的报错问题
问题原因
报错Call to undefined method Illuminate\Mail\Message::withSwiftMessage()是因为**Illuminate\Mail\Message类并没有withSwiftMessage这个方法**,你混淆了Laravel邮件API的用法。要操作底层的SwiftMailer对象,应该直接调用getSwiftMessage()方法。
修正后的代码
替换你代码中添加邮件头的部分,直接获取Swift邮件实例并操作头部:
Mail::mailer('user_stmp')->send('emails.reply', [ 'from' => $sender_email, 'body' => $request->body, ], function ($m) use ($sender_email, $sender_name, $request,$reply) { $m->from($sender_email, $sender_name); $m->to($request->to_mail)->subject($request->subject); if ($request->cc) { $m->cc($request->cc); } if ($request->bcc) { $m->bcc($request->bcc); } // 直接获取底层Swift_Message实例 $swiftMessage = $m->getSwiftMessage(); $headers = $swiftMessage->getHeaders(); // 添加需要的邮件头 $headers->addTextHeader('Message-ID', $reply->message_id); $headers->addTextHeader('In-Reply-To', $reply->in_reply_to); $headers->addTextHeader('References', $reply->refs); });
额外说明
getSwiftMessage()方法返回底层的Swift_Message对象,通过它的getHeaders()方法可获取头部集合,再用addTextHeader()添加自定义文本头部。- 若要覆盖默认生成的
Message-ID,需确保传入的$reply->message_id符合邮件标准格式(比如<xxx@domain.tld>),否则可能被邮件服务器自动覆盖。
内容的提问来源于stack exchange,提问作者Tanvir Ahmed
相关产品推荐
相关产品推荐

