E-Mail-Versand


Mail

Einführung

Laravel basiert auf Die SwiftMailer-Bibliothek bietet eine saubere und erfrischende E-Mail-API. Laravel bietet Treiber für SMTP, Mailgun, SparkPost, Amazon SES, die mail-Funktion von PHP und die sendmail-Funktion, sodass Sie E-Mails schnell über lokale oder Cloud-Dienste versenden können.

Vorkenntnisse über Mail-Treiber

API-basierte Treiber wie Mailgun und SparkPost sind normalerweise einfacher und effizienter Schneller als SMTP-Server, also nutzen Sie diese Dienste, wenn Sie können. Für alle API-Treiber muss in der Anwendung die Guzzle-HTTP-Bibliothek installiert sein. Sie können sie über den Composer-Paketmanager installieren:

composer require guzzlehttp/guzzle

Mailgun-Treiber

Um den Mailgun-Treiber zu verwenden (Mailgun Die ersten 10.000 E-Mails sind kostenlos, weitere E-Mails sind kostenpflichtig). Installieren Sie zuerst Guzzle und konfigurieren Sie dann die Konfigurationsdatei config/mail.php Setzen Sie die Option driver auf mailgun . Überprüfen Sie als Nächstes, ob die Konfigurationsdatei config/services.php die folgenden Optionen enthält:

'mailgun' => [
    'domain' => 'your-mailgun-domain',    
    'secret' => 'your-mailgun-key',
  ],

Wenn Sie nicht die „US“ Mailgun-Region verwenden, können Sie die Terminalkonfiguration für Ihre Region in definieren servicesDatei:

'mailgun' => [
    'domain' => 'your-mailgun-domain',    
    'secret' => 'your-mailgun-key',    
    'endpoint' => 'api.eu.mailgun.net',
  ],

Postmark-Treiber

Um den Postmark-Treiber zu verwenden, installieren Sie den SwiftMailer von Postmark über Composer:

composer require wildbit/swiftmailer-postmark

Als nächstes installieren Sie Guzzle und legen in der Konfigurationsdatei config / mail.php die Optionen fest zu driver. Überprüfen Sie abschließend, ob Ihre postmark-Konfigurationsdatei die folgenden Optionen enthält: config / services.php

'postmark' => [ 
   'token' => 'your-postmark-token',
  ],

SparkPost-Treiber

Um den SparkPost-Treiber zu verwenden, installieren Sie zuerst Guzzle und konfigurieren Sie dann die Datei

Setzen Sie den Optionswert config/mail.php auf driver. Überprüfen Sie als Nächstes, ob die Konfigurationsdatei sparkpost die folgenden Optionen enthält: config/services.php

'sparkpost' => [
    'secret' => 'your-sparkpost-key',
   ],

Bei Bedarf können Sie auch den

API-Endpunkt mithilfe von

'sparkpost' => [
    'secret' => 'your-sparkpost-key',    
    'options' => [     
       'endpoint' => 'https://api.eu.sparkpost.com/api/v1/transmissions',   
     ],
  ],

festlegen
SES-Treiber

Um den Amazon SES-Treiber (kostenpflichtig) zu verwenden, installieren Sie zunächst Amazon AWS PHP SDK können Sie die Bibliothek installieren, indem Sie die folgende Zeile zum Abschnitt

der Datei composer.json hinzufügen und dann den Befehl require ausführen: composer update

"aws/aws-sdk-php": "~3.0"

Als nächstes legen Sie

im fest Konfigurationsdatei 🎜> Option ist config/mail.php. Überprüfen Sie dann, ob die Konfigurationsdatei driver die folgenden Optionen enthält: ses

'ses' => [
    'key' => 'your-ses-key',    
    'secret' => 'your-ses-secret',    
    'region' => 'ses-region', 
     // e.g. us-east-1
  ],
config/services.phpWenn Sie beim Ausführen von SES-Anfragen

zusätzliche Optionen einschließen müssen, können Sie diese im < definieren 🎜>Konfiguration Array: SendRawEmail

