Hur skickar du e-postmeddelanden i Laravel

I den här artikeln kommer vi att utforska Mail API i Laravel webb ramverket. Laravel utnyttjar det populära SwiftMailer-biblioteket, vilket är lätt att använda och levereras med en mängd olika e-postdrivrutiner att välja mellan. I de senare stegen i artikeln går vi igenom en djupgående demonstration av de begrepp som diskuteras i första halvan av artikeln.

Ställa in förutsättningarna

Laravel implementerar ett omslag på toppen av SwiftMailer-biblioteket som gör e-posthanteringen väldigt lätt att konfigurera och använda samtidigt. Du hittar standardinställningarna för e-post på config / mail.php.

 env ('MAIL_DRIVER', 'sendmail'), / * | ------------------------------------ -------------------------------------- | SMTP-värdadress | ---------------------------------------------- ---------------------------- | | Här kan du ange värdadressen för SMTP-servern som används av din | tillämpningar. Ett standardalternativ tillhandahålls som är kompatibelt med | Mailgun-posttjänsten som ger pålitliga leveranser. | * / 'host' => env ('MAIL_HOST', 'smtp.mailgun.org'), / * | ------------------------- ------------------------------------------------- | SMTP-värdporten | ---------------------------------------------- ---------------------------- | | Det här är SMTP-porten som används av din ansökan för att leverera e-post till | användare av ansökan. Liksom värden har vi satt detta värde till | Förbliv kompatibel med Mailgun-e-postprogrammet som standard. | * / 'port' => env ('MAIL_PORT', 587), / * | ------------------------------- ------------------------------------------- | Global "From" Adress | -------------------------------------------- ------------------------------ | | Du kanske vill att alla e-postmeddelanden som skickas av din ansökan ska skickas från | samma adress. Här kan du ange ett namn och en adress som är | används globalt för alla e-postmeddelanden som skickas av din ansökan. | * / 'från' => ['adress' => env ('MAIL_FROM_ADDRESS', '[email protected]'), 'namn' => env ('MAIL_FROM_NAME', 'Exempel'),], / * | - -------------------------------------------------- ----------------------- | E-postkrypteringsprotokoll | -------------------------------------------- ------------------------------ | | Här kan du ange krypteringsprotokollet som ska användas när | programmet skickar e-postmeddelanden. En förnuftig standard med | säkerhetsprotokollet för transportlager bör ge stor säkerhet. | * / 'kryptering' => env ('MAIL_ENCRYPTION', 'tls'), / * | ----------------------------- --------------------------------------------- | Användarnamn för SMTP-servern | ---------------------------------------------- ---------------------------- | | Om din SMTP-server kräver ett användarnamn för autentisering, ska du | sätt det här. Detta blir van vid att autentisera med din server på | förbindelse. Du kan också ange värdet "lösenord" nedanför det här. | * / 'användarnamn' => env ('MAIL_USERNAME'), 'lösenord' => env ('MAIL_PASSWORD'), / * | --------------------- -------------------------------------------------- --- | Sendmail System Path | ---------------------------------------------- ---------------------------- | | När du använder "sendmail" -föraren för att skicka e-post, måste vi veta | Vägen till var Sendmail bor på den här servern. En standardväg har | har tillhandahållits här, vilket kommer att fungera bra på de flesta av dina system. | * / 'sendmail' => '/ usr / sbin / sendmail -bs', / * | ----------------------------- --------------------------------------------- | Markdown Mail Settings | ---------------------------------------------- ---------------------------- | | Om du använder Markdown-baserad e-poståtergivning kan du konfigurera din | temat och komponentvägar här, så att du kan anpassa designen | av e-postmeddelandena. Eller du kan helt enkelt hålla fast vid Laravel-standarderna! | * / 'markdown' => ['theme' => 'default', 'paths' => [resource_path ('views / vendor / mail'),],],]; 

När det gäller att skicka mail, stödjer Laravel olika drivrutiner att välja mellan. Som du kan se är standardvärdet MAIL_DRIVER är satt till smtp.

Om du ska använda smtp föraren att skicka mail så måste du också ställa in andra relaterade inställningar som MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, och MAIL_PASSWORD.

Å andra sidan, om du ska använda skicka brev förare, då vill du se till att skicka brev systemvägen är inställd på rätt värde i config / mail.php fil.

Du kan också ställa in från adress som kommer att användas när du skickar mail under från nyckel. Och till sist, om du vill använda Markdown-baserad e-poståtergivning, kan du ställa in dessa inställningar under prissänkning nyckel-.

Körsbäret på toppen är att du också kan använda tredjepartsleverantörer av e-posttjänster som Mailgun, Mandrill, SES och SparkPost. Om du använder en av dessa tjänster måste du se till att du ställer in motsvarande inställningar i config / services.php fil.

Så det var en grundläggande introduktion till de relaterade inställningarna för post API i Laravel. Från nästa avsnitt går vi igenom ett anpassat exempel som visar hur du skickar e-postmeddelanden.

Skapa Mailable klassen

I det här avsnittet skapar vi den mailable klass som kommer att användas för att skicka e-postmeddelanden. Den mailable klassen ansvarar för att skicka e-postmeddelanden med hjälp av en mailare som är konfigurerad i config / mail.php fil. I själva verket tillhandahåller Laravel redan ett hantverkskommando som tillåter oss att skapa en basmall.

php artisan make: mail DemoEmail

Det borde skapa en tom e-postmall på app / Mail / DemoEmail.php, som visas i följande kod.

vy ( 'view.name'); 

Låt oss ersätta innehållet i den filen med följande.

