Laravel 9中如何修改邮件内容类型以发送日历邮件?
Laravel 9 发送text/calendar类型日历邮件的解决办法
Laravel 9 基于 Symfony Mailer 重构了邮件系统,移除了原有的setContentType方法,且封装后的setBody仅支持text/html或text/plain类型。要继续发送text/calendar类型的日历邮件,直接操作底层的Symfony邮件对象即可解决问题:
替换原代码中setContentType和setbody的部分,通过getSymfonyMessage()获取原生邮件对象,直接设置正文和内容类型:
Mail::send([], [], function ($message) use ($file, $entitySubject, $custEmail, $userEmail, $userFullName) { $message->subject($entitySubject) ->from($userEmail, $userFullName) ->to($custEmail) ->replyTo($userEmail, $userFullName) ->attach($file, [ 'as' => $file->getClientOriginalName(), 'mime' => "text/calendar", ]); // 获取Symfony原生邮件对象 $symfonyMessage = $message->getSymfonyMessage(); // 设置日历内容为邮件正文,指定Content-Type $symfonyMessage->setBody(file_get_contents($file), 'text/calendar; charset=utf-8; method=REQUEST'); // 确保邮件头部的Content-Type正确设置 $symfonyMessage->getHeaders()->set('Content-Type', 'text/calendar; charset=utf-8; method=REQUEST'); });
说明
- 通过
getSymfonyMessage()可以绕过Laravel的封装限制,直接调用Symfony Mailer的原生API设置邮件内容类型 - 该方法保留了你原有的附件逻辑,同时将ICS内容作为邮件正文发送,客户端可直接识别为日历邀请
- 若不需要附件,可移除
attach相关代码,仅保留正文设置即可
内容的提问来源于stack exchange,提问作者cra74ig
相关产品推荐
相关产品推荐

