Come inviare e-mail in Laravel

In questo articolo, esploreremo l'API Mail nel framework web di Laravel. Laravel sfrutta la famosa libreria SwiftMailer, che è facile da usare e include una varietà di driver di posta elettronica tra cui scegliere. Nelle ultime fasi dell'articolo, passeremo attraverso una dimostrazione approfondita dei concetti discussi nella prima metà dell'articolo.

Impostazione dei prerequisiti

Laravel implementa un wrapper sulla libreria SwiftMailer che semplifica la configurazione e l'utilizzo della gestione della posta elettronica allo stesso tempo. Puoi trovare le impostazioni di posta elettronica predefinite all'indirizzo config / mail.php.

 env ('MAIL_DRIVER', 'sendmail'), / * | ------------------------------------ -------------------------------------- | Indirizzo host SMTP | ---------------------------------------------- ---------------------------- | | Qui puoi fornire l'indirizzo host del server SMTP usato dal tuo | applicazioni. Viene fornita un'opzione predefinita compatibile con | il servizio di posta Mailgun che fornirà consegne affidabili. | * / 'host' => env ('MAIL_HOST', 'smtp.mailgun.org'), / * | ------------------------- ------------------------------------------------- | Porta host SMTP | ---------------------------------------------- ---------------------------- | | Questa è la porta SMTP utilizzata dalla tua applicazione per consegnare e-mail a | utenti dell'applicazione. Come l'host abbiamo impostato questo valore su | rimanere compatibile con l'applicazione e-mail di Mailgun per impostazione predefinita. | * / 'port' => env ('MAIL_PORT', 587), / * | ------------------------------- ------------------------------------------- | Indirizzo "Da" globale | -------------------------------------------- ------------------------------ | | Potresti desiderare che tutte le e-mail inviate dalla tua domanda siano inviate da | lo stesso indirizzo. Qui, puoi specificare un nome e un indirizzo che è | utilizzato globalmente per tutte le e-mail inviate dall'applicazione. | * / 'from' => ['address' => env ('MAIL_FROM_ADDRESS', '[email protected]'), 'nome' => env ('MAIL_FROM_NAME', 'Esempio'),], / * | - -------------------------------------------------- ----------------------- | Protocollo di crittografia e-mail | -------------------------------------------- ------------------------------ | | Qui è possibile specificare il protocollo di crittografia da utilizzare quando | l'applicazione invia messaggi di posta elettronica. Un valore sensato predefinito usando il | il protocollo di sicurezza del livello di trasporto dovrebbe fornire una grande sicurezza. | * / 'encryption' => env ('MAIL_ENCRYPTION', 'tls'), / * | ----------------------------- --------------------------------------------- | Nome utente server SMTP | ---------------------------------------------- ---------------------------- | | Se il server SMTP richiede un nome utente per l'autenticazione, è necessario | Impostare qui. Questo verrà utilizzato per l'autenticazione con il tuo server su | connessione. È inoltre possibile impostare il valore "password" sotto questo. | * / 'username' => env ('MAIL_USERNAME'), 'password' => env ('MAIL_PASSWORD'), / * | --------------------- -------------------------------------------------- --- | Percorso del sistema Sendmail | ---------------------------------------------- ---------------------------- | | Quando si utilizza il driver "sendmail" per inviare e-mail, sarà necessario sapere | il percorso verso il quale Sendmail risiede su questo server. Un percorso predefinito ha | è stato fornito qui, che funzionerà bene sulla maggior parte dei tuoi sistemi. | * / 'sendmail' => '/ usr / sbin / sendmail -bs', / * | ----------------------------- --------------------------------------------- | Impostazioni posta su Markdown | ---------------------------------------------- ---------------------------- | | Se si utilizza il rendering e-mail basato su Markdown, è possibile configurare il proprio | temi e percorsi dei componenti qui, che consentono di personalizzare il design | delle e-mail. Oppure, puoi semplicemente limitarti alle impostazioni di default di Laravel! | * / 'markdown' => ['theme' => 'default', 'paths' => [percorso_risorse ('viste / vendor / mail'),],],]; 

Quando si tratta di inviare mail, Laravel supporta diversi driver tra cui scegliere. Come puoi vedere, l'impostazione predefinita MAIL_DRIVER è impostato per smtp.

Se hai intenzione di usare il smtp driver per inviare mail quindi ti viene anche richiesto di impostare altre impostazioni correlate come MAIL_HOST, mail_port, MAIL_ENCRYPTION, MAIL_USERNAME, e MAIL_PASSWORD.

D'altra parte, se hai intenzione di usare il inviare una mail driver, quindi si desidera assicurarsi che il inviare una mail il percorso di sistema è impostato sul valore corretto in config / mail.php file.

Puoi anche impostare il a partire dal indirizzo che verrà utilizzato durante l'invio di posta sotto il a partire dal chiave. Infine, se si desidera utilizzare il rendering e-mail basato su Markdown, è possibile impostare tali impostazioni sotto riduione di prezzo chiave.

La ciliegina sulla torta è che potresti anche utilizzare provider di servizi di posta elettronica di terze parti come Mailgun, Mandrill, SES e SparkPost. Se si utilizza uno di questi servizi, è necessario assicurarsi di aver impostato le impostazioni corrispondenti in config / services.php file.

Questa è stata un'introduzione di base alle impostazioni relative all'API della posta in Laravel. Dalla prossima sezione in poi, vedremo un esempio personalizzato che mostra come inviare e-mail.

Crea la classe Mailable

In questa sezione, creeremo la classe di posta elettronica, che verrà utilizzata per inviare e-mail. La classe di posta è responsabile per l'invio di e-mail utilizzando un mailer configurato in config / mail.php file. In effetti, Laravel fornisce già un comando artigiano che ci consente di creare un modello base.

