LARAVEL:发送存储在 DB 中的邮件,使用 WYSIWYG 编辑器制作

Posted

技术标签:

【中文标题】LARAVEL:发送存储在 DB 中的邮件,使用 WYSIWYG 编辑器制作【英文标题】:LARAVEL: Send mail that is stored in DB, made using a WYSIWYG editor 【发布时间】:2019-03-16 08:40:13 【问题描述】:

我正在尝试为我的 Laravel 项目设置电子邮件功能。我已经完成了所有设置,Mailable 类、Mailgun、发送邮件的控制器等。

我已经浏览了 Laravel 邮件文档,并尝试按照它的建议进行操作,为我的邮件等使用刀片模板。

问题是,我的客户将使用所见即所得的编辑器制作他们自己的邮件,所以我不能只在blade.php 中制作邮件模板。我想从数据库中获取邮件内容,然后将其注入到刀片文件中,我已经设法成功了。

但是假设邮件内容是“Hello $name”,当我从数据库中获取它并将其注入刀片模板时,发送的邮件实际上是“Hello $name ” 而不是“你好 John Doe”。我在构建函数中的 Mailable 类中发送 $name。

class Confirmation extends Mailable

  use Queueable, SerializesModels;

  /**
   * Create a new message instance.
   *
   * @return void
   */
   public function __construct(Customer $customer, Mail $mail_content)
   
     $this->customer = $customer;
     $this->mail_content = $mail_content;
   

   /**
    * Build the message.
    *
    * @return $this
    */
   public function build()
   
     return $this->from('noreply@example.com')
                 ->with([
                     'name' => $this->customer->name,
                     'content' => $this->mail_content->content,
                 ])
                 ->subject('Confirmation')
                 ->view('emails.test');
   

因此,如果内容是“Hello $name”,我希望构建函数中的名称替换内容中的 $name。但由于它来自数据库,因此它的处理方式显然与我刚刚在视图文件中写“Hello $name”的方式不同。

我的刀片模板如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Confirmation mail</title>
</head>
<body>
  !! $content !!
</body>

有什么建议吗? 我希望这对那里的人有意义:D

【问题讨论】:

我不记得它是如何工作的,但你想看看 Blade::compileString。 ***.com/questions/39801582/… 【参考方案1】:

你可以在输出之前使用 str_replace() 吗? http://php.net/manual/en/function.str-replace.php

public function replaceContent() 

    $this->mail_content->content = str_replace('$name', $this->customer->name, $this->mail_content->content)


并在你的构建函数中调用它

public function build()

    $this->replaceContent();

    return $this->from('noreply@example.com')
        ->with([
            'name' => $this->customer->name,
            'content' => $this->mail_content->content,
        ])
        ->subject('Confirmation')
        ->view('emails.test');

【讨论】:

我什至没有想过要走那条路,但它很完美。谢谢! :-) 您可以通过在字符串中扫描不同的 placeholders 并替换为相关变量(如果已设置)来使用 replaceContent() 函数变得更加聪明

以上是关于LARAVEL:发送存储在 DB 中的邮件,使用 WYSIWYG 编辑器制作的主要内容,如果未能解决你的问题,请参考以下文章

使用 MYSQL db 中的正文通过 PHP 发送电子邮件并解析 \n

如何使用 laravel 5 中的队列通过电子邮件发送密码重置链接

如何使用 laravel 发送自定义电子邮件通知?

laravel 8 : 注册后发送邮件验证 laravel

如何在使用 Laravel 在控制器中发送邮件之前更改邮件配置?

使用 Laravel Auth 和加密的用户表发送重置链接