'ses' => [
    'key' => 'your-ses-key',    
    'secret' => 'your-ses-secret',    
    'region' => 'ses-region',  
    // e.g. us-east-1    
    'options' => [    
        'ConfigurationSetName' => 'MyConfigurationSet',        
        'Tags' => [    
                [      
                     'Name' => 'foo',                
                     'Value' => 'bar',         
                  ],    
                ],   
             ],
        ],
sesoptions

Mailable-Klasse generieren
In Laravel kann jede von der Anwendung gesendete E-Mail als „mailable“ dargestellt werden " Klassen, diese Klassen werden im Verzeichnis

gespeichert. Wenn Sie dieses Verzeichnis nicht sehen, machen Sie sich keine Sorgen, es wird generiert, wenn Sie Ihre erste mailbare Klasse mit dem Befehl

erstellen:

php artisan make:mail OrderShipped
app/Mailmake:mail

Versandfähige Klassen schreiben
Alle Konfigurationen für versendbare Klassen sind in

Nach Abschluss der Methode können Sie in dieser Methode mehrere Methoden aufrufen, z. B.

,

, build und from, um den Inhalt der E-Mail zu konfigurieren und zu senden. subjectviewattach

Absender konfigurieren

Verwenden Sie
Methode

Werfen wir einen Blick auf die Konfiguration des E-Mail-Absenders, oder anders gesagt, von wem die E-Mail kommt. Es gibt zwei Möglichkeiten, den Absender zu konfigurieren. Die erste Möglichkeit besteht darin, die Methode from in der Methode

der Mailable-Klasse aufzurufen:

/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->from('example@example.com')              
       ->view('emails.orders.shipped');
    }
buildfrom

Verwenden Sie die globale from-Adresse

Wenn Ihre Anwendung jedoch für alle E-Mails dieselbe Absenderadresse verwendet, ist das Aufrufen der from-Methode in jeder generierten mailbaren Klasse sehr umständlich. Stattdessen können Sie in der Konfigurationsdatei config/mail.php eine globale Absenderadresse angeben, die verwendet wird, wenn keine andere from-Adresse in der Mailable-Klasse angegeben ist:

'from' => ['address' => 'example@example.com', 'name' => 'App Name'],

Zusätzlich können Sie config / mail.php Definieren global reply_to in der Konfigurationsdatei Adresse:

'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],

Konfigurationsansicht

Sie können <🎜 in der Methode build der Mailable-Klasse verwenden > Methode zum Angeben, welche Ansichtsvorlage beim Rendern von E-Mail-Inhalten verwendet werden soll, da jede E-Mail normalerweise Blade verwendet Vorlagen zum Rendern von Inhalten, damit Sie beim Erstellen von E-Mail-HTML alle von der Blade-Vorlagen-Engine bereitgestellten Funktionen nutzen können: view

/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->view('emails.orders.shipped');
   }

{Hinweis:} Sie können ein

-Verzeichnis erstellen, um alle E-Mail-Vorlagen zu speichern , Natürlich können Sie die E-Mail-Vorlage auch an einem beliebigen anderen Ort im Verzeichnis resources/views/emails ablegen. resources/views

Nur-Text-E-Mail

Wenn Sie eine Nur-Text-E-Mail definieren möchten, können Sie die Methode

verwenden. Wie die Methode text erhält die Methode view einen Vorlagennamen, der zum Rendern des E-Mail-Inhalts verwendet wird. Sie können entweder eine Nur-Text-Nachricht oder HTML definieren Nachricht: text

/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->view('emails.orders.shipped')             
        ->text('emails.orders.shipped_plain');
    }

Daten anzeigen

über öffentliches Eigentum

Oft müssen wir einige Daten an die HTML-Ansicht übergeben, die die E-Mail zur Verwendung rendert. Es gibt zwei Möglichkeiten, Daten an die Ansicht zu übergeben: Erstens werden alle in Ihrer mailbaren Klasse definierten öffentlichen Eigenschaften automatisch an die Ansicht übergeben. Daher können Sie Daten an den Konstruktor der mailbaren Klasse übergeben und die Daten als öffentliche Eigenschaft der Klasse festlegen:

