Cum să trimiteți e-mailuri în Laravel

În acest articol, vom explora API-ul Mail în cadrul web Laravel. Laravel profită de biblioteca populară SwiftMailer, care este ușor de utilizat și vine cu o varietate de drivere de e-mail de a alege de la. În ultimele etape ale acestui articol, vom trece printr-o demonstrație aprofundată a conceptelor discutate în prima jumătate a articolului.

Configurarea condițiilor prealabile

Laravel implementează o broșură în partea superioară a bibliotecii SwiftMailer, care face gestionarea e-mail-urilor foarte ușor de configurat și de utilizat în același timp. Puteți găsi setările de e-mail implicite la config / mail.php.

 env ('MAIL_DRIVER', 'sendmail'), / * | ------------------------------------ -------------------------------------- Adresa gazdă SMTP | ---------------------------------------------- ---------------------------- | | Aici puteți furniza adresa gazdă a serverului SMTP folosit de dvs. | aplicații. Este furnizată o opțiune implicită care este compatibilă cu | serviciul de poștă Mailgun, care va furniza livrări fiabile. | * / 'gazdă' => env ('MAIL_HOST', 'smtp.mailgun.org'), / * | ------------------------- ------------------------------------------------- | Portul gazdă SMTP | ---------------------------------------------- ---------------------------- | | Acesta este portul SMTP folosit de aplicația dvs. pentru a trimite e-mailuri către | utilizatorii aplicației. Ca și gazda am stabilit această valoare pentru | rămâneți compatibil cu aplicația de poștă electronică Mailgun în mod implicit. | * / 'port' => env ('MAIL_PORT', 587), / * | ------------------------------- ------------------------------------------- Global "De la" Adresa | -------------------------------------------- ------------------------------ | Puteți dori ca toate e-mailurile trimise de aplicația dvs. să fie trimise de la | aceeași adresă. Aici puteți specifica un nume și o adresă care este | utilizat la nivel global pentru toate e-mailurile trimise de aplicația dvs. | * / 'din' => ['adresa' => env ('MAIL_FROM_ADDRESS', '[email protected]'), 'name' => env ('MAIL_FROM_NAME', ' -------------------------------------------------- ----------------------- E-mail Protocol de criptare | ---------------------------------------------- ------------------------------ | Aici puteți specifica protocolul de criptare care trebuie utilizat atunci când | aplicația trimite mesaje e-mail. O implicită sensibilă folosind transport protocol de securitate strat ar trebui să ofere o mare de securitate. | * / 'criptare' => env ('MAIL_ENCRYPTION', 'tls'), / * | ----------------------------- --------------------------------------------- Numele SMTP Server | ---------------------------------------------- ---------------------------- | | Dacă serverul dvs. SMTP necesită un nume de utilizator pentru autentificare, trebuie să | Uite aici. Acesta va fi obișnuit să se autentifice cu serverul dvs. pe | conexiune. De asemenea, puteți seta valoarea "parolă" sub această valoare. | * / 'username' => env ('MAIL_USERNAME'), 'parola' => env ('MAIL_PASSWORD'), / * | --------------------- -------------------------------------------------- --- | Sendmail Calea sistemului | ---------------------------------------------- ---------------------------- | | Când folosiți driverul "sendmail" pentru a trimite e-mailuri, va trebui să știm | calea spre locul unde trimite Sendmail pe acest server. O cale implicită are | au fost oferite aici, lucru care va funcționa bine pe majoritatea sistemelor dvs. | * / 'sendmail' => '/ usr / sbin / sendmail -bs', / * | ----------------------------- --------------------------------------------- Setările de marcare a marcajelor | ---------------------------------------------- ---------------------------- | | Dacă utilizați redarea prin e-mail bazată pe Markdown, vă puteți configura | temă și căi de componente aici, permițându-vă să personalizați designul. | din e-mailuri. Sau, pur și simplu poți să rămâi cu defectele Laravel! | * / 'markdown' => ['theme' => 'implicit', 'paths' => [path_path ('views / vendor / mail'),],];]; 

Când vine vorba de trimiterea de mesaje, Laravel suportă drivere diferite de a alege de la. După cum puteți vedea, implicit MAIL_DRIVER este setat sa smtp.

Dacă aveți de gând să utilizați smtp șoferul pentru a trimite poștă electronică, trebuie, de asemenea, să setați alte setări similare MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, și MAIL_PASSWORD.

Pe de altă parte, dacă o să utilizați sendmail șofer, atunci doriți să vă asigurați că sendmail calea sistemului este setată la valoarea corectă în config / mail.php fişier.

De asemenea, puteți seta din adresa care va fi utilizată în timp ce trimiteți mesaje de poștă electronică sub din cheie. În sfârșit, dacă doriți să utilizați redarea prin e-mail bazată pe Markdown, puteți seta acele setări sub markdown cheie.

Cireșul din partea de sus este că puteți utiliza și furnizori de servicii de e-mail de la terțe părți, cum ar fi Mailgun, Mandrill, SES și SparkPost. Dacă utilizați unul dintre aceste servicii, trebuie să vă asigurați că setați setările corespunzătoare din config / services.php fişier.

Deci, aceasta a fost o introducere de bază în setările legate de poșta electronică API din Laravel. Din următoarea secțiune, vom trece printr-un exemplu particularizat care vă arată cum să trimiteți e-mailuri.

Creați Clasa Mailable

În această secțiune, vom crea o clasă mailabilă, care va fi utilizată pentru a trimite e-mailuri. Clasa mailable este responsabilă pentru trimiterea de e-mailuri folosind un mailer care este configurat în config / mail.php fişier. De fapt, Laravel oferă deja o comandă artizanală care ne permite să creăm un șablon de bază.

php artisan face: mail DemoEmail

Acest lucru ar trebui să creeze un șablon de e-mail gol la app / Mail / DemoEmail.php, așa cum se arată în fragmentul următor.

vedere ( 'view.name'); 

Să înlocuim conținutul acelui fișier cu următoarele.

demo = $ demo;  / ** * Construiți mesajul. * * @return $ this * / construcție funcții publice () return $ this-> de la ([email protected] ') -> vizualizare (' mails.demo ') -> text (' mails.demo_plain ' > cu ['testVarOne' => '1', 'testVarTwo' => '2',]) -> atașați (public_path ('/ images'). demo.jpg ',' mime '=>' imagine / jpeg ',]); 

Există două metode importante pe care o aplică în general clasa mailabilă-__construi și construi. __construi metoda este folosită pentru a inițializa obiectele pe care ar trebui să le utilizați în șablonul de e-mail. Pe de altă parte, construi metoda este utilizată pentru a inițializa mai multe valori specifice e-mailului, cum ar fi de la, șablon de vizualizare, atașamente și altele similare.

În cazul nostru, am trecut $ demo obiect ca argument constructor, și este atribuit Demo proprietate publică.

În construi , am inițializat o configurație specifică e-mailului.

  • din este folosit pentru a seta o adresă de e-mail care va fi utilizată ca adresă de la o adresă.
  • Utilizarea vedere , puteți seta șablonul de e-mail care va fi utilizat în timp ce trimiteți un e-mail utilizând acest mesaj poștal. În cazul nostru, am stabilit-o mails.demo, și înseamnă că trebuie să creați un fișier de șablon de vizualizare la Resurse / opinii / mailuri / demo.blade.php.
  • Apoi, text metoda este utilizată pentru a configura versiunea textului simplu al unui șablon de e-mail.
  • După cum tocmai am discutat, __construi metoda este utilizată pentru a seta obiecte care vor fi folosite în șablonul de e-mail, de asemenea, puteți utiliza cu care vă permite să setați datele de vizualizare ale unui mesaj.
  • Apoi, am folosit atașa pentru a atașa o imagine cu un mesaj.

Desigur, trebuie să creăm șabloane de e-mail pe care ar trebui să le folosim în timp ce trimitem e-mailuri. Continuați și creați un fișier Resurse / opinii / mailuri / demo.blade.php așa cum se arată în fragmentul următor.

Salut $ demo-> receptor, 

Acesta este un e-mail demo pentru testarea! De asemenea, este versiunea HTML.

Valorile obiectului demo:

Demo One: $ demo-> demo_one

Demo două: $ demo-> demo_two

Valorile trecute prin metoda Cu:

testVarOne: $ testVarOne

testVarTwo: $ testVarTwo

Mulțumesc,
$ demo-> expeditor

De asemenea, să creăm versiunea textului simplu al acelui fișier la Resurse / opinii / mailuri / demo_plain.blade.php.

Bună ziua $ demo-> receiver, Acesta este un e-mail demo pentru scopuri de testare! De asemenea, este versiunea HTML. Valorile obiectului demo: Demo One: demo-demo_one Demo Două: demo-demo_two Valori trecute cu Metoda: testVarOne: testVarOne testVarOne: $ testVarOne Mulțumesc, $ demo-> expeditor

Deci, aceasta a fost clasa mailabilă la dispoziția dumneavoastră și nu am făcut încă așa cum trebuie să folosim Poștă fațadă pentru a trimite de fapt mesaje de poștă electronică. În următoarea secțiune, vom examina modul în care puteți utiliza Poștă Fata pentru a trimite e-mailuri folosind DemoEmail Clasa de învățare care a fost creată în această secțiune.

Înfășurarea în sus

În această secțiune, vom crea un exemplu pentru a demonstra modul în care puteți utiliza Transmisibil prin poştă clasa care a fost creată în ultima secțiune.

Să creăm un fișier de controler la app / HTTP / Controllers / MailController.php cu următorul conținut.

demo_one = 'Demo One Value'; $ objDemo-> demo_two = 'Demo Două Valoare'; $ objDemo-> expeditor = 'SenderUserName'; $ objDemo-> receiver = 'ReceiverUserName'; Mail :: către ("[email protected]") -> trimite (noul DemoEmail ($ objDemo)); 

Este important să rețineți că am inclus Illuminate \ Suport \ Fațade \ Mail Fatada care va fi utilizată pentru a trimite un e-mail. În trimite metoda, următoarea declarație este responsabilă pentru trimiterea unui e-mail prin inițializarea App \ Mail \ DemoEmail Mailable în primul rând.

Mail :: către ("[email protected]") -> trimite (noul DemoEmail ($ objDemo));

la metodă a Illuminate \ Suport \ Fațade \ Mail Fata returnează o instanță a \ Illuminate \ Mail \ PendingMail clasa, care conține deja un mailer adecvat configurat în config / mail.php fişier.

Și în sfârșit, folosim trimite metodă a \ Illuminate \ Mail \ PendingMail clasa care trimite un e-mail real.

Pentru a le testa, să adăugăm o rută asociată în rute / web.php fişier.

// Linii aferente rutelor Route :: get ('mail / send', 'MailController @ send');

Cu ajutorul acestui serviciu, puteți rula adresa http://your-laravel-site.com/mail/send pentru a vedea dacă funcționează conform așteptărilor.

Pe de altă parte, dacă doriți să vă testați șabloanele de e-mail rapid, fără a trimite e-mailuri reale, există o prevedere în Laravel care vă permite să înregistrați toate e-mailurile trimise.

Pentru a realiza acest lucru, trebuie să setați valoarea MAIL_DRIVER la Buturuga în config / mail.php fişier. Apoi, puteți rula adresa URL menționată mai sus și puteți inspecta fișierul jurnal pentru a verifica dacă șablonul de e-mail a fost înregistrat acolo.

Dacă totul merge bine, ar trebui să vedeți un e-mail conectat la depozitare / logs / laravel.log fişier.

Acest lucru este destul de mult în ceea ce privește caracteristica de mail este în cauză în Laravel, și care încheie acest articol, de asemenea.

Concluzie

Astăzi, am trecut prin API-ul de poștă electronică, care vine în construcție în Laravel, și susține, de asemenea, o varietate de drivere, de asemenea.

Începând cu conceptele de bază, am implementat clasa mailabilă care este un element esențial în API-ul de e-mail din Laravel, pe măsură ce ne-am mutat. În final, am testat și clasa mailabilă, creând un controler personalizat pentru a vedea dacă funcționează.

Dacă începeți doar cu Laravel sau doriți să vă extindeți cunoștințele, site-ul sau aplicația cu extensii, avem o varietate de lucruri pe care le puteți studia în piața Envato.

Mi-ar plăcea să știu feedback-ul dvs. sub formă de interogări și comentarii utilizând feedul de mai jos!

Cod