Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

laravel 5.4 embed image in mail

Tags:

I have just upgraded my 5.2 install of laravel to 5.3 and then to 5.4 following the official upgrading methods.

I am now trying to use one of the new features, to create a markdown formated email.

According to the documentation found at: https://laravel.com/docs/5.4/mail#view-data

To embed an inline image, use the embed method on the $message variable within your email template. Laravel automatically makes the $message variable available to all of your email templates, so you don't need to worry about passing it in manually:

However, this:

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

will produce the following error:

Undefined variable: message

Am I missing something? Or is there something undocumented in the upgrading guides?

Later edit:

I am calling the email function with:

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

And WelcomeCandidate looks like:

<?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');     } } 
like image 200
Angelin Calu Avatar asked Feb 28 '17 07:02

Angelin Calu


2 Answers

It seems that the older $message->embed doesn't work nicely with Markdown emails. Like you mentioned in the comments it seems broken since 5.4

But you could just try it like this inside your markdown email:

This is your logo  ![Some option text][logo]  [logo]: {{asset('/img/official_logo.png')}} "Logo" 

Like shown here: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images

Asset function reference: https://laravel.com/docs/5.4/helpers#method-asset

like image 129
Christophvh Avatar answered Oct 13 '22 13:10

Christophvh


Try this:

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

or

![](data:image/png;base64,{{base64_encode(file_get_contents(resource_path('img/email/logo.png')))}}) 
like image 27
Mikael Avatar answered Oct 13 '22 13:10

Mikael