So senden Sie E-Mails in Laravel

In diesem Artikel werden wir die Mail-API im Laravel-Webframework untersuchen. Laravel nutzt die beliebte SwiftMailer-Bibliothek, die einfach zu bedienen ist und mit einer Vielzahl von E-Mail-Treibern zur Auswahl steht. In den letzten Phasen des Artikels werden wir die in der ersten Hälfte des Artikels besprochenen Konzepte eingehend demonstrieren.

Einrichten der Voraussetzungen

Laravel implementiert einen Wrapper auf der SwiftMailer-Bibliothek, der die Verwaltung und Verwaltung von E-Mails sehr einfach macht. Sie finden die Standard-Maileinstellungen unter config / mail.php.

 env ('MAIL_DRIVER', 'sendmail'), / * | -------------------------------- -------------------------------------- SMTP-Hostadresse | ---------------------------------------------- ---------------------------- | | Hier können Sie die Hostadresse des von Ihrem | verwendeten SMTP-Servers angeben Anwendungen. Es wird eine Standardoption bereitgestellt, die mit | kompatibel ist der Mailgun-Mail-Dienst, der zuverlässige Lieferungen gewährleistet. | * / 'host' => env ('MAIL_HOST', 'smtp.mailgun.org'), / * | ------------------------- --------------------------------------------- | SMTP-Hostanschluss | ---------------------------------------------- ---------------------------- | | Dies ist der SMTP-Port, über den Ihre Anwendung E-Mails an | sendet Benutzer der Anwendung. Wie der Host haben wir diesen Wert auf | gesetzt Bleiben Sie standardmäßig mit der Mailgun-E-Mail-Anwendung kompatibel. | * / 'port' => env ('MAIL_PORT', 587), / * | --------------------------- --------------------------------------- | Globale Absenderadresse | ---------------------------------------- ------------------------------ | | Möglicherweise möchten Sie, dass alle von Ihrer Anwendung gesendeten E-Mails von | gesendet werden die gleiche Adresse Hier können Sie einen Namen und eine Adresse angeben, die | sind wird global für alle E-Mails verwendet, die von Ihrer Anwendung gesendet werden. | * / 'from' => ['address' => env ('MAIL_FROM_ADDRESS', '[email protected]'), 'name' => env ('MAIL_FROM_NAME', 'Example'),], / * | - -------------------------------------------------- ----------------------- | E-Mail-Verschlüsselungsprotokoll | ---------------------------------------- ------------------------------ | | Hier können Sie das Verschlüsselungsprotokoll angeben, das bei | verwendet werden soll Die Anwendung sendet E-Mail-Nachrichten. Eine sinnvolle Voreinstellung mit dem | Das Transportschicht-Sicherheitsprotokoll sollte eine große Sicherheit bieten. | * / 'encrypt' => env ('MAIL_ENCRYPTION', 'tls'), / * | ------------------------- ----------------------------------------- | SMTP-Server-Benutzername | ------------------------------------------ ---------------------------- | | Wenn für Ihren SMTP-Server ein Benutzername zur Authentifizierung erforderlich ist, sollten Sie | Stellen Sie es hier. Dies wird verwendet, um sich bei Ihrem Server bei | zu authentifizieren Verbindung. Sie können auch den "Passwort" -Wert unter diesem Wert festlegen. | * / 'username' => env ('MAIL_USERNAME'), 'password' => env ('MAIL_PASSWORD'), / * | --------------------- -------------------------------------------------- --- | Sendmail-Systempfad | ------------------------------------------ ---------------------------- | | Wenn Sie den "sendmail" -Treiber zum Senden von E-Mails verwenden, müssen wir | wissen der Pfad zu dem Ort, an dem Sendmail auf diesem Server lebt. Ein Standardpfad hat | wurde hier bereitgestellt, was auf den meisten Ihrer Systeme gut funktioniert. | * / 'sendmail' => '/ usr / sbin / sendmail -bs', / * | ----------------------------- ----------------------------------------- | Mail-Einstellungen markieren | ------------------------------------------ ---------------------------- | | Wenn Sie das Markdown-basierte E-Mail-Rendering verwenden, können Sie Ihr | konfigurieren Hier sind Themen- und Komponentenpfade, mit denen Sie das Design anpassen können der E-Mails. Oder halten Sie sich einfach an die Laravel-Standardeinstellungen! | * / 'markdown' => ['theme' => 'default', 'path' => [resource_path ('views / vendor / mail')],],];]; 

Beim Versenden von E-Mails unterstützt Laravel verschiedene Treiber zur Auswahl. Wie Sie sehen, der Standard MAIL_DRIVER ist eingestellt auf smtp.

