Invio di e-mail da applicazioni Python Flask con Twilio SendGrid
Pubblicato: 2020-06-30Determinare se costruire o acquistare la tua infrastruttura di posta elettronica non è una decisione da poco. Hai la larghezza di banda per supportare i problemi di consegna? Sarai in grado di tenere il passo con il tuo invio man mano che cresci? Cosa c'è di più conveniente? Sebbene ci siano una serie di fattori da considerare, questa è una conversazione per un'altra guida (come questa guida Build it o Buy It ).
Invece, questo tutorial ti mostrerà quanto sia facile inviare e-mail tramite un servizio di posta elettronica dedicato. Illustreremo come inviare e-mail tramite Twilio SendGrid utilizzando il framework Flask e l' estensione Flask-Mail .
Strumenti per l'esercitazione
Per seguire questo tutorial sono necessari i seguenti elementi:
- Python 3.6 o successivo. Se il tuo sistema operativo non fornisce un interprete Python 3.6+, puoi andare su python.org per scaricare un programma di installazione.
- Un account Twilio SendGrid gratuito. Se non conosci Twilio SendGrid, registrati per un account di prova . Con un account di prova, puoi inviare 40.000 e-mail per 30 giorni, quindi 100 e-mail al giorno per sempre.
Come configurare SendGrid
Prima di poter inviare e-mail tramite SendGrid, devi creare una chiave API che utilizzerai per autenticare l'accesso ai servizi SendGrid. Accedi al tuo account SendGrid, quindi fai clic sulla barra laterale di sinistra seleziona "Impostazioni" e poi Chiavi API . Fai clic su "Crea chiave API".
Assegna alla tua chiave API un nome descrittivo (mantienilo semplice e diretto in modo da ricordare a cosa si riferisce!). Per questo tutorial, abbiamo scelto il nome Flask-Mail . Abbiamo selezionato "Accesso completo" per i permessi, che dà alla chiave la possibilità di eseguire tutte le funzioni di invio e-mail necessarie (accesso agli endpoint GET, PATCH, PUT, DELETE e POST). Se preferisci creare una chiave con autorizzazioni molto specifiche, seleziona "Accesso limitato" e configura il tuo accesso secondo necessità.
Quando fai clic sul pulsante "Crea e visualizza" ti verrà presentata la tua chiave. Questa chiave non verrà mai più mostrata, quindi è necessario fare clic su di essa per copiarla negli appunti. Quindi incollalo in un documento sicuro in modo da poterlo utilizzare in seguito. Se perdi la chiave, dovrai generarne una nuova di zecca. Una volta salvata la chiave, è possibile fare clic sul pulsante "Fatto".
Costruire un ambiente Python
Ora che abbiamo completato la configurazione, possiamo approfondire come inviare e-mail dalle applicazioni Python Flask. Inizieremo creando una nuova directory sul tuo computer chiamata *twilio-sendgrid-tests* (o qualcosa di simile), e quindi creando un nuovo ambiente virtuale Python al suo interno.
Per gli utenti Mac e Unix, i comandi sono:
Per gli utenti Windows, i comandi sono:
Quindi, installa Flask, Flask-Mail e python-dotenv nel tuo ambiente virtuale:
Configurazione di un'applicazione Flask
Creiamo un'applicazione iniziale Flask e Flask-Mail nel file app.py :
Qui puoi vedere come configurare correttamente Flask-Mail per utilizzare il servizio SMTP di SendGrid. Le impostazioni importanti sono:
- Il server di posta dovrebbe essere `smtp.sendgrid.net`.
- La porta di posta dovrebbe essere 587. (Sai quali porte usare quando? Dai un'occhiata a questo post del blog. )
- TLS deve essere abilitato. (Qual è la differenza tra SSL e TLS ?)
- È richiesta l'autenticazione. Per il nome utente, devi usare `apikey` (questo è lo stesso per tutti gli account SendGrid). La password è la chiave API SendGrid creata nella sezione precedente.
Per questa applicazione Flask, abbiamo aggiunto le impostazioni di cui sopra nelle chiavi di configurazione corrette per l'estensione Flask-Mail. Per motivi di sicurezza, abbiamo importato la chiave API da una variabile di ambiente denominata `SENDGRID_API_KEY`. Abbiamo anche impostato un indirizzo email del mittente predefinito da una variabile di ambiente. Questo è l'indirizzo email che apparirà nel campo "da" di tutte le email per impostazione predefinita.
Crea un file .env con le due variabili richieste:
Flask importerà automaticamente le variabili definite nel file .env (purché sia installato il pacchetto python-dotenv), quindi questo è sufficiente per ottenere queste due variabili nella configurazione dell'applicazione Flask.
Invio di un'e-mail di prova
Vediamo come puoi inviarti un'e-mail di prova dalla shell Python:
Nota che abbiamo avviato la shell Python con il comando `flask shell`. Ciò assicurerà che l'applicazione Flask che abbiamo creato in app.py venga importata.
Una volta nella shell, importa l'istanza `mail` che abbiamo creato in app.py e la classe `Message` da Flask-Mail:
Quindi crea un'istanza `Message`:
L'ultimo passaggio è inviare questa email:
E questo è tutto! Se tutto va secondo i piani, l'e-mail dovrebbe arrivare nella tua casella di posta in pochi secondi.
Se vuoi vedere un esempio di percorso Flask che integra questa funzionalità, eccone uno semplice che puoi aggiungere nella parte inferiore di app.py :
Per completare l'applicazione di esempio, è necessario aggiungere il file modello index.html . Per prima cosa crea una directory per i tuoi modelli:
E quindi scrivi il seguente contenuto nel file templates/index.html :
Esegui l'applicazione di prova con:
Quindi vai a http://localhost:5000 nel tuo browser web per accedere all'applicazione.
Ora puoi inserire un indirizzo e-mail del destinatario e quando fai clic sul pulsante verrà inviata un'e-mail di prova a quell'indirizzo.
Risoluzione dei problemi di consegna
Utilizzando l'applicazione Flask sopra, dovresti riuscire a inviare e-mail. C'è la possibilità, tuttavia, che le tue e-mail non vengano consegnate. Poiché SendGrid invia e-mail in modo asincrono, la maggior parte degli errori di consegna si verifica dopo che il mittente ha completato la propria parte della transazione, quindi la tua applicazione non avrà alcuna indicazione che si sia verificato un errore. Se ciò accade, è probabile che l'e-mail sia stata rifiutata dal server di posta del destinatario.
Fortunatamente, se riscontri questo problema inviando un'e-mail come abbiamo descritto, puoi utilizzare la dashboard di Twilio SendGrid per aiutarti a eseguire il debug di ciò che è successo. Dalla dashboard di SendGrid , fai clic su Attività , quindi sul pulsante "Mostra tutte le attività" al centro della pagina. Questo ti mostrerà un elenco di tutte le email che hai tentato di inviare, indicando se sono state consegnate correttamente o meno.
Nella figura sopra puoi vedere che un'e-mail inviata a un indirizzo example.com non è stata recapitata. Per eventuali e-mail che non sono state consegnate, puoi fare clic sull'e-mail per visualizzare informazioni dettagliate, comprese eventuali risposte di errore inviate dal server di posta elettronica del destinatario.
Una volta determinato il motivo per cui le tue e-mail non vengono inviate, ci sono diversi modi per risolvere questi problemi di consegna. Se vedi una serie di errori di ortografia nelle e-mail (ad es. @yaho.com o @gmal.com), potrebbe valere la pena esplorare uno strumento di convalida e-mail per rilevare eventuali errori di ortografia comuni nell'elenco dei contatti e-mail.
Esistono molti altri problemi che possono portare a una consegna non riuscita, tra cui una scarsa reputazione di invio o un indirizzo IP bloccato. Scopri tutto sulla consegna delle e-mail nella nostra Guida alla consegna delle e-mail 2020 .
Conclusione
Come puoi vedere dal tutorial, Twilio SendGrid si integra facilmente nel flusso di lavoro di invio e-mail di Flask iniziale, rendendo l'invio di e-mail un compito semplice.
Se ora ti stai chiedendo come ricevi le email da Flask Framework in Python, non preoccuparti, abbiamo quello che fa per te! Dai un'occhiata a questo articolo: Come ricevere e-mail con Flask Framework per Python .
E, per ulteriori risorse su come integrare con Twilio SendGrid o inviare tramite le nostre API, consulta il nostro Knowledge Center .