Laravel 5.5 Mailable中Views的With方法问题:SparkPost无法发送含变量邮件
解决SparkPost因Mailable变量无法发送邮件的问题
嘿,我一眼就瞅出问题大概率出在变量名不匹配上——毕竟你说移除{{$doorNumberDest}}就正常,说明这个变量的传递环节出了岔子,导致邮件渲染失败,SparkPost自然发不出去。先看你给出的控制器代码片段:
public function sendDriverNotificationEmail(Request $request){ $emailDriver = $request->emailDriver; $doorNumber = $request->doorNumber; Mail::to($emailDriver)->send(new arrivalDriverNotify($emailDriver, $doo...
这里明显能看到:你在控制器里从请求中拿到的是$doorNumber,但模板里用的却是{{$doorNumberDest}},俩变量名完全对不上!Laravel渲染模板时找不到$doorNumberDest这个变量,会抛出未定义变量的错误,导致邮件内容渲染失败,SparkPost接收不到合法的邮件内容,自然就发送失败了。
给你几个具体的解决步骤:
第一步:对齐Mailable类的变量名
打开你的arrivalDriverNotifyMailable类,要么把类里的公共属性改成和模板一致的$doorNumberDest,要么在构造函数里把传入的$doorNumber赋值给它:class arrivalDriverNotify extends Mailable { use Queueable, SerializesModels; // 必须是public属性,Laravel才能自动传递到模板 public $doorNumberDest; public function __construct($emailDriver, $doorNumber) { $this->doorNumberDest = $doorNumber; // 如果你需要用到$emailDriver,也可以在这里赋值对应的公共属性 } public function build() { return $this->view('emails.driver.arrival'); // 替换成你的实际模板路径 } }第二步:验证控制器的参数传递
先确认$request->doorNumber确实能拿到有效值,避免是空值或者null(虽然空值一般不会导致发送失败,但未定义变量肯定会),可以加个调试代码:$doorNumber = $request->doorNumber; dd($doorNumber); // 运行后看输出是否符合预期,没问题再删掉这行第三步:检查模板的变量引用
确保模板里的变量和Mailable类的公共属性完全一致,比如:<!-- 正确的模板引用 --> <p>您需要前往的目的地门牌号:{{ $doorNumberDest }}</p>
另外补充个小细节:如果不想把变量定义为public,也可以在build()方法里用with()手动传递变量,效果是一样的:
public function build() { return $this->view('emails.driver.arrival') ->with(['doorNumberDest' => $this->doorNumber]); }
按照上面的步骤调整后,模板就能正确渲染出包含门牌号的邮件内容,SparkPost就能正常发送了。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