php artisan make: mail DemoEmail

Questo dovrebbe creare un modello di email vuoto a App / Mail / DemoEmail.php, come mostrato nel seguente frammento.

Vista ( 'view.name'); 

Sostituiamo il contenuto di quel file con il seguente.

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

Esistono due metodi importanti che la classe di posta elettronica generalmente implementa-__costruire e costruire. Il __costruire il metodo è usato per inizializzare gli oggetti che dovresti usare nel modello di email. D'altra parte, il costruire il metodo viene utilizzato per inizializzare più valori specifici per e-mail come da, visualizzare template, allegati e simili.

Nel nostro caso, abbiamo superato il $ demo oggetto come argomento costruttore, ed è assegnato a dimostrazione proprietà pubblica.

Nel costruire metodo, abbiamo inizializzato una configurazione specifica per email.

  • Il a partire dal è usato per impostare un indirizzo email che verrà utilizzato come indirizzo.
  • Usando il vista metodo, è possibile impostare il modello di posta elettronica che verrà utilizzato durante l'invio di una e-mail utilizzando questo mailable. Nel nostro caso, l'abbiamo impostato su mails.demo, e significa che devi creare un file modello di visualizzazione su Resources / views / mail / demo.blade.php.
  • Quindi, il testo il metodo viene utilizzato per impostare la versione in testo normale di un modello di posta elettronica.
  • Come abbiamo appena discusso, il __costruire il metodo viene utilizzato per impostare gli oggetti che verranno utilizzati nel modello di posta elettronica, è inoltre possibile utilizzare il con metodo che consente di impostare i dati di visualizzazione di un messaggio.
  • Successivamente, abbiamo usato il allegare metodo per allegare un'immagine con un messaggio.

Ovviamente, dobbiamo creare modelli di email che dovremmo utilizzare durante l'invio di email. Vai avanti e crea un file Resources / views / mail / demo.blade.php come mostrato nel seguente frammento.

Ciao $ demo-> ricevitore, 

Questa è una email dimostrativa a scopo di test! Inoltre, è la versione HTML.

Demo valori oggetto:

Demo One: $ demo-> demo_one

Demo due: $ demo-> demo_two

Valori passati da Con metodo:

testVarOne: $ testVarOne

testVarTwo: $ testVarTwo

Grazie,
$ demo-> sender

Inoltre, creiamo la versione in chiaro del file in Resources / views / mail / demo_plain.blade.php.

Salve $ demo-> receiver, questa è una email dimostrativa a scopo di test! Inoltre, è la versione HTML. Demo degli oggetti: Demo uno: $ demo-> demo_one Demo due: $ demo-> demo_two Valori passati con Metodo: testVarOne: $ testVarOne testVarOne: $ testVarOne Grazie, $ demo-> sender

Quindi questa era la classe di posta elettronica a tua disposizione, e non abbiamo ancora finito dato che abbiamo bisogno di usare il posta facciata per inviare effettivamente mail. Nella prossima sezione, esploreremo come è possibile utilizzare il posta Facciata per inviare e-mail usando il DemoEmail Classe disponibile che è stata appena creata in questa sezione.

Avvolgendo

In questa sezione creeremo un esempio per dimostrare come è possibile utilizzare il mailable classe che è stata creata nell'ultima sezione.

Creiamo un file di controller su App / HTTP / Controller / MailController.php con i seguenti contenuti.

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

È importante notare che abbiamo incluso il Illuminare \ Support \ Facciate \ Mail Facciata che verrà utilizzata per inviare una email. Nel inviare metodo, la seguente dichiarazione è responsabile per l'invio di una e-mail inizializzando il App \ Mail \ DemoEmail Mailable in primo luogo.

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

Il a metodo del Illuminare \ Support \ Facciate \ Mail Facciata restituisce un'istanza di \ Illuminate \ Mail \ PendingMail classe, che contiene già un mailer appropriato configurato in config / mail.php file.

E infine, usiamo il inviare metodo del \ Illuminate \ Mail \ PendingMail classe che invia un'e-mail effettiva.

Per testarlo, aggiungiamo un percorso associato nel percorsi / web.php file.

// Percorsi relativi all'email Route :: get ('mail / send', 'MailController @ send');

E con questo, puoi eseguire l'URL http://your-laravel-site.com/mail/send per vedere se funziona come previsto.

D'altra parte, se vuoi testare rapidamente i tuoi modelli di email, senza inviare email effettive, c'è una clausola in Laravel che ti permette di registrare tutte le email in uscita.

Per ottenere ciò, è necessario impostare il valore di MAIL_DRIVER a ceppo nel config / mail.php file. Successivamente, è possibile eseguire l'URL summenzionato e ispezionare il file di registro per verificare se il modello di posta elettronica è stato registrato lì.

Se tutto va bene, dovresti vedere un'e-mail che viene registrata su stoccaggio / logs / laravel.log file.

Questo è più o meno per quanto riguarda la funzionalità di posta elettronica in Laravel, e questo conclude anche questo articolo.

Conclusione

Oggi abbiamo analizzato l'API di posta che viene incorporata in Laravel e supporta anche una varietà di driver.

Partendo dai concetti di base, abbiamo implementato la classe mailable che è un elemento essenziale nell'API di posta di Laravel man mano che ci spostiamo. Alla fine, abbiamo anche testato la classe mailable creando un controller personalizzato per vedere se funziona effettivamente.

Se hai appena iniziato con Laravel o stai cercando di espandere le tue conoscenze, il tuo sito o la tua applicazione con le estensioni, abbiamo una varietà di cose che puoi studiare nel mercato di Envato.

Mi piacerebbe conoscere il tuo feedback sotto forma di domande e commenti utilizzando il feed sottostante!