You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel中如何将变量传入数据库调取的邮件模板正文?

解决方案

你可以通过以下2种常用方案实现变量替换,根据你的业务场景选择即可:

方案1:轻量字符串替换(无需额外依赖,适合简单模板场景)

因为你的模板里已经统一用{{$变量名}}作为占位符,直接遍历变量数组做全局替换即可,代码示例如下:

// 你原来获取模板的代码
$record = DB::table('email_templates')->select('content','em_temp_id')->where('em_temp_id', 
           $request->select_temp)->where('is_active', 1)->first();
$body = htmlspecialchars_decode($record->content);

// 新增变量替换逻辑
$arr_pass['userName'] = 'John';
$arr_pass['service_provider'] = 'abc.com';
$arr_pass['channel'] = 'Tom';
foreach ($arr_pass as $key => $value) {
    $search = '{{$' . $key . '}}';
    $body = str_replace($search, $value, $body);
}

// 后面正常调用邮件发送即可,$body已经是替换完的内容
Mail::send([],[], function($message) use ($Toarray, $ToCCarray, $ToBCCarray, $subject, $body, 
       $is_plainOrHtml){
       $message->to($Toarray, '');
       $message->cc($ToCCarray, '');
       $message->bcc($ToBCCarray, '');
       $message->subject($subject);
       $message->setBody($body, 'text/html');
});

该方案实现简单,无额外性能开销,适合模板变量不复杂、没有条件判断/循环等复杂逻辑的场景。

方案2:使用Blade模板引擎渲染(适合有复杂模板逻辑的场景)

如果你后续模板需要加循环、条件判断等复杂逻辑,可以直接用Laravel自带的Blade渲染工具处理字符串模板,代码示例如下:

use Illuminate\Support\Facades\Blade;

// 获取模板和变量的逻辑和之前一致
$record = DB::table('email_templates')->select('content','em_temp_id')->where('em_temp_id', 
           $request->select_temp)->where('is_active', 1)->first();
$bodyTemplate = htmlspecialchars_decode($record->content);
$arr_pass['userName'] = 'John';
$arr_pass['service_provider'] = 'abc.com';
$arr_pass['channel'] = 'Tom';

// 用Blade渲染模板字符串
$body = Blade::render($bodyTemplate, $arr_pass);

// 后续正常发邮件即可

该方案支持所有Blade语法,扩展性更强,适合后续模板逻辑会迭代的场景。

注意:如果模板支持用户编辑,使用Blade方案需要做好安全过滤,避免恶意代码注入风险。

内容的提问来源于stack exchange,提问作者MHEMBINT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:21:02