如何在laravel中呈现来自数据库的电子邮件?

如何在laravel中呈现来自数据库的电子邮件?,laravel,blade,swiftmailer,Laravel,Blade,Swiftmailer,我正在发送邮件,视图来自数据库: $blade_from_db = 'Hello, {{ $something }}!'; $email_data = ['something' => 'World!']; Mail::send($blade_from_db, $email_data, function ($message) use ($sender) { $message->from($sender->from, $sender->from_safe);

我正在发送邮件,视图来自数据库:

$blade_from_db = 'Hello, {{ $something }}!';
$email_data = ['something' => 'World!'];

Mail::send($blade_from_db, $email_data, function ($message) use ($sender)
{
    $message->from($sender->from, $sender->from_safe);
    $message->to($sender->to, $sender->safe);
    $message->subject($sender->subject);
});
这是错误消息:
“消息”:“未找到查看[Hello,{{$something}!]”,
有人可以帮助我或给我一个建议,因为我需要来自数据库的视图内容

$blade_from_db = view('your view',['something' => 'World!'])->render();


Mail::send([], $email_data, function ($message) use ($sender, $blade_from_db)
{
    $message->from($sender->from, $sender->from_safe);
    $message->to($sender->to, $sender->safe);
    $message->subject($sender->subject);
    $message->setBody($blade_from_db,'text/html');

});
使用
$message->setBody('blade_from_db,'text/html')
从数据库发送带有模板的电子邮件

希望这有帮助

编辑

为了从数据库中获取模板,这里是我在代码中使用的一个片段

<?php
class EmailTemplate extends Model
{
    use SoftDeletes;

    public $table = 'email_templates';


    protected $dates = ['deleted_at'];


    public $fillable = [
        'name',
        'subject',
        'content',
        'variables'
    ];

    /**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'name' => 'string',
        'subject' => 'string',
        'content' => 'string'
    ];

    /**
     * Validation rules
     *
     * @var array
     */
    public static $rules = [
//        'name' => 'required',
        'subject' => 'required'
    ];

    public function parse($data)
    {
        $parsed = preg_replace_callback('/{{(.*?)}}/', function ($matches) use ($data) {
            list($shortCode, $index) = $matches;

            if (isset($data[$index])) {
                return $data[$index];
            } else {
//                throw new Exception("Shortcode {$shortCode} not found in template id {$this->id}", 1);
            }

        }, $this->content);

        return $parsed;
    }


}

现在您可以在数据库中使用
{{{something}
来填充这些条目

视图来自数据库?比如,视图本身还是文件名?如果将视图存储在DB行中,这是一个非常有趣的想法。您可以将视图呈现为如下字符串:
view::make('my_view',['name'=>'Rishabh'])->render()感谢您的回答@j.steelman,但是如果刀片标签来自数据库,那么它应该包含的视图?啊,刀片应该放在/resources/views中,并使用.blade.php扩展名保存。创建此文件:/resources/views/emailTemplate.blade.php,其中包含
“Hello”{{$something}。然后可以将模板呈现为如下字符串:
$emailString=View::make('emailTemplate',['something'=>'World'])->render()
。这可能对你有用,但是你应该考虑为你的LaaFail版本使用默认邮件进程。请记住,Laravel是经过意见化的,因此最好的办法是创建一个调用视图的Mailer类,而不是将其全部烘焙到控制器中。我了解视图的部分,但我想在数据库中保存一个html,以便客户端可以保存自己的格式非常有趣。laravel中的电子邮件模板编辑器。我假设您已经考虑过sprintf的各种用途,其中用户被训练使用特殊字符(甚至可以是双大括号)进行字符串注入。考虑到刀片是如何解析和缓存的,我认为刀片的值并不像普通字符串那样处理。如果您假设用户有足够的信任度来创建可变刀片,那么将用户的刀片保存到文件系统不会带来太大的安全风险。但是我对你的问题标题的正式回答是“我不认为这是可能的”。谢谢,我已经试过了,理论上我需要的是传递一个字符串,其中包含来自database@JulioCesarMontenegro您可以像这样将数据传递给视图
$blade\u from_db=view('your view',['something'=>'World!'])->render()
@Juliocesara请查看我的最新信息,希望您能得到您想要的。
$data = ['something' => 'World!'];
Mail::queue([], [], function ($m) use ($sender, $data) {
     $emailTemplate = EmailTemplate::where('name', '=', 'yourtemplate')->first();

     $message->from($sender->from, $sender->from_safe);
     $message->to($sender->to, $sender->safe);
     $message->subject($sender->subject);

     $message->setBody($emailTemplate->parse($data), 'text/html');;
                });