Hoe e-mails verzenden in Laravel

In dit artikel gaan we de Mail-API verkennen in het Laravel-webraamwerk. Laravel maakt gebruik van de populaire SwiftMailer-bibliotheek, die gemakkelijk te gebruiken is en wordt geleverd met een verscheidenheid aan e-mailbestuurders om uit te kiezen. In de laatste fasen van het artikel zullen we een diepgaande demonstratie van de concepten besproken in de eerste helft van het artikel doornemen.

De vereisten instellen

Laravel implementeert een wrapper bovenop de SwiftMailer-bibliotheek waardoor e-mailbeheer heel eenvoudig te configureren en tegelijkertijd te gebruiken is. U kunt de standaard e-mailinstellingen vinden op config / mail.php.

 env ('MAIL_DRIVER', 'sendmail'), / * | ------------------------------------ -------------------------------------- | SMTP-hostadres | ---------------------------------------------- ---------------------------- | | Hier kunt u het hostadres opgeven van de SMTP-server die wordt gebruikt door uw | toepassingen. Er is een standaardoptie die compatibel is met | de mailgun-mailservice die betrouwbare leveringen zal bieden. | * / 'host' => env ('MAIL_HOST', 'smtp.mailgun.org'), / * | ------------------------- ------------------------------------------------- | SMTP Host Port | ---------------------------------------------- ---------------------------- | | Dit is de SMTP-poort die door uw toepassing wordt gebruikt om e-mails aan | te bezorgen gebruikers van de applicatie. Net als de host hebben we deze waarde ingesteld op | compatibel blijven met de Mailgun e-mailtoepassing. | * / 'poort' => env ('MAIL_PORT', 587), / * | ------------------------------- ------------------------------------------- | Globaal "Van" adres | -------------------------------------------- ------------------------------ | | Mogelijk wilt u dat alle e-mails verzonden door uw toepassing worden verzonden vanaf | hetzelfde adres. Hier kunt u een naam en adres opgeven die | is globaal gebruikt voor alle e-mails die door uw toepassing worden verzonden. | * / 'from' => ['address' => env ('MAIL_FROM_ADDRESS', '[email protected]'), 'name' => env ('MAIL_FROM_NAME', 'Example'),], / * | - -------------------------------------------------- ----------------------- | E-mail versleutelingsprotocol | -------------------------------------------- ------------------------------ | | Hier kunt u het coderingsprotocol opgeven dat moet worden gebruikt wanneer | de applicatie verstuurt e-mailberichten. Een verstandige standaard met behulp van de | transportlaagbeveiligingsprotocol zou een grote veiligheid moeten bieden. | * / 'codering' => env ('MAIL_ENCRYPTION', 'tls'), / * | ----------------------------- --------------------------------------------- | SMTP Server-gebruikersnaam | ---------------------------------------------- ---------------------------- | | Als uw SMTP-server een gebruikersnaam vereist voor verificatie, moet u | stel het hier in. Dit zal wennen om te authenticeren met uw server op | verbinding. U kunt ook de waarde "wachtwoord" lager instellen dan deze. | * / 'gebruikersnaam' => env ('MAIL_USERNAME'), 'wachtwoord' => env ('MAIL_PASSWORD'), / * | --------------------- -------------------------------------------------- --- | Sendmail-systeempad | ---------------------------------------------- ---------------------------- | | Wanneer u de "sendmail" -driver gebruikt om e-mails te verzenden, moeten we weten | het pad naar waar Sendmail woont op deze server. Een standaardpad heeft | is hier verstrekt, wat goed werkt op de meeste van uw systemen. | * / 'sendmail' => '/ usr / sbin / sendmail -bs', / * | ----------------------------- --------------------------------------------- | Markdown Mail Instellingen | ---------------------------------------------- ---------------------------- | | Als u op Markdown gebaseerde e-mailweergave gebruikt, kunt u uw | thema- en componentpaden hier, zodat u het ontwerp kunt aanpassen | van de e-mails. Of u kunt gewoon vasthouden aan de Laravel-standaardwaarden! | * / 'markdown' => ['theme' => 'default', 'paths' => [resource_path ('views / vendor / mail'),],],]; 

Als het gaat om het verzenden van mails, ondersteunt Laravel verschillende stuurprogramma's om uit te kiezen. Zoals je kunt zien, is de standaard MAIL_DRIVER ingesteld op smtp.

Als je de smtp bestuurder om mails te verzenden, dan moet je ook andere gerelateerde instellingen instellen zoals MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, en MAIL_PASSWORD.

Aan de andere kant, als u de Verzend mail bestuurder, dan wilt u ervoor zorgen dat de Verzend mail systeempad is ingesteld op de juiste waarde in de config / mail.php het dossier.

U kunt ook de van adres dat zal worden gebruikt tijdens het verzenden van e-mails onder de van sleutel. En ten slotte, als u Markdown-gebaseerde e-mailweergave wilt gebruiken, kunt u die instellingen onder de markdown sleutel.

De kers op de taart is dat je ook e-mailservices van derden kunt gebruiken, zoals Mailgun, Mandrill, SES en SparkPost. Als u een van die services gebruikt, moet u ervoor zorgen dat u de overeenkomstige instellingen in de config / services.php het dossier.

Dus dat was een eenvoudige inleiding tot de mail API-gerelateerde instellingen in Laravel. Vanaf het volgende gedeelte zullen we een aangepast voorbeeld doornemen dat u laat zien hoe u e-mails kunt verzenden.

Maak de Mailable Class

In deze sectie maken we de mailbare klasse, die zal worden gebruikt om e-mails te verzenden. De mailbare klasse is verantwoordelijk voor het verzenden van e-mails met behulp van een mailer die is geconfigureerd in de config / mail.php het dossier. Laravel biedt al een ambachtelijk commando waarmee we een basissjabloon kunnen maken.

php artisan make: mail DemoEmail

Dat zou een lege e-mailsjabloon moeten creëren bij app / Mail / DemoEmail.php, zoals getoond in het volgende fragment.

view (view.name); 

Laten we de inhoud van dat bestand vervangen door het volgende.

demo = $ demo;  / ** * Bouw het bericht op. * * @return $ this * / public function build () return $ this-> from ('[email protected] ') -> view (' mails.demo ') -> text (' mails.demo_plain ') - > with (['testVarOne' => '1', 'testVarTwo' => '2',]) -> attach (public_path ('/ images'). '/ demo.jpg', ['as' => ' demo.jpg ',' mime '=>' image / jpeg ',]); 

Er zijn twee belangrijke methoden die de mailbare klasse doorgaans implementeert-__construct en bouwen. De __construct methode wordt gebruikt om objecten te initialiseren die u zou moeten gebruiken in de e-mailsjabloon. Aan de andere kant, de bouwen methode wordt gebruikt om meer e-mailspecifieke waarden zoals van, weergavesjabloon, bijlagen en dergelijke te initialiseren.

In ons geval hebben we de $ demo object als constructorargument, en het is toegewezen aan de demonstratie publiek eigendom.

In de bouwen methode hebben we een e-mailspecifieke configuratie geïnitialiseerd.

  • De van wordt gebruikt om een ​​e-mailadres in te stellen dat als een van het adres wordt gebruikt.
  • De ... gebruiken uitzicht methode, kunt u de e-mailsjabloon instellen die wordt gebruikt tijdens het verzenden van een e-mail met deze mail. In ons geval hebben we dit ingesteld mails.demo, en dit betekent dat u een beeldsjabloonbestand moet maken op resources / views / mails / demo.blade.php.
  • Vervolgens de tekst methode wordt gebruikt om de platte tekstversie van een e-mailsjabloon in te stellen.
  • Zoals we zojuist hebben besproken, de __construct methode wordt gebruikt om objecten in te stellen die in de e-mailsjabloon zullen worden gebruikt, u kunt ook de met methode waarmee u de weergavegegevens van een bericht kunt instellen.
  • Vervolgens hebben we de hechten methode om een ​​afbeelding bij een bericht bij te voegen.

Natuurlijk moeten we e-mailsjablonen maken die we moeten gebruiken bij het verzenden van e-mails. Ga je gang en maak een bestand aan resources / views / mails / demo.blade.php zoals getoond in het volgende fragment.