<?php
    namespace App\Mail;
    use App\Order;use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    class OrderShipped extends Mailable{ 
       use Queueable, SerializesModels;   
     /**
     * 订单实例.
     *
     * @var Order
     */  
   public $order; 
    /**
     * 创建一个新的消息实例.
     *
     * @return void
     */   
   public function __construct(Order $order)   
   {     
      $this->order = $order;   
   }   
   /**
     * 构建消息.
     *
     * @return $this
     */   
    public function build()  
      {      
        return $this->view('emails.orders.shipped');  
         }
    }

Nachdem die Daten auf die öffentliche Eigenschaft festgelegt wurden, werden sie automatisch in der Ansicht wirksam , damit Sie auf sie wie auf andere Daten in Blade-Vorlagen zugreifen können:

<div>
    Price: {{ $order->price }}
</div>

Über die with-Methode

Wenn Sie das Format der E-Mail-Daten anpassen möchten, bevor sie an die Vorlage gesendet werden, können Sie die Daten manuell über die with-Methode an die Ansicht übergeben. Normalerweise müssen Sie weiterhin Daten durch den Konstruktor der mailbaren Klasse übergeben, aber dieses Mal müssen Sie die Daten als protected- oder private-Attribut festlegen, damit die Daten nicht automatisch in der Ansicht wirksam werden. Wenn dann die with-Methode aufgerufen wird, übergeben Sie die Array-Daten an die Methode, damit die Daten in der Ansichtsvorlage wirksam werden:

<?php
    namespace App\Mail;
    use App\Order;
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    class OrderShipped extends Mailable{ 
       use Queueable, SerializesModels;   
     /**
     * 订单实例.
     *
     * @var Order
     */ 
   protected $order;  
    /**
     * 创建一个新的实例.
     *
     * @return void
     */  
   public function __construct(Order $order)  
     {     
        $this->order = $order;  
      }   
    /**
     * 构建消息.
     *
     * @return $this
     */  
    public function build()  
      {     
         return $this->view('emails.orders.shipped')                
             ->with([                 
                    'orderName' => $this->order->name,                        
                    'orderPrice' => $this->order->price,                 
                    ]);  
           }
      }

Nachdem die Daten über with an die Ansicht übergeben wurden Methode wird es automatisch in der Ansicht wirksam, Sie können es also auch wie in Blade tun Die Vorlage greift auf die übergebenen Daten genauso zu wie andere Daten:

<div>
    Price: {{ $orderPrice }}
</div>

Anhang

Um einen Anhang hinzuzufügen zur E-Mail: Verwenden Sie build-Methoden innerhalb von attach-Methoden. Die attach-Methode akzeptiert den absoluten Pfad zur Datei als erstes Argument:

    /**
     * Build the message.
     *
     * @return $this
     */    
     public function build()   
      {      
        return $this->view('emails.orders.shipped')                 
           ->attach('/path/to/file');  
      }

Wenn Sie eine Datei an eine Nachricht anhängen, können Sie 数组 auch als zweites Argument an die attach-Methode übergeben Geben Sie den Anzeigenamen und/oder MIME an Geben Sie Folgendes ein:

    /**
     * Build the message.
     *
     * @return $this
     */  
   public function build()  
    {      
      return $this->view('emails.orders.shipped')                
          ->attach('/path/to/file', [                        
                                          'as' => 'name.pdf',                       
                                           'mime' => 'application/pdf',       
                                     ]);  
     }

Anhang von der Festplatte hinzufügen

Wenn Sie eine Datei im Dateispeicher gespeichert haben, können Sie sie mit der Methode attachFromStorage an eine E-Mail anhängen In der Mail:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
    return $this->view('email.orders.shipped')             
      ->attachFromStorage('/path/to/file');
 }

Sie können attachFromStorage bei Bedarf verwenden Der zweite und dritte Parameter der Methode geben den Namen des Dateianhangs und andere Optionen an:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){ 
   return $this->view('email.orders.shipped')            
      ->attachFromStorage('/path/to/file', 'name.pdf', [               
          'mime' => 'application/pdf'             
       ]);
    }

