wake-up-neo.com

laravel 5.4 Bild in Mail einbetten

Ich habe gerade meine 5.2-Installation von laravel auf 5.3 und dann auf 5.4 nach den offiziellen Upgrade-Methoden aktualisiert.

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

Gemäß der Dokumentation unter: https://laravel.com/docs/5.4/mail#view-data

Verwenden Sie die Einbettungsmethode für die Variable $message in Ihrer E-Mail-Vorlage, um ein Inline-Bild einzubetten. Laravel macht den $message automatisch für alle Ihre E-Mail-Vorlagen verfügbar, sodass Sie sich nicht um die manuelle Übergabe kümmern müssen:

Dies ist jedoch:

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

erzeugt den folgenden Fehler:

Undefinierte Variable: message

Vermisse ich etwas? Oder ist in den Upgrade-Anleitungen etwas undokumentiert?

Später bearbeiten:

Ich rufe die E-Mail-Funktion mit:

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

Und WelcomeCandidate sieht so aus:

<?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');
    }
}
15
Angelin Calu

Es scheint, dass das ältere $ message-> embed nicht gut mit Markdown-E-Mails funktioniert. Wie Sie in den Kommentaren erwähnt haben, scheint es seit 5.4 gebrochen zu sein

Aber Sie könnten es einfach so in Ihrer Markdown-E-Mail versuchen:

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-Funktionsreferenz: https://laravel.com/docs/5.4/helpers#method-asset

15
Christophvh

Versuche dies:

<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')))}})
7
Mikael

Sie können dieses nützliche Paket auch verwenden

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

Aus dem Readme genommen

Die Verwendung ist sehr einfach, Sie schreiben Ihren Markdown normalerweise:

@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

Beim Senden wird der normalerweise generierte Link ersetzt:

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

durch einen eingebetteten Inline-Anhang des Bildes:

<img src="cid:[email protected]">
3
cyberfly

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 sich in localhost befinden, können Sie public_path anstelle der Funktion base_path verwenden

1
John

Sie könnten folgendes versuchen: 

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');
    }
}
0
Tony Chung