laravel 5.4在邮件中嵌入图像

时间:2017-02-28 07:58:49

标签: laravel email laravel-5 laravel-5.4

我刚刚将5.2 laravel安装升级到5.3,然后按照官方升级方法升级到5.4

我现在正尝试使用其中一项新功能,以创建降价形式的电子邮件。

根据https://laravel.com/docs/5.4/mail#view-data

上的文件
  

要嵌入内嵌图像,请使用$message上的嵌入方法   电子邮件模板中的变量。 Laravel自动制作   $message变量可供您的所有电子邮件模板使用   不用担心手动传递它:

但是,这个:

<img src="{{ $message->embed(public_path().'/img/official_logo.png') }}">

将产生以下错误:

  

未定义的变量:message

我错过了什么吗?或者升级指南中是否有未记录的内容?

稍后编辑:

我用以下方式调用电子邮件功能:

\Mail::to($user)->send(new WelcomeCandidate($user, $request->input('password')));

WelcomeCandidate看起来像:

<?php

namespace App\Mail;

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

use App\Models\User;

class WelcomeCandidate extends Mailable
{

    use Queueable, SerializesModels;

    public $user;
    public $password;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->subject('Welcome!');
        return $this->markdown('emails.welcome-candidate');
    }
}

7 个答案:

答案 0 :(得分:16)

似乎较早的$ message-&gt;嵌入与Markdown电子邮件不兼容。 Like you mentioned in the comments it seems broken since 5.4

但您可以在降价电子邮件中尝试这样做:

This is your logo 
![Some option text][logo]

[logo]: {{asset('/img/official_logo.png')}} "Logo"

如下所示: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images

资产功能参考:https://laravel.com/docs/5.4/helpers#method-asset

答案 1 :(得分:7)

试试这个:

<img src="data:image/png;base64,{{base64_encode(file_get_contents(resource_path('img/email/logo.png')))}}" alt="">

![](data:image/png;base64,{{base64_encode(file_get_contents(resource_path('img/email/logo.png')))}})

答案 2 :(得分:3)

您也可以使用这个有用的包

https://github.com/eduardokum/laravel-mail-auto-embed

  

取自自述文件

它的使用非常简单,你通常会写下你的降价:

@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Purchased product:

![product](https://example.com/products/product-1.png)

Thanks,<br>
{{ config('app.name') }}
@endcomponent

发送时,它将替换通常会生成的链接:

<img src="https://example.com/products/product-1.png">

通过图像的嵌入式内联附件:

<img src="cid:3991f143cf1a86257f8671883736613c@Swift.generated">

答案 3 :(得分:1)

解决了我的问题!

  <img src="{{ $message->embed(base_path() . '/img/logo.png') }}" />
Controller:


\Mail::send(['html' =>'mail'],
        array(
            'name' => $r->name,
            'email' => $r->email,
            'user_message' => $r->message,
           // 'telephone'=>$r->telephone,
           // 'subject'=>$r->subject
        ), function($message) use ($r)  {

            $message->to('abc@gmail.com')->subject('Contact Form || abc.com');
            $message->from($r->email);
            // ->setBody($r->user_message); // assuming text/plain

        });

如果您在localhost中,则可以使用public_path而不是base_path函数

答案 4 :(得分:1)

我刚刚遇到了同样的问题,并找到了解决方案。

在渲染图像之前,您必须使用以下命令创建从“ public / storage”到“ storage / app / public”的符号链接:

php artisan storage:link

在“存储/应用/公共”中,您应该有一个文件夹“图像” 现在,您可以在markdown.blade.php中呈现此代码:

!['alt_tag']({{Storage::url('/images/your_image.png')}})

第二个选项类似:

!['alt_text']({{Storage::url($comment->user->image->path)}}) 

两个都很好

答案 5 :(得分:0)

您可以尝试以下方法:

pd.concat([df, df.A], axis=1)

     A    A
0  1.0  NaN
1  2.0  1.0
2  3.0  2.0
3  NaN  3.0

答案 6 :(得分:0)

在后端,我创建了用于显示图像的端点。并将我需要的图像放在资源/ img 中。 Laravel 代码如下所示:

 public function getImage($name)
 {
        return response()->file(base_path() . '/resources/img/' . $name . '.png');
 }

然后在我的 html 电子邮件模板中,我创建了带有背景图像的 div。

<div style='background: url("https://mysite1.com/api/v1/get_image/logo")'></div>

它对我有用。