Laravel中使用to关键字发送邮件失效问题及解决方法
问题根源
你遇到的问题不是因为to是PHP保留关键字,而是Laravel的Mailable类本身已经提供了to()方法来设置邮件收件人。当你在自定义Mailable类中定义**公共属性$to**时,会干扰框架内部的收件人处理逻辑,导致邮件无法正确发送。
解决方案
有两种常见的修复方式,任选其一即可:
方式一:重命名公共属性
将公共属性$to重命名为其他名称(比如$recipient),然后在build()方法中调用框架的to()方法设置收件人:
class ProgressReportMailTest extends Mailable { use Queueable, SerializesModels; public $recipient; public $emailBody; public function __construct($data) { $this->recipient = $data['to']; $this->emailBody = $data['emailbody'] ?? null; } public function build() { return $this->to($this->recipient) ->view('your view'); } }
方式二:修改属性访问修饰符
如果不想重命名属性,可以将$to的访问修饰符改为protected或private,这样就不会和框架的to()方法冲突,同时在build()方法中调用to()方法传递收件人:
class ProgressReportMailTest extends Mailable { use Queueable, SerializesModels; protected $to; public $emailBody; public function __construct($data) { $this->to = $data['to']; $this->emailBody = $data['emailbody'] ?? null; } public function build() { return $this->to($this->to) ->view('your view'); } }
补充说明
Laravel Mailable的公共属性会被自动传递到视图中,但收件人、抄送人这类邮件核心配置,必须通过框架提供的to()、cc()、bcc()等方法来设置,不要用同名公共属性替代,否则会破坏框架的邮件处理流程。
内容的提问来源于stack exchange,提问作者Marryam Raja
相关产品推荐
相关产品推荐