Wenn Sie das benutzen werden smtp Wenn Sie den Treiber zum Versenden von E-Mails senden, müssen Sie auch andere verwandte Einstellungen wie MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, und MAIL_PASSWORD.

Auf der anderen Seite, wenn Sie die verwenden möchten sendmail Treiber, dann möchten Sie sicherstellen, dass die sendmail Systempfad wird auf den korrekten Wert in gesetzt config / mail.php Datei.

Sie können auch einstellen von Adresse, die beim Versenden von E-Mails unter verwendet wird von Schlüssel. Und wenn Sie Markdown-basiertes E-Mail-Rendering verwenden möchten, können Sie diese Einstellungen unter festlegen Markdown Schlüssel.

Das Tolle an der Spitze ist, dass Sie auch E-Mail-Dienstanbieter von Drittanbietern wie Mailgun, Mandrill, SES und SparkPost verwenden können. Wenn Sie einen dieser Dienste verwenden, müssen Sie sicherstellen, dass Sie die entsprechenden Einstellungen in festlegen config / services.php Datei.

Das war also eine grundlegende Einführung in die Einstellungen der Mail-API in Laravel. Ab dem nächsten Abschnitt gehen wir ein benutzerdefiniertes Beispiel durch, das Ihnen zeigt, wie Sie E-Mails senden.

Erstellen Sie die Mailable-Klasse

In diesem Abschnitt erstellen wir die E-Mail-Klasse, die zum Senden von E-Mails verwendet wird. Die mailable-Klasse ist für das Senden von E-Mails mit einem Mailer verantwortlich, der in der konfiguriert ist config / mail.php Datei. In der Tat bietet Laravel bereits einen handwerklichen Befehl, mit dem wir eine Basisvorlage erstellen können.

PHP Handwerker machen: Mail DemoEmail

Das sollte eine leere E-Mail-Vorlage unter erstellen app / Mail / DemoEmail.php, wie im folgenden Ausschnitt gezeigt.

view ('view.name'); 

Lassen Sie uns den Inhalt dieser Datei durch Folgendes ersetzen.

Demo = $ Demo;  / ** * Erstellen Sie die Nachricht. * * @return $ this * / public function build () return $ this-> from ([email protected] ') -> view (' mails.demo ') -> text (' mails.demo_plain ') - > mit (['testVarOne' => '1', 'testVarTwo' => '2',]) -> attach (public_path ('/ images'). '/ demo.jpg', ['as' => ' demo.jpg ',' mime '=>' image / jpeg ',]); 

Es gibt zwei wichtige Methoden, die die mailable-Klasse im Allgemeinen implementiert-__konstruieren und bauen. Das __konstruieren Diese Methode wird zum Initialisieren von Objekten verwendet, die in der E-Mail-Vorlage verwendet werden sollen. Auf der anderen Seite die bauen Diese Methode wird verwendet, um weitere E-Mail-spezifische Werte wie from, Ansichtsvorlage, Anhänge und ähnliches zu initialisieren.

In unserem Fall haben wir das bestanden $ Demo Objekt als Konstruktorargument, und es wird dem zugewiesen Demo öffentliches Eigentum.

In dem bauen Methode haben wir eine E-Mail-spezifische Konfiguration initialisiert.

  • Das von wird verwendet, um eine E-Mail-Adresse festzulegen, die als Absenderadresse verwendet wird.
  • Verwendung der Aussicht Auf diese Weise können Sie die E-Mail-Vorlage festlegen, die beim Senden einer E-Mail mit dieser E-Mail-Adresse verwendet wird. In unserem Fall haben wir es auf gesetzt mails.demo, und es bedeutet, dass Sie eine Ansichtsvorlagendatei unter erstellen müssen resources / views / mails / demo.blade.php.
  • Als nächstes die Text Diese Methode wird zum Einrichten der Nur-Text-Version einer E-Mail-Vorlage verwendet.
  • Wie wir gerade besprochen haben, das __konstruieren Diese Methode wird zum Einrichten von Objekten verwendet, die in der E-Mail-Vorlage verwendet werden. Sie können auch die mit Methode, mit der Sie die Ansichtsdaten einer Nachricht festlegen können.
  • Als nächstes haben wir die verwendet anfügen Methode zum Anhängen eines Bildes mit einer Nachricht.

Natürlich müssen wir E-Mail-Vorlagen erstellen, die wir beim Senden von E-Mails verwenden sollen. Fahren Sie fort und erstellen Sie eine Datei resources / views / mails / demo.blade.php wie im folgenden Ausschnitt gezeigt.

Hallo $ demo-> Empfänger, 

Dies ist eine Demo-E-Mail zu Testzwecken! Es ist auch die HTML-Version.

Demo-Objektwerte:

Demo eins: $ demo-> demo_one

Demo zwei: $ demo-> demo_two

Werte, die von With-Methode übergeben werden:

testVarOne: $ testVarOne

testVarTwo: $ testVarTwo

Danke dir,
$ demo-> sender

Erstellen wir auch die Nur-Text-Version dieser Datei unter resources / views / mails / demo_plain.blade.php.

Hallo $ demo-> receiver, Dies ist eine Demo-E-Mail zu Testzwecken! Es ist auch die HTML-Version. Werte für Demo-Objekte: Demo One: $ demo-> demo_one Demo Two: $ demo-> demo_two Werte, die von With-Methode: testVarOne: $ testVarOne testVarOne: $ testVarOne übergeben werden Vielen Dank $ demo-> sender

Das war also die versandfähige Klasse, die wir zur Verfügung haben, und wir haben dies noch nicht getan, da wir die Mail Fassade, um tatsächlich Mails zu verschicken. Im nächsten Abschnitt erfahren Sie, wie Sie das verwenden können Mail Fassade zum Senden von E-Mails mit der DemoEmail Versandfähige Klasse, die gerade in diesem Abschnitt erstellt wurde.

Einpacken

In diesem Abschnitt erstellen wir ein Beispiel, um zu zeigen, wie Sie das verwenden können Versandfähig Klasse, die im letzten Abschnitt erstellt wurde.

Erstellen Sie eine Controller-Datei unter app / Http / Controller / MailController.php mit folgenden Inhalten.

demo_one = 'Demo One Value'; $ objDemo-> demo_two = 'Demo Two Value'; $ objDemo-> sender = 'SenderUserName'; $ objDemo-> receiver = 'ReceiverUserName'; Mail :: an ("[email protected]") -> send (neue DemoEmail ($ objDemo)); 

Es ist wichtig zu wissen, dass wir das aufgenommen haben Illuminate \ Support \ Facades \ Mail Fassade, die zum Senden einer E-Mail verwendet wird. In dem senden Methode ist die folgende Anweisung für das Senden einer E-Mail durch Initialisieren von verantwortlich App \ Mail \ DemoEmail In erster Linie versandfertig.

Mail :: an ("[email protected]") -> send (neue DemoEmail ($ objDemo));

Das zu Methode der Illuminate \ Support \ Facades \ Mail Fassade gibt eine Instanz von zurück \ Illuminate \ Mail \ PendingMail Klasse, die bereits einen entsprechenden Mailer enthält, der in der konfiguriert ist config / mail.php Datei.

Und zum Schluss benutzen wir die senden Methode der \ Illuminate \ Mail \ PendingMail Klasse, die eine tatsächliche E-Mail sendet.

Um es zu testen, fügen wir eine verknüpfte Route in der hinzu routen / web.php Datei.

// E-Mail-bezogene Routen Route :: get ('mail / send', 'MailController @ send');

Wenn dies der Fall ist, können Sie die URL http://your-laravel-site.com/mail/send ausführen, um zu sehen, ob sie wie erwartet funktioniert.

Wenn Sie dagegen Ihre E-Mail-Vorlagen schnell testen möchten, ohne tatsächliche E-Mails zu senden, gibt es in Laravel eine Einrichtung, mit der Sie alle ausgehenden E-Mails protokollieren können.

Um dies zu erreichen, müssen Sie den Wert von einstellen MAIL_DRIVER zu Log in dem config / mail.php Datei. Als Nächstes können Sie die oben genannte URL ausführen und die Protokolldatei überprüfen, um zu prüfen, ob die E-Mail-Vorlage dort protokolliert wurde.

Wenn alles in Ordnung ist, sollten Sie eine E-Mail sehen, die beim angemeldet ist storage / logs / laravel.log Datei.

Das ist so ziemlich alles, was die Mail-Funktion in Laravel betrifft, und das schließt auch diesen Artikel.

Fazit

Heute haben wir die in Laravel integrierte Mail-API durchlaufen, die auch eine Vielzahl von Treibern unterstützt.

Ausgehend von grundlegenden Konzepten haben wir die mailable-Klasse implementiert, die in Laravel im weiteren Verlauf ein wesentliches Element der Mail-API ist. Am Ende testeten wir auch die Mail-Klasse, indem wir einen benutzerdefinierten Controller erstellten, um zu sehen, ob er tatsächlich funktioniert.

Wenn Sie gerade erst mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Reihe von Möglichkeiten, die Sie in Envato Market lernen können.

Ich würde gerne Ihr Feedback in Form von Anfragen und Kommentaren über den untenstehenden Feed erfahren!