Hallo $ demo-> ontvanger, 

Dit is een demo-e-mail voor testdoeleinden! Het is ook de HTML-versie.

Demo-objectwaarden:

Demo One: $ demo-> demo_one

Demo Two: $ demo-> demo_two

Waarden doorgegeven Met methode:

testVarOne: $ testVarOne

testVarTwo: $ testVarTwo

Dank je,
$ demo-> afzender

Laten we ook de platte tekstversie van dat bestand maken op resources / views / mails / demo_plain.blade.php.

Hallo $ demo-> ontvanger, dit is een demomail voor testdoeleinden! Het is ook de HTML-versie. Demo-objectwaarden: Demo One: $ demo-> demo_one Demo Two: $ demo-> demo_two Waarden voorbijgegaan Met methode: testVarOne: $ testVarOne testVarOne: $ testVarOne Bedankt, $ demo-> afzender

Dus dat was de mailbare klasse tot uw beschikking, en we hebben het nog niet gedaan, want we moeten de Mail gevel om daadwerkelijk mails te verzenden. In het volgende gedeelte zullen we onderzoeken hoe u de kunt gebruiken Mail Gevel om e-mails te verzenden met behulp van de DemoEmail Mailable-klasse die zojuist in deze sectie is gemaakt.

Afsluiten

In deze sectie maken we een voorbeeld om te laten zien hoe u de kunt gebruiken mailable klasse die in de laatste sectie is gemaakt.

Laten we een controllerbestand maken op app / Http / Controllers / MailController.php met de volgende inhoud.

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

Het is belangrijk op te merken dat we de Verlichten \ Support \ Gevels \ Mail Gevel die zal worden gebruikt om een ​​e-mail te sturen. In de sturen methode, de volgende verklaring is verantwoordelijk voor het verzenden van een e-mail door de App \ Mail \ DemoEmail Mailable in de eerste plaats.

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

De naar methode van de Verlichten \ Support \ Gevels \ Mail Gevel retourneert een exemplaar van de \ Illuminate \ Mail \ PendingMail klasse, die al een geschikte mailer bevat geconfigureerd in de config / mail.php het dossier.

En tot slot gebruiken we de sturen methode van de \ Illuminate \ Mail \ PendingMail klas die een echte e-mail verzendt.

Om het te testen, laten we een geassocieerde route toevoegen in de routes / web.php het dossier.

// Email gerelateerde routes Route :: get ('mail / send', 'MailController @ send');

En met dat op zijn plaats, kun je de http://your-laravel-site.com/mail/send URL gebruiken om te zien of het werkt zoals verwacht.

Aan de andere kant, als u uw e-mailsjablonen snel wilt testen zonder echte e-mails te verzenden, is er een bepaling in Laravel waarmee u alle uitgaande e-mails kunt loggen.

Om dat te bereiken, moet u de waarde van instellen MAIL_DRIVER naar logboek in de config / mail.php het dossier. Vervolgens kunt u de bovengenoemde URL uitvoeren en het logbestand controleren om te controleren of de e-mailsjabloon daar is vastgelegd.

Als alles goed gaat, ziet u een e-mail die wordt geregistreerd bij de opslag / logs / laravel.log het dossier.

Dat is voor zover het de e-mailfunctie betreft in Laravel en dat besluit ook dit artikel.

Conclusie

Vandaag hebben we de mail-API doorgenomen die in Laravel is ingebouwd en deze ondersteunt ook verschillende stuurprogramma's.

Beginnend met basisbegrippen hebben we de mailbare klasse geïmplementeerd die een essentieel onderdeel is van de mail-API in Laravel terwijl we verder gingen. Aan het eind hebben we ook de mailbare klasse getest door een aangepaste controller te maken om te zien of deze echt werkt.

Als je net bent begonnen met Laravel of je kennis, site of applicatie met uitbreidingen wilt uitbreiden, hebben we een aantal dingen die je kunt bestuderen in Envato Market.

Ik zou graag uw feedback willen weten in de vorm van vragen en opmerkingen met behulp van de onderstaande feed!