是否可以在 Laravel 的 HTML 电子邮件中包含图像

Posted

技术标签:

【中文标题】是否可以在 Laravel 的 HTML 电子邮件中包含图像【英文标题】:Is it possible to include an image in a HTML email in Laravel 【发布时间】:2015-06-06 09:24:42 【问题描述】:

我目前正在尝试通过 Laravel 的 Mail::send() 发送 html 电子邮件。我使用的视图是 Blade 模板,但我不太确定如何在电子邮件正文中包含图像。

在我的模板中,我有

<h4>You have successfully updated your Session!</h4>

@if ( $old_date != $date)
    <p>You have changed from  $old_date  to  $date </p>
@endif

<p>If you have any questions or concerns, please contact the Office of Admissions</p>

 HTML::image('/images/full-logo.png', 'logo') 

但是,我的电子邮件在邮件正文中只有一个损坏的链接图标。是否可以将图像作为参数传递给视图?在发送电子邮件的控制器中,我有

$data = array (
                        'first_name'    => $student->first_name,
                        'last_name'     => $student->last_name,
                        'date'          => $day,
                        'old_date'      => $old_day,
                );


Mail::send ( '/emails/create_student', $data, function ($message) 
    ...
 );

所以我不确定是否可以通过$data 数组包含图像。

【问题讨论】:

是的,有可能,如果解决了,请检查图像路径。 电子邮件不在您的网站上。您需要使用网站上图片的完整 URL。 【参考方案1】:

这个对我有用: 图像在电子邮件视图中声明

<img src=" $message->embed(public_path() . '/resources/icon/icon.png') "  />

来自Laravel doc “$message 变量总是传递给电子邮件视图,并允许内联嵌入附件。”

【讨论】:

【参考方案2】:

HTML::image() 生成图像的绝对路径,如下所示:

http://yoursite.dev/image.png

在您的本地环境中完美运行。

邮件客户端,如 Gmail,将使用以下内容覆盖图像路径:

http://images.gmail.com/?src=http://yoursite.dev/image.png

显然,第 3 方服务无法访问您的本地域,因此您会看到损坏的图像。

作为一种解决方案,您可以将图像上传到亚马逊 AWS 等第三方服务,并将上传图像的链接传递给电子邮件模板。

【讨论】:

以上是关于是否可以在 Laravel 的 HTML 电子邮件中包含图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel Mailable 测试电子邮件的主题

通过 Laravel / PHP 的 Mandrill 入站电子邮件

Laravel 5.1 密码重置电子邮件主题行

无法使用 laravel + mandrill 发送 html 电子邮件

在 Laravel 5 上检查邮件是不是发送成功

如何在Laravel中手动重新发送电子邮件验证?