使用Summernote在Laravel中动态内联附件

时间:2018-11-16 13:06:45

标签: laravel-5 summernote mailing

我已经创建了一些功能来管理电子邮件活动。我使用summernote编辑电子邮件模板。

像大多数编辑器一样,Summernote将图像存储为base64编码的图像标签。

我遇到的问题是,当我要发送电子邮件时,大多数邮件客户端都不呈现base64图像标签。因此,我需要使用:

 <img src="{{ $message->embed($pathToFile) }}"> or <img src="{{ $message->embedData($data, $name) }}"> 

根据Laravel文档:https://laravel.com/docs/5.7/mail#inline-attachments

问题在于邮件类需要设置视图

return $this->from('example@example.com')->view('emails.orders.shipped');

将summernote的嵌入式图像放入电子邮件视图的最佳方法是什么? (请注意,电子邮件中可以包含多个图像,并且每个模板都不同)

当前的邮件功能基本上希望您的视图已经具有嵌入功能。但是在这种情况下,我需要动态设置它。

2 个答案:

答案 0 :(得分:0)

您可以将图像路径传递给邮件类别。

email.blade.php

<img src="{{ $message->embed($pathToFile) }}">
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderShipped extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($pathToFile)
    {
        $this->pathToFile = $pathToFile;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('example@example.com')->view('mails.test')->with(['pathToFile' => $this->pathToFile]);
    }
}

还有您的控制器

public function foo()
{
    Mail::to('asd@gmail.com')->send(new OrderShipped('favicon.ico'));
    return true;
}

您将得到类似

的结果

enter image description here

答案 1 :(得分:0)

我要做的唯一一件事就是隔离出summernote值中的图像(从textarea保存的数据),然后将它们重新创建为磁盘上的图像。然后使用已写入动态视图的图像路径(embed($ pathToFile)}}“>动态生成视图,然后将该动态视图注入电子邮件中。