it-swarm.com.de

Laravel Mail: String statt Ansicht übergeben

Ich möchte eine Bestätigungs-E-Mail mit laravel senden ..__ Die Funktion Mail :: send () von laravel scheint nur einen Pfad zu einer Datei auf dem System zu akzeptieren ..__ Das Problem ist, dass meine Mailtemplates in der Datenbank und nicht in einer Datei auf dem System.

Wie kann ich einfachen Inhalt an die E-Mail übergeben?

Beispiel:

$content = "Hi,welcome user!";

Mail::send($content,$data,function(){});
31
nexana

update: In Laravel 5 können Sie stattdessen raw verwenden:

Mail::raw('Hi, welcome user!', function ($message) {
  $message->to(..)
    ->subject(..);
});

Das ist wie man es macht:

Mail::send([], [], function ($message) {
  $message->to(..)
    ->subject(..)
    // here comes what you want
    ->setBody('Hi, welcome user!'); // assuming text/plain
    // or:
    ->setBody('<h1>Hi, welcome user!</h1>', 'text/html'); // for HTML rich messages
});
70
Jarek Tkaczyk

Für HTML-E-Mails

Mail::send(array(), array(), function ($message) use ($html) {
  $message->to(..)
    ->subject(..)
    ->from(..)
    ->setBody($html, 'text/html');
});
35
Sajjad Ashraf

Die Mailer-Klasse übergibt einen String an addContent, der über verschiedene andere Methoden views->make() aufruft. Das direkte Übergeben einer Zeichenfolge von Inhalten funktioniert daher nicht, da versucht wird, eine Ansicht mit diesem Namen zu laden.

Was Sie tun müssen, ist eine Ansicht zu erstellen, die einfach $content

// mail-template.php
<?php echo $content; ?>

Und fügen Sie dann zur Laufzeit Ihren String in diese Ansicht ein.

$content = "Hi,welcome user!";

$data = [
    'content' => $content
];

Mail::send('mail-template', $data, function() { });
13
Ben Swinburne

Wenn Sie Sendungen verwendet haben. Sie können in der Build-Methode so etwas tun:

public function build()
{

    return $this->view('email')
        ->with(['html'=>'This is the message']);
}

Sie erstellen einfach die Blade-Ansicht email.blade.php in Ihrem Ressourcenordner.

Dann können Sie in der Klinge Ihre Zeichenfolge mithilfe der Laravel-Blattsyntax referenzieren

 <html>
    <body>
      {{$html}}
    </body>
  </html>

oder 

 <html>
            <body>
              {!!$html!!}
            </body>
          </html>

Wenn Ihr Rohtext HTML-Markierungen enthält .__ Ich hoffe, das funktioniert für diejenigen, die Vorlagen in der Datenbank gespeichert haben und die Mailables-Klasse in Laravel nutzen möchten.

1
public function build()
{
    $message = 'Hi,welcome user!'
    return $this->html($message)->subject($message);
}
1
jeidison farias

wie du weißt

Es können nur Postsendungen in die Warteschlange gestellt werden.

das heißt, wenn Sie die Schnittstelle ShouldQueue verwenden

1) Zuerst sollten Sie immer tun

php artisan queue:restart

2) Zweitens können Sie in Ihrem Mailable die Methode html verwenden (getestet in laravel 5.8)

public function build(): self
{
    return $this
            ->html('
                <html>
                    <body>
                        ForwardEmail
                    </body>
                </html>
            ')
            ->subject(config('app.name') . ' ' . 'email forwarded')
            ->attachData($this->content, 'email.eml', [
                'mime' => 'application/eml',
    ]);
}
0

Sie hat keinen direkten Bezug zur Frage, aber für diejenigen, die nach der Einstellung der Nur-Text-Version Ihrer E-Mail unter Beibehaltung der benutzerdefinierten HTML-Version suchen, können Sie dieses Beispiel verwenden:

Mail::raw([], function($message) {
    $message->from('[email protected]', 'Company name');
    $message->to('[email protected]');
    $message->subject('5% off all our website');
    $message->setBody( '<html><h1>5% off its awesome</h1><p>Go get it now !</p></html>', 'text/html' );
    $message->addPart("5% off its awesome\n\nGo get it now!", 'text/plain');
});

Wenn Sie fragen würden "Aber warum nicht das erste Argument als Klartext festlegen?", Habe ich einen Test gemacht und es wird nur der HTML-Teil benötigt, wobei der Rohteil ignoriert wird.

Wenn Sie zusätzliche Variablen verwenden müssen, müssen Sie für die anonyme Funktion die Anweisung use() wie folgt verwenden:

Mail::raw([], function($message) use($html, $plain, $to, $subject, $formEmail, $formName){
    $message->from($fromEmail, $fromName);
    $message->to($to);
    $message->subject($subject);
    $message->setBody($html, 'text/html' ); // dont miss the '<html></html>' if the email dont contains it to decrease your spam score !!
    $message->addPart($plain, 'text/plain');
});

Hoffe, es hilft dir, Leute.

0
Anwar

Sie können Roh-HTML, Text usw. mit Laravel Mailables versenden

Überschreiben Sie Mailable-> send () in Ihrer Mailable und verwenden Sie die Methode in den vorherigen Antworten:

send([], [], function($message){ $message->setBody() } )

Sie müssen $ this-> view () in Ihrer Build-Funktion überhaupt nicht aufrufen.

0
patrox