‫Docente: Terminata la parte di
‫caricamento del file
‫della sezione, rivolgiamo ora la nostra attenzione all'invio di e-mail.
‫E in realtà abbiamo già inviato
‫e-mail prima, per la reimpostazione della password, ma nelle prossime due
‫lezioni lo porteremo a un livello completamente nuovo.
‫E quello che faremo è creare modelli di
‫email con pug e inviare email reali
‫utilizzando il servizio SendGrid.
‫E ora, in questa prima lezione,
‫costruiremo un gestore di posta elettronica più robusto
‫di quello che avevamo prima.
‫Quindi, apriamo la nostra cartella delle utilità
‫e poi qui, ricorda, abbiamo già un file di posta elettronica.
‫Ma in questo momento quello
‫che abbiamo qui è solo un gestore di invio di email molto
‫semplice, che non è in grado di accettare molte opzioni.
‫E quindi ora
‫costruiremo una soluzione molto più robusta qui.
‫Va bene?
‫Quindi quello che farò è creare una classe
‫e quella classe si chiamerà e-mail.
‫Quindi modulo. exports, quindi
‫anche questa classe è
‫ciò che esporteremo da questo file.
‫E poi, come sempre, una classe ha bisogno di una funzione di
‫costruzione, che è fondamentalmente la funzione che verrà
‫eseguita quando un nuovo oggetto viene creato tramite questa classe.
‫Ora diamo un'occhiata
‫a come utilizzeremmo questa classe in pratica.
‫E quindi l'idea, in pratica,
‫ogni volta che vogliamo inviare una nuova
‫email, è di importare questa classe di email e poi usarla in questo modo.
‫Quindi, creando una nuova
‫e-mail, e quindi in essa, vogliamo incollare un
‫utente, in modo che l'utente conterrà l'indirizzo e-mail
‫e anche il nome nel caso in cui desideriamo personalizzare l'e-mail.
‫E anche un URL.
‫E un buon esempio
‫per questo è, ad esempio, l'URL di ripristino per reimpostare la password.
‫Va bene?
‫Quindi, un nuovo oggetto email, e poi
‫lì vogliamo chiamare il metodo che
‫effettivamente invierà l'email.
‫Quindi, diciamo sendWelcome.
‫E così quello verrà inviato ogni volta
‫che un nuovo utente si iscrive alla nostra applicazione.
‫Va bene?
‫Avremo quindi anche inviare la reimpostazione della password.
‫E il modo in
‫cui imposteremo tutto questo renderà davvero facile
‫continuare ad aggiungere nuovi e nuovi metodi simili
‫a questo per inviare e-mail diverse per scenari diversi.
‫Va bene?
‫Ad ogni modo, poiché incolliamo l'utente e l'URL
‫in una nuova email, il nostro costruttore deve
‫quindi accettarli come argomenti.
‫Quindi utente e URL.
‫E quindi ciò che accade in questo costruttore è che questo. to
‫sarà uguale all'utente. email Quindi vogliamo
‫anche definire il nome dell'utente,
‫sempre per personalizzare sostanzialmente l'e-mail.
‫E quindi questo è utente. name e
‫dividiamolo e prendiamo solo il primo elemento nell'array risultante.
‫Quindi abbiamo fatto
‫questo prima, ma poi anche questo. url è uguale all'URL in entrata.
‫Infine, impostiamo anche questo. da qui.
‫quindi fondamentalmente a livello di oggetto.
‫E quindi ogni oggetto creato da questa
‫classe riceverà questa proprietà.
‫E quindi questo sarà simile a quello che abbiamo qui.
‫Quindi è fondamentalmente questo da, quindi
‫copiamolo ma è
‫bello averlo in un posto centrale come questo.
‫Ora una cosa che voglio davvero
‫fare è definire sostanzialmente questo indirizzo e-mail qui
‫come variabile di
‫configurazione, e quindi una variabile di
‫ambiente che possiamo cambiare molto
‫facilmente manipolando il file config. env file.
‫Va bene?
‫Quindi chiamiamo questo EMAIL_FROM.
‫E poi vogliamo solo l'indirizzo email stesso.
‫Va bene?
‫Quindi un altro caso in cui è molto utile
‫utilizzare le variabili di ambiente.
‫E ora facciamo di questo una stringa modello.
‫E ovviamente collegalo qui.
‫Quindi questo è il processo. avv. EMAIL_FROM.
‫Successivamente, creiamo un metodo qui
‫per creare il trasporto.
‫Così simile a quello che abbiamo qui.
‫Quindi createTransport.
‫E ora qui in realtà vogliamo avere trasporti diversi, indipendentemente
‫dal fatto che siamo in produzione o meno.
‫Quindi, quando siamo
‫in produzione, vogliamo effettivamente inviare email
‫reali, e lo faremo un po' più tardi usando
‫SendGrid, ma se non siamo in produzione,
‫vogliamo comunque usare la nostra applicazione Mailtrap proprio
‫come abbiamo fatto prima quando inviamo email.
‫Quindi, invece di inviare un'e-mail a un vero indirizzo e-mail, verrà
‫catturata nella nostra casella di posta Mailtrap in modo che possiamo
‫effettivamente dargli un'occhiata
‫nel nostro processo di sviluppo.
‫Quindi quel trasportatore sarà esattamente lo stesso di questo, quindi
‫copiamolo ma prima diciamo if(process.
‫avv. NODE_ENV).
‫Quindi, ricorda, è così che abbiamo verificato
‫se siamo in produzione o meno.
‫Quindi, se questo è
‫in produzione, e
‫quindi se siamo in produzione, vogliamo creare un trasportatore per SendGrid.
‫Quindi mettiamolo qui e lo faremo
‫di nuovo più tardi.
‫Per ora riportiamo solo qualcosa da qui.
‫Non importa, diciamo uno.
‫Va bene?
‫E poi fondamentalmente altrimenti vogliamo
‫restituire questo nodemailer. creareTrasporto.
‫Va bene?
‫Quindi
‫questo Transport qui fondamentalmente restituirà un nuovo trasporto nodemailer come questo.
‫O, d'altra parte, quando saremo
‫in produzione, allora quello che sarà qui.
‫Va bene?
‫Quindi cancelliamolo effettivamente da qui.
‫Inoltre, vogliamo eliminare questo.
‫E ora creiamo il metodo send.
‫E quindi questo sarà
‫il metodo che effettuerà l'invio effettivo.
‫Va bene?
‫E questo riceverà un modello e un oggetto.
‫E capirai un po'
‫meglio perché questo accade una volta completata l'intera classe.
‫Va bene?
‫Quindi modello e soggetto.
‫Quindi mettiamo qui un commento su cosa farà.
‫E ora, prima di scrivere questa funzione, lascia
‫che ti mostri come la useremo,
‫e quindi perché abbiamo bisogno del modello e dell'oggetto qui.
‫Quindi, ricorda come abbiamo
‫detto qui che avremo un metodo chiamato sendWelcome, e
‫anche come un metodo per inviare un'e-mail di reimpostazione della password.
‫E quindi, ora aggiungiamolo qui, quindi inviaBenvenuto.
‫E questo non riceve alcun argomento e tutto
‫ciò che fa è chiamare send con il
‫modello e l'oggetto
‫che vogliamo per questa email.
‫Va bene?
‫E così di nuovo, questo rende davvero
‫facile creare e-mail diverse
‫per tutti i tipi di situazioni diverse.
‫Va bene?
‫Quindi abbiamo questa funzione di invio di un percorso
‫qui e poi tutti questi più specifici, che
‫a loro volta chiameranno la funzione di invio del router che
‫sta facendo il lavoro effettivo.
‫Va bene?
‫Ed effettivamente ecco questo. send perché
‫ovviamente questi metodi
‫qui verranno definiti sull'oggetto corrente.
‫E quindi è questo.
‫Quindi qui incolliamo il nome del modello.
‫E quindi questo nome di modello che ho
‫messo qui, in futuro sarà un modello di
‫carlino che creeremo.
‫Quindi, in realtà nella prossima lezione,
‫creeremo questo modello di carlino per inviare
‫questa email di benvenuto.
‫Va bene?
‫E poi solo la riga dell'oggetto.
‫Diciamo 'Benvenuto nella famiglia Natours! ' E così,
‫proprio così, non dobbiamo preoccuparci di nessuno
‫dei dettagli di implementazione
‫quando inviamo effettivamente l'e-mail.
‫Quindi, per esempio, nel punto
‫del nostro codice in cui vogliamo
‫inviare l'e-mail di benvenuto, non dobbiamo preoccuparci dei
‫nomi dei modelli o delle righe dell'oggetto.
‫Tutto quello che faremo è dire di inviare un'e-mail di benvenuto e
‫il gioco è fatto.
‫E poi la
‫nostra classe si occuperà di occuparsi dell'implementazione.
‫Va bene?
‫Ad ogni modo, ora costruiamo effettivamente questa funzione di invio.
‫Quindi, quello che faremo in questa funzione,
‫è prima rendere l'HTML per l'e-mail basato su un
‫modello pug.
‫Quindi fondamentalmente quello che
‫stiamo incollando qui con il modello.
‫Quindi, definisci le opzioni e-mail, e così
‫sarà ancora una volta molto simile a questo, e infatti
‫lasciami andare avanti
‫e tagliarlo da qui e incollarlo qui.
‫Va bene?
‫Ovviamente non sarà esattamente lo stesso, ma lo
‫lasceremo per un po' più tardi.
‫Va bene?
‫E infine,
‫crea un trasporto e invia e-mail.
‫Va bene?
‫E così è, lascerò anche quello per dopo.
‫Quindi, a partire dal punto numero uno.
‫E di solito fino a questo punto, usiamo sempre e
‫solo pug per creare
‫un modello, quindi passiamo il nome
‫del modello nella funzione di rendering sulla risposta.
‫Destra.
‫Quindi l'abbiamo sempre usato in questo
‫modo res. render, e
‫poi qui il nome del template.
‫Destra?
‫E ciò che fa questa funzione di
‫rendering dietro le quinte è fondamentalmente creare l'HTML basato sul modello
‫pug e quindi inviarlo al client.
‫Ora, in questo caso non vogliamo davvero eseguire il
‫rendering, tutto ciò che vogliamo fare è creare fondamentalmente l'HTML
‫dal modello in modo che possiamo quindi inviare quell'HTML
‫come e-mail.
‫Quindi sostanzialmente definendolo qui come un'opzione HTML in queste
‫opzioni di posta.
‫Va bene?
‫Quindi, ricorda come possiamo specificare testo e HTML.
‫E principalmente siamo interessati all'invio di un'e-mail HTML.
‫Ed ecco perché avremo un modello carlino
‫da cui genereremo questo HTML.
‫Va bene?
‫Quindi non funzionerà in questo modo, ma
‫in realtà abbiamo bisogno del
‫pacchetto pug qui.
‫Quindi,
‫pug in questo modo,
‫e poi dobbiamo usare pug.
‫renderFile.
‫Va bene?
‫E quindi questo prenderà il
‫file e quindi renderà il codice pug in vero HTML.
‫Va bene?
‫E così che possiamo quindi salvare in una variabile HTML.
‫Va bene?
‫Allora, dov'è quel file?
‫Bene, è in dirname, quindi D-I-R name,
‫che ricorda è la posizione
‫dello script attualmente
‫in esecuzione, e quindi è,
‫in questo momento, in questa cartella delle utilità.
‫Va bene?
‫E quindi da lì dobbiamo fare un passo avanti,
‫quindi andare nelle visualizzazioni e da lì andare in una cartella di posta elettronica
‫che creeremo anche in un secondo.
‫E poi
‫c'è dove avremo il file modello.
‫Quindi modello}.
‫carlino.
‫Quindi, per l'e-mail di benvenuto, questo modello
‫si chiamerà benvenuto.
‫E quindi ora creiamolo effettivamente qui nelle viste, creiamo una nuova
‫cartella, e-mail
‫e quindi un nuovo file, benvenuto.
‫carlino.
‫Va bene?
‫E non creeremo davvero questo
‫modello in questo video, ma volevo solo mostrarti
‫come funzionerà tutto questo.
‫Va bene?
‫Quindi questo benvenuto verrà incollato qui
‫nel modello e quindi prenderà quel file dalla cartella delle visualizzazioni.
‫Destra?
‫Quindi, questo è il primo passo.
‫Successivamente, definiamo le opzioni di posta elettronica.
‫Quindi, da ora è questo. a partire dal.
‫Ricordare?
‫Quindi proprio qui.
‫Avanti,
‫abbiamo questo. to, e abbiamo anche il soggetto
‫che è uguale al soggetto che sta arrivando proprio qui, e quindi,
‫sì, in realtà non abbiamo nemmeno bisogno di definire questo
‫e abbiamo il nostro HTML.
‫Quindi così, o ovviamente, non è
‫nemmeno necessario perché è lo stesso nome.
‫Ora, il prossimo, vogliamo includere anche una versione di
‫testo della nostra e-mail nell'e-mail.
‫Va bene?
‫E questo è davvero molto importante perché è migliore per
‫i tassi di consegna della posta elettronica e anche per le cartelle di spam.
‫Va bene?
‫E anche alcune persone preferiscono semplicemente semplici e-mail di testo
‫invece di avere le e-mail HTML più formattate.
‫Va bene?
‫E quindi, in pratica, abbiamo bisogno di un modo
‫per convertire tutto l'HTML in testo semplice.
‫Quindi eliminando tutto l'HTML lasciando solo il contenuto.
‫E per farlo,
‫installeremo
‫un altro pacchetto, quindi questo si chiama html-to-text.
‫Va bene?
‫Includiamolo qui,
‫ToText.
‫require('html-to-text'), in questo modo.
‫Va bene?
‫Ora usiamolo per convertire il nostro HTML.
‫Quindi usiamo htmlToText. fromString e quindi
‫quella stringa viene archiviata in HTML.
‫Destra?
‫Quindi, queste sono le nostre opzioni di posta, e
‫in realtà ho dimenticato qualcosa di molto, molto importante, qui
‫in questo primo passaggio, quindi in questo file di rendering, perché
‫proprio come con la risposta. render, possiamo anche
‫incollare i dati nel file di rendering.
‫E, naturalmente, questo è molto
‫importante se vogliamo effettivamente fare o personalizzare l'e-mail
‫con il nome e anche incollare l'URL.
‫E quindi facciamolo come abbiamo fatto normalmente nella
‫funzione di rendering.
‫Quindi questo è firstName, invialo a questo. firstName e l'URL
‫è questo. url, e incolliamo anche l'oggetto e
‫vedrai un po 'più tardi
‫perché ne abbiamo bisogno.
‫Va bene?
‫Quindi, ora creiamo finalmente un trasporto utilizzando
‫la nostra funzione di creazione del
‫trasporto, quindi inviamo l'e-mail.
‫Quindi, abbastanza giusto, è questo. creareTrasporto.
‫Quindi, ricorda che questo è solo questo metodo qui, questo, e ha
‫lo stesso identico nome
‫di questa funzione qui proveniente da nodemailer.
‫Quindi è
‫un po' confuso, quindi chiamiamolo newTransport qui.
‫Ok, quindi anche qui c'è il nuovo Trasporto, così c'è
‫un po' meno di confusione.
‫Va bene?
‫Ora ricordiamo come lo abbiamo fatto qui prima.
‫Quindi avevamo il nostro
‫trasportatore, che abbiamo creato separatamente in
‫questo caso, e poi su quello abbiamo concatenato sendMail con le opzioni.
‫Quindi prendiamolo qui, cancelliamo tutto il codice rimanente.
‫Quindi fondamentalmente mettilo qui come riferimento.
‫Va bene?
‫Quindi questo trasportatore ora è questo.
‫Va bene?
‫E così via, inviamo e-mail a catena e poi con
‫le opzioni di posta che abbiamo definito qui.
‫Quindi, dobbiamo aspettare tutto
‫questo, perché, ovviamente, è una funzione asincrona.
‫E quindi ora segniamo questo qui come asincrono.
‫Va bene?
‫E quindi ora dobbiamo anche aspettare la funzione qui.
‫Va bene?
‫Perchè questo. send ora è davvero una funzione asincrona.
‫E quindi qui aspettiamo che questa funzione ritorni solo non appena
‫l'e-mail è stata effettivamente inviata.
‫E quindi, ovviamente, contrassegna anche questo come asincrono.
‫Stupendo.
‫In realtà è tutto per questa classe.
‫Quindi non abbiamo più bisogno di questo esempio.
‫Va bene?
‫E così nel prossimo video, andremo effettivamente
‫avanti e utilizzeremo questa nuova classe per inviare un'e-mail di benvenuto.
‫Quindi, ricapitola molto rapidamente quello che abbiamo fatto qui.
‫Quindi abbiamo creato una nuova classe di
‫posta elettronica dalla quale possiamo creare oggetti di posta
‫elettronica che possiamo quindi utilizzare per inviare messaggi di posta elettronica effettivi.
‫E per creare un nuovo oggetto e-mail, incolleremo l'utente e anche
‫un URL che vogliamo che sia in quell'e-mail.
‫Quindi qui assegniamo tutte quelle cose all'oggetto corrente, e
‫anche alcune altre impostazioni che vogliamo
‫avere a disposizione, come il nome e l'e-mail del mittente.
‫Quindi fondamentalmente per astrarre queste informazioni
‫dalla funzione di invio e
‫per avere tutto in un posto centrale.
‫Quindi abbiamo qui una nuova funzione di
‫trasporto che rende davvero facile creare trasporti diversi
‫per ambienti diversi.
‫E così ancora una volta, astraendo
‫quella logica dall'effettiva funzione
‫di invio che dovrebbe preoccuparsi solo dell'invio dell'e-mail.
‫Va bene?
‫Quindi ecco quella funzione di invio che accetta un
‫modello e un oggetto e, in base a ciò, crea l'HTML da un
‫modello pug che verrà quindi impostato nelle opzioni
‫di posta elettronica, che, alla fine
‫della funzione, alla fine essere inviato in questa riga
‫di codice.
‫Va bene?
‫Ma non sarà questa funzione di invio
‫che useremo nel nostro codice.
‫Quindi, invece, creeremo una funzione
‫diversa per ogni tipo di email
‫che vogliamo inviare.
‫E il primo che ho creato qui è sendWelcome.
‫Va bene?
‫E così per sendWelcome, in pratica, prepariamo il
‫nome del modello
‫come benvenuto e l'oggetto come questa stringa.
‫Va bene?
‫Quindi, spero che abbia avuto senso, e ci vediamo tra un secondo.