demo = $ demo;  / ** * Bygg meddelandet. * * @return $ this * / public function build () return $ this-> från (sä[email protected]) -> visa ('mails.demo') -> text ('mails.demo_plain') - > med (['testVarOne' => '1', 'testVarTwo' => '2',]) -> bifoga (public_path ('/ images'). '/ demo.jpg', ['as' => ' demo.jpg ',' mime '=>' image / jpeg ',]); 

Det finns två viktiga metoder som mailable klassen generellt genomför-__konstruera och bygga. De __konstruera Metoden används för att initiera objekt som du ska använda i e-postmallen. Å andra sidan, bygga Metoden används för att initiera mer e-postspecifika värden som från, visa mall, bilagor och liknande.

I vårt fall har vi passerat $ demo objekt som ett konstruktörargument och det tilldelas demo offentlig egendom.

I bygga metod, vi har initierat en e-postspecifik konfiguration.

  • De från används för att ange en e-postadress som ska användas som en adress från.
  • Använda se Metod, du kan ställa in den e-postmall som ska användas när du skickar ett e-postmeddelande med hjälp av denna mailable. I vårt fall har vi satt den till mails.demo, och det betyder att du måste skapa en bildmallfil på resurser / views / mail / demo.blade.php.
  • Därefter text Metoden används för att ställa in textversionen av en e-postmall.
  • Som vi just har diskuterat, __konstruera Metoden används för att ställa in objekt som ska användas i e-postmallen, du kan också använda med metod som låter dig ställa in visningsdata för ett meddelande.
  • Därefter har vi använt fästa Metod för att bifoga en bild med ett meddelande.

Självklart behöver vi skapa e-postmallar som vi ska använda när du skickar e-postmeddelanden. Gå vidare och skapa en fil resurser / views / mail / demo.blade.php som visas i följande kod.

Hej $ demo-> mottagare, 

Detta är en demo-e-post för teständamål! Det är också HTML-versionen.

Demobjektvärden:

Demo One: $ demo-> demo_one

Demo Två: $ demo-> demo_two

Värden som passeras av Med metod:

testVarOne: $ testVarOne

testVarTwo: $ testVarTwo

Tack,
$ demo-> avsändare

Låt oss också skapa ren textversion av den filen på resurser / views / mail / demo_plain.blade.php.

Hej $ demo-> mottagare, Detta är en demo-e-post för teständamål! Det är också HTML-versionen. Demoobjektvärden: Demo One: demo_one Demo Two: $ demo-> demo_two Värden som passerat Med metod: testVarOne: $ testVarOne testVarOne: $ testVarOne Tack, $ demo-> avsändare

Så det var mailable klassen till ditt förfogande, och vi har inte gjort ännu som vi behöver använda Post fasad att faktiskt skicka mail. I det närmaste avsnittet undersöker vi hur du kan använda Post Fasad för att skicka e-post med hjälp av DemoEmail Mailable klass som just skapades i det här avsnittet.

Avslutar

I det här avsnittet skapar vi ett exempel för att visa hur du kan använda mailable klass som skapades i det sista avsnittet.

Låt oss skapa en kontrollerfil på app / HTTP / Controllers / MailController.php med följande innehåll.

demo_one = 'Demo One Value'; $ objDemo-> demo_two = 'Demo Two Value'; $ objDemo-> avsändare = 'SenderUserName'; $ objDemo-> receiver = 'ReceiverUserName'; Mail :: till ("[email protected]") -> skicka (ny DemoEmail ($ objDemo)); 

Det är viktigt att notera att vi har inkluderat Illuminate \ Support \ Fasader \ Mail Fasad som kommer att användas för att skicka ett mail. I skicka metod är följande uttalande ansvarig för att skicka ett mail genom att initialisera App \ Mail \ DemoEmail Mailable i första hand.

Mail :: till ("[email protected]") -> skicka (ny DemoEmail ($ objDemo));

De till metod för Illuminate \ Support \ Fasader \ Mail Fasad returnerar en instans av \ Illuminate \ Mail \ PendingMail klass, som redan innehåller en lämplig mailare konfigurerad i config / mail.php fil.

Och äntligen använder vi skicka metod för \ Illuminate \ Mail \ PendingMail klass som skickar ett verkligt e-postmeddelande.

För att testa det, låt oss lägga till en tillhörande rutt i rutter / web.php fil.

// Email-relaterade rutter Rutt :: get ('mail / send', 'MailController @ send');

Och med det på plats kan du köra http://your-laravel-site.com/mail/send URL för att se om det fungerar som förväntat.

Å andra sidan, om du vill testa dina e-postmallar snabbt, utan att skicka faktiska e-postmeddelanden, finns det en bestämmelse i Laravel som låter dig logga in alla utgående e-postmeddelanden.

För att uppnå det måste du ange värdet av MAIL_DRIVER till logga i config / mail.php fil. Därefter kan du köra ovannämnda URL och inspektera loggfilen för att kontrollera om e-postmallen var loggad där.

Om allt går bra bör du se ett e-postmeddelande som loggas till lagring / logs / laravel.log fil.

Det är ganska mycket så mycket som postfunktionen berörs av Laravel, och det avslutar också den här artikeln.

Slutsats

Idag gick vi igenom mail API som kommer inbyggt i Laravel, och det stöder också en mängd drivrutiner också.

Med utgångspunkt från grundläggande begrepp genomförde vi den mailable-klass som är ett viktigt element i mail-API: n i Laravel när vi fortsatte. I slutet testade vi också mailable-klassen genom att skapa en anpassad kontroller för att se om den verkligen fungerar.

Om du precis börjat med Laravel eller vill utvidga din kunskap, webbplats eller ansökan med tillägg, har vi en mängd olika saker du kan studera i Envato Market.

Jag skulle gärna vilja veta din feedback i form av frågor och kommentarer med hjälp av flödet nedan!