Wenn Sie einen anderen Speicherdatenträger als den Standarddatenträger angeben müssen, können Sie die Methode attachFromStorageDisk verwenden:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
    return $this->view('email.orders.shipped')            
       ->attachFromStorageDisk('s3', '/path/to/file');
   }

Rohdatenanhang

attachData Bytedaten können als Anhang verwendet werden. Mit dieser Methode können Sie beispielsweise eine PDF-Datei an eine E-Mail anhängen, die im Speicher generiert, aber nicht auf der Festplatte gespeichert wird. Der erste Parameter der attachData-Methode empfängt Rohbyte-Daten, der zweite Parameter ist der Dateiname und der dritte Parameter akzeptiert ein Array zur Angabe anderer Parameter:

    /**
     * Build the message.
     *
     * @return $this
     */
   public function build()  
     {     
        return $this->view('emails.orders.shipped')                
            ->attachData($this->pdf, 'name.pdf', [                   
                 'mime' => 'application/pdf',                
                ]);  
         }

Inline-Anhänge

Das Einbetten von Inline-Bildern in E-Mails ist jedoch oft umständlich, Laravel Bietet eine einfache Möglichkeit, ein Bild an eine Nachricht anzuhängen und die entsprechende CID zu erhalten. Inline-Bilder können mithilfe der $message-Methode der embed-Variablen in der E-Mail-Vorlage eingebettet werden. Laravel stellt die Variable $message automatisch in allen E-Mail-Vorlagen zur Verfügung, Sie müssen sich keine Gedanken darüber machen, wie Sie sie manuell übergeben:

<body>
    Here is an image:
    <img src="{{ $message->embed($pathToImage) }}">
</body>

{note} $message ist in Textnachrichten nicht verfügbar, da es sich um Textnachrichten handelt Inline-Anhänge können nicht verwendet werden.

Originaldatenanhang einbetten

Wenn Sie bereits über die Originaldatenzeichenfolge verfügen, die Sie in die E-Mail-Vorlage einbetten möchten, können Sie die Methode $message der Variablen embedData verwenden:

<body>
    Here is an image from raw data:
        <img src="{{ $message->embedData($data, $name) }}">
</body>

Passen Sie SwiftMailer an Nachricht

Mailable Mit der Methode withSwiftMessage der Basisklasse können Sie einen Rückruf registrieren, der vor dem Senden der Nachricht aufgerufen wird. Die ursprüngliche SwiftMailer-Nachricht wird als Parameter des Rückrufs verwendet:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
     $this->view('emails.orders.shipped');    
     $this->withSwiftMessage(function ($message) {    
         $message->getHeaders()             
            ->addTextHeader('Custom-Header', 'HeaderValue');   
     });
}

Abschlag Formatierte Mailables-Klasse

Mit Markdown formatierte Mailable-Nachrichten können Sie von vorgefertigten Vorlagen und E-Mail-Benachrichtigungskomponenten in der Mailable-Klasse profitieren. Da Nachrichten in Markdown geschrieben werden, kann Laravel schöne, reaktionsfähige HTML-Vorlagennachrichten rendern und automatisch Textkopien erstellen.

Mailables-Klasse im Markdown-Format generieren

Um ein für die Markdown-Vorlage geeignetes Mailable zu generieren, können Sie den Code verwenden mit --markdown Optionen make:mail Artisan Befehl:

php artisan make:mail OrderShipped --markdown=emails.orders.shipped

Konfigurieren Sie dann das Mailable in seiner Methode build und rufen Sie die Methode markdown anstelle der Methode view auf. Die markdown-Methode akzeptiert einen Markdown-Vorlagennamen und ein optionales Array verfügbarer Namen in der Vorlage:

/**
 * Build the message.
 *
 * @return $this
 */
 public function build(){ 
    return $this->from('example@example.com')            
        ->markdown('emails.orders.shipped');
   }

Schreiben Sie eine Markdown-Nachricht

Markdown Mailable verwendet eine Kombination aus Blade-Komponente und Markdown-Syntax, sodass Sie es bequemer verwenden können Vorgefertigte Laravel-Komponenten zum Erstellen von E-Mail-Nachrichten:

@component('mail::message')
# 订单已发货
Your order has been shipped!
@component('mail::button', ['url' => $url])
View Order
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent

{Tipp} Verwenden Sie beim Schreiben von Markdown-E-Mails keine zusätzlichen Einrückungen. Der Markdown-Parser rendert den eingerückten Inhalt in Codeblöcke.

Schaltflächenkomponente

Die Schaltflächenkomponente rendert einen zentrierten Schaltflächenlink. Diese Komponente akzeptiert zwei Parameter, url und optional color. Die Farboptionen unterstützen primary, success und error. Sie können Ihrer Nachricht so viele Schaltflächenkomponenten hinzufügen, wie Sie möchten:

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

Panel-Komponente

Panel-Komponente rendert einen bestimmten Textblock innerhalb eines Panels, ein Panel mit andere Nachrichten Die Hintergrundfarbe ist etwas anders. Ermöglicht das Zeichnen eines Warntextblocks:

@component('mail::panel')
This is the panel content.
@endcomponent

Tabellenkomponente

Mit der Tabellenkomponente können Sie Markdown-Tabellen in HTML-Tabellen konvertieren. Diese Komponente akzeptiert eine Markdown-Tabelle als Inhalt. Die Spaltenausrichtung unterstützt die standardmäßige Markdown-Tabellenausrichtungssyntax:

@component('mail::table')
| Laravel       | Table         | Example  |
| ------------- |:-------------:| --------:|
| Col 2 is      | Centered      |       |
| Col 3 is      | Right-Aligned |       |
@endcomponent

Benutzerdefinierte Komponenten

Sie können alle Markdown-E-Mail-Komponenten in Ihre eigene Anwendung exportieren und sie als Vorlagen für benutzerdefinierte Komponenten verwenden. Um diese Komponenten zu exportieren, verwenden Sie den Befehl laravel-mail Artisan mit dem Asset-Tag vendor:publish:

php artisan vendor:publish --tag=laravel-mail

Dieser Befehl exportiert die Markdown-Mail-Komponenten in das Verzeichnis resources/views/vendor/mail. Das Verzeichnis mail enthält die Unterverzeichnisse html und text, die entsprechende Beschreibungen der verfügbaren Komponenten enthalten. Diese Komponenten können nach Ihren Wünschen angepasst werden.

Benutzerdefiniertes CSS

Nach dem Exportieren der Struktur befindet sich eine resources/views/vendor/mail/html/themes-Datei im Verzeichnis default.css. CSS kann aus dieser Datei angepasst werden und diese Stile werden automatisch in die HTML-Darstellung der Markdown-E-Mail-Nachricht eingefügt.

{tip} Wenn Sie ein komplett neues Theme für Markdown-Komponenten erstellen möchten, können Sie eine neue CSS-Datei im Verzeichnis html/themes erstellen und die Option mail von theme ändern Konfigurationsdatei.

E-Mail senden

Um eine E-Mail zu senden, verwenden Sie die Mail-Methode von to Fassade. to Die Methode akzeptiert eine E-Mail-Adresse, eine Benutzerinstanz oder eine Benutzersammlung. Wenn Sie ein Objekt oder eine Sammlung von Objekten übergeben, verwendet der Mailer beim Festlegen der Empfänger automatisch deren Attribute email und name. Stellen Sie daher sicher, dass diese Attribute für das Objekt verfügbar sind. Sobald die Empfänger angegeben sind, kann eine mailbare Klasseninstanz an die send-Methode übergeben werden:

<?php
    namespace App\Http\Controllers;
    use App\Order;use App\Mail\OrderShipped;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Mail;
    use App\Http\Controllers\Controller;
    class OrderController extends Controller{   
     /**
     * 发送给定的订单。
     *
     * @param  Request  $request
     * @param  int  $orderId
     * @return Response
     */  
       public function ship(Request $request, $orderId)  
         {      
           $order = Order::findOrFail($orderId);        
           // 发送订单...        
           Mail::to($request->user())->send(new OrderShipped($order));  
           }
     }

Beim Senden einer Nachricht können mehr als nur Empfänger angegeben werden. Sie können CC- und BCC-Empfänger auch gleichzeitig durch Kettenaufrufe an „to“, „cc“ und „bcc“ angeben:

Mail::to($request->user()) 
   ->cc($moreUsers)    
   ->bcc($evenMoreUsers)    
   ->send(new OrderShipped($order));

Ein Mailable rendern

Manchmal möchten Sie vielleicht den HTML-Inhalt eines Mailables erfassen, ohne ihn zu senden. Dies kann durch Aufrufen der render-Methode des Mailables erreicht werden. Diese Methode gibt die berechnete Zeichenfolge nach dem Rendern des Mailables zurück:

$invoice = App\Invoice::find(1);
return (new App\Mail\InvoicePaid($invoice))->render();

Preview Mailable in browser

Design mailable Beim Erstellen von Vorlagen Es ist praktisch, Mailables im Browser in der Vorschau anzuzeigen und darzustellen, genau wie Blade-Vorlagen. In diesem Fall können Sie mit Laravel alle Postsendungen direkt bei einer Routensperrung oder -kontrolle zurücksenden. Das zurückgegebene Mailing wird gerendert und im Browser angezeigt, und Sie können schnell eine Vorschau des Designs anzeigen, ohne es an eine echte E-Mail-Adresse senden zu müssen:

Route::get('mailable', function () {
    $invoice = App\Invoice::find(1);    
    return new App\Mail\InvoicePaid($invoice);
  });

Mail-Warteschlange

E-Mail-Nachrichten zur Warteschlange hinzufügen

Da das Senden von E-Mail-Nachrichten die Antwortzeit der Anwendung erheblich verlängern kann, entscheiden sich viele Entwickler dafür, E-Mail-Nachrichten in die Warteschlange zu stellen und sie im Hintergrund zu senden. Laravel macht dies mit seiner integrierten einheitlichen Warteschlangen-API einfach. Um eine E-Mail-Nachricht zur Warteschlange hinzuzufügen, können Sie die Mail-Methode der queue-Fassade verwenden, nachdem Sie den Empfänger der Nachricht angegeben haben:

Mail::to($request->user())  
  ->cc($moreUsers)    
  ->bcc($evenMoreUsers)    
  ->queue(new OrderShipped($order));

Diese Methode verschiebt den Job automatisch in die Warteschlange, sodass die Nachricht angezeigt wird im Hintergrund gesendet. Bevor Sie diese Funktion verwenden, müssen Sie die Warteschlange konfigurieren:

Nachrichtenwarteschlange verzögern

Wenn Sie das Senden von E-Mail-Nachrichten in der Warteschlange verzögern möchten, können Sie later verwenden Verfahren. later Der erste Parameter der Methode gibt an, wann die Nachricht gesendet wird. DateTime Beispiel:

$when = now()->addMinutes(10);Mail::to($request->user())  
              ->cc($moreUsers)    
              ->bcc($evenMoreUsers)    
              ->later($when, new OrderShipped($order));

Push in die angegebene Warteschlange

Due to All mailable Klassen, die mit dem Befehl make:mail generiert wurden, verwenden das Merkmal IlluminateBusQueueable, sodass Sie es auf jeder mailbaren Klasseninstanz aufrufen können onQueue und onConnection Methoden zum Angeben des Verbindungs- und Warteschlangennamens der Nachricht:

$message = (new OrderShipped($order))        
        ->onConnection('sqs')                
        ->onQueue('emails');Mail::to($request->user())    
        ->cc($moreUsers)    
        ->bcc($evenMoreUsers)    
        ->queue($message);

Standardwarteschlange

Wenn eine mailbare Klasse in die Warteschlange gestellt werden soll, ist dies der Fall kann den ShouldQueue-Vertrag für diese Klasse implementieren. Auf diese Weise wird das Mailable serialisiert, auch wenn Sie beim Senden die Methode send aufrufen:

use Illuminate\Contracts\Queue\ShouldQueue;
class OrderShipped extends Mailable implements ShouldQueue{ 
   //
 }

Localized Mailable

Laravel ermöglicht Ihnen das Senden mit einem anderen Gebietsschema als der aktuellen Sprache Mailbar, behält das Gebietsschema bei, auch wenn es zur Warteschlange hinzugefügt wird.

Um dies zu erreichen, stellt die Mail-Fassade die locale-Methode zum Festlegen der Zielsprache bereit. Anwendungen, die Mailables formatieren, wechseln zu diesem Gebietsschema und kehren nach Abschluss der Formatierung zum ursprünglichen Gebietsschema zurück:

Mail::to($request->user())->locale('es')->send( 
   new OrderShipped($order)
  );

Bevorzugtes Gebietsschema des Benutzers

Ja, die Anwendung speichert das Gebietsschema jedes Benutzers bevorzugtes Gebietsschema. Durch die Implementierung des HasLocalePreference-Vertrags auf einem oder mehreren Modellen können Sie Laravel anweisen, beim Senden von E-Mails ein vorgespeichertes Gebietsschema zu verwenden: Das bevorzugte Gebietsschema wird automatisch verwendet. Daher ist es nicht erforderlich, die

-Methode aufzurufen, wenn Sie diese Schnittstelle verwenden:

use Illuminate\Contracts\Translation\HasLocalePreference;
class User extends Model implements HasLocalePreference{    
     /**
     * 获取用户首选区域设置。
     *
     * @return string
     */   
  public function preferredLocale() 
     {     
        return $this->locale;  
       }
    }
locale

Mail & Local Development

in Wenn Sie eine Anwendung entwickeln, die E-Mails sendet, möchten Sie möglicherweise keine E-Mails an eine Live-E-Mail-Adresse senden. Laravel bietet mehrere Möglichkeiten, das echte Senden während der lokalen Entwicklung zu „deaktivieren“.

Protokolltreiber

log Der E-Mail-Treiber schreibt E-Mail-Nachrichten in das Protokoll, anstatt E-Mails zu senden, bereit zur Anzeige. Weitere Informationen zur Konfiguration der Anwendungsumgebung finden Sie in der Konfigurationsdokumentation.

Gemeinsame Konfiguration

Laravel bietet zusätzliche Lösungen zur Angabe gemeinsamer Empfänger für über Frames versendete E-Mails. Bei dieser Methode werden von der Anwendung generierte E-Mails an die angegebene Adresse gesendet und ersetzen die beim Senden der Nachricht angegebene tatsächliche Adresse. Dies kann mit Hilfe der config/mail.php-Option der to-Konfigurationsdatei erreicht werden:

Mail::to($request->user())->send(new OrderShipped($order));

Mailtrap

Abschließend können Sie die verwenden Mailtrap-Dienst und smtp Fahrer sendet E-Mail-Nachricht an Ein „virtuelles“ Postfach, sodass E-Mail-Nachrichten in einem echten E-Mail-Client angezeigt werden können. Der Vorteil dieser Methode besteht darin, dass Sie die endgültige E-Mail tatsächlich im Nachrichtenviewer von Mailtrap anzeigen können.

Ereignisse

Laravel löst beim Versenden von E-Mail-Nachrichten zwei Ereignisse aus. Das MessageSending-Ereignis wird ausgelöst, bevor die Nachricht gesendet wird, und das MessageSent-Ereignis wird ausgelöst, nachdem die Nachricht gesendet wurde. Denken Sie daran, dass diese Ereignisse ausgelöst werden, wenn die E-Mail gesendet wird und nicht, wenn sie in der Warteschlange steht. Ein Zuhörer für diese Veranstaltung kann unter EventServiceProvider registriert werden:

'to' => [ 
   'address' => 'example@example.com',    
   'name' => 'Example'
  ],
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.