2017-02-28 5 views
7

Ich habe gerade meine 5.2 Installation von Laravel auf 5.3 und dann auf 5.4 nach den offiziellen Upgrade-Methoden aktualisiert.Laravel 5.4 Bild in Mail einbetten

Ich versuche jetzt, eine der neuen Funktionen zu verwenden, um eine formatierte E-Mail zu erstellen.

Nach der Dokumentation unter: 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:

Dies ist jedoch:

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

den folgenden Fehler erzeugen:

Undefined variable: message

Bin ich etwas fehlt? Oder gibt es etwas Undokumentiertes in den Upgrade-Guides?

Später bearbeiten:

Ich rufe die E-Mail-Funktion mit:

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

Und WelcomeCandidate wie folgt aussieht:

<?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'); 
    } 
} 
+0

verwenden zeigen etwas mehr Code, aber was der Fehler sagt, ist ziemlich klar. Sie haben die Nachrichtenvariable für Ihre sendbare Klasse oder Ihre Benachrichtigungsklasse nicht definiert oder Sie haben ihr im Konstruktor Ihrer E-Mail/Benachrichtigung keinen Wert zugewiesen. Auch wenn Sie Markdown verwenden, benötigen Sie das Image-Tag nicht. – Christophvh

+0

Ich habe es nach Anweisungen gemacht, wie Sie im zitierten Text sehen können. Welchen Code soll ich bereitstellen? –

+0

der Code, in dem Sie Ihre E-Mail-Klasse erreichen: also zum Beispiel: '$ message =" Hallo "; Mail :: to ($ request-> user()) -> send (new OrderShip ($ message)); ' – Christophvh

Antwort

9

Es scheint, dass die ältere message- $> einbetten funktioniert nicht gut mit Markdown-E-Mails. Like you mentioned in the comments it seems broken since 5.4

Aber man konnte es einfach so versuchen in Ihrem Abschlags E-Mail:

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

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

Wie hier gezeigt: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images

Asset-Funktion Referenz: https://laravel.com/docs/5.4/helpers#method-asset

+0

versuchte das schon. Ich bekomme eine leere img 'alt here' –

+0

haben Sie versucht mit {{assets ('img/official_log.png')}}? Vielleicht ist das Problem auf dem Weg? – Christophvh

+0

Der Weg war das Problem. Und ich habe versucht, die Inline-Methode, die ein anderes Problem sein könnte. –

0

Sie könnten versuchen, die folgenden:

class WelcomeCandidate extends Mailable 
{ 
    use Queueable, SerializesModels; 

    public $message; 
    public function __construct(User $user) 
    { 
     $this->user = $user; 
     $this->message = (object) array('image' => '/path/to/file'); 
    } 
} 
2

Try this:

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

oder

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

Ich mag diese Lösung aber leider keine Würfel. – Benco

0

mein Problem gelöst!

<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('[email protected]')->subject('Contact Form || abc.com'); 
      $message->from($r->email); 
      // ->setBody($r->user_message); // assuming text/plain 

     }); 

Wenn Sie in localhost sind, können Sie public_path statt base_path Funktion

Verwandte Themen