如何在Laravel Mailable中设置邮件主题?是否支持在视图内配置?
核心问题解答
- 邮件主题属于SMTP协议的邮件头信息,默认情况下Laravel不支持直接在邮件视图中定义主题,视图仅负责渲染邮件正文内容。
- 技术上可以实现从视图中提取主题的逻辑,但完全不符合Laravel的Mailable设计规范,不推荐使用。
常规修复方案(推荐)
1. 修改Mailable类代码
放开构造方法中subject相关的注释,调整构造传参,同时在build方法中调用subject()方法设置主题:
namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class JulianEmail extends Mailable { use Queueable, SerializesModels; public $content; public $name; public $subject; public $email; // 新增$subject入参 public function __construct($content, $subject) { $this->content = $content; $this->subject = $subject; //$this->name = $name; //$this->pdf = $pdf; //$this->pdf_name = $pdf_name; } public function build() { // 链式调用subject方法设置主题 return $this->subject($this->subject) ->view('pages.mail.julian_email', ['content' => $this->content]); } }
2. 修改控制器调用代码
实例化Mailable类时传入从请求中获取的主题参数:
public function email_zone(Request $request){ //$customers = implode(', ',$request->CustContactEmail); $customers="example@example.com"; $user = Auth::user(); if(isset($user->UserID) and !empty($user->smtp_password)){ $subject=$request->EmailSubject; $content=$request->EmailBody; \Mail::to($user->email) ->cc($customers) // 新增$subject参数传入 ->send(new JulianEmail($content, $subject)); } else return redirect()->route('zone_calendar')->with('status','User is not setup to send email. Contact Webmaster')->with('code','red'); }
视图中设置主题的实现方案(不推荐)
如果确实有特殊需求要在视图中定义主题,可以按以下逻辑实现,但逻辑冗余,不建议生产环境使用:
- 在视图开头添加主题注释标记,比如
{{--MAIL_SUBJECT:这里是主题内容--}} - 在Mailable的build方法中先渲染视图,用正则提取主题内容,再调用
subject()方法设置。
内容的提问来源于stack exchange,提问作者user2197774
相关产品推荐
相关产品推荐

