Di cosa hai bisogno per inviare una e-mail con Python? Alcune conoscenze di base di programmazione e web insieme alle abilità elementari di Python. Supponiamo che tu abbia già avuto un’app Web costruita con questa lingua e ora devi estendere la sua funzionalità con notifiche o altri messaggi di posta elettronica. Questo tutorial ti guiderà attraverso i passaggi più essenziali per l’invio di e-mail tramite un server SMTP:

  1. Configurazione di un server per il test (sai perché è importante?,)
    • Server SMTP locale
    • Mailtrap server SMTP falso
  2. Diversi tipi di e-mail: HTML, con immagini e allegati
  3. Invio di più e-mail personalizzate (Python è solo prezioso per l’automazione e-mail)
  4. Alcune opzioni di invio di e-mail popolari come Gmail e servizi di posta elettronica transazionali

Servito con numerosi

Nota: scritto e testato su Python 3.7.2.

Invio di una e-mail utilizzando SMTP

La prima buona notizia su Python è che ha un modulo integrato per l’invio di e-mail tramite SMTP nella sua libreria standard., Non sono necessarie installazioni o trucchi aggiuntivi. È possibile importare il modulo utilizzando la seguente dichiarazione:

import smtplib

assicurarsi che il modulo è stato importato correttamente e ottenere la completa descrizione delle classi e degli argomenti, tipo interattiva di Python sessione:

help(smtplib)

Presso il nostro prossimo passo, possiamo parlare un po ‘ di server: scegliendo l’opzione giusta e la configurazione.,

Server SMTP per testare le e-mail in Python

Quando si crea una nuova app o si aggiungono funzionalità, specialmente quando lo si fa per la prima volta, è essenziale sperimentare su un server di test. Ecco un breve elenco di motivi:

  1. Non colpirai le caselle di posta dei tuoi amici e clienti. Questo è fondamentale quando si prova l’invio di e-mail in blocco o si lavora con un database di posta elettronica.
  2. Non inonderai la tua casella di posta con le email di test.
  3. Il tuo dominio non verrà inserito nella lista nera per spam.,

Server SMTP locale

Se si preferisce lavorare in ambiente locale, il server di debug SMTP locale potrebbe essere un’opzione. A tale scopo, Python offre un modulo smtpd. Ha una funzione DebuggingServer, che scarterà i messaggi che stai inviando e li stamperà su stdout. È compatibile con tutti i sistemi operativi.,

Imposta il tuo server SMTP su localhost:1025

python -m smtpd -n -c DebuggingServer localhost:1025

Per eseguire il server SMTP sulla porta 25, avrai bisogno dei permessi di root:

sudo python -m smtpd -n -c DebuggingServer localhost:25

Ti aiuterà a verificare se il tuo codice funziona e indicare i possibili problemi se ce ne sono. Tuttavia, non ti darà l’opportunità di verificare come viene reso il tuo modello di email HTML.,

Falso server SMTP

Falso server SMTP imita il lavoro di un vero 3rd party server web. In ulteriori esempi in questo post, useremo Mailtrap. Oltre a testare l’invio di e-mail, ci permetterà di verificare come l’e-mail verrà visualizzata e visualizzata, rivedere i dati grezzi del messaggio e fornirci un rapporto di spam., Mailtrap è molto facile da configurare: basta copiare le credenziali generate dall’app e incollarle nel codice.

Ecco come appare in pratica:

Mailtrap rende le cose ancora più facili. Vai alla sezione Integrazioni nella scheda Impostazioni SMTP e ottieni il modello pronto all’uso del messaggio semplice, con le tue credenziali Mailtrap., È l’opzione più semplice per istruire il tuo script Python su chi invia cosa a chi è il metodo di istanza di sendmail ():

Prova Mailtrap gratuitamente

Il il codice sembra piuttosto semplice, giusto? Diamo un’occhiata più da vicino e aggiungiamo un po ‘ di gestione degli errori (vedi le spiegazioni #in mezzo). Per rilevare errori, usiamo i blocchi” try “e” except”. Fare riferimento alla documentazione per l’elenco delle eccezioni qui.,

Una volta ottenuto il risultato inviato nella Shell, dovresti vedere il tuo messaggio nella posta in arrivo di Mailtrap:

Invio di email HTML

Nella maggior parte casi, è necessario aggiungere alcuni formattazione, link o immagini per le notifiche e-mail. Possiamo semplicemente mettere tutti questi con il contenuto HTML. A tale scopo, Python ha un pacchetto di posta elettronica.

Ci occuperemo del tipo di messaggio MIME, che è in grado di combinare HTML e testo normale. In Python, è gestito dall’e-mail.modulo mime.,

È meglio scrivere una versione di testo e una versione HTML separatamente, quindi unirle con l’istanza MIMEMultipart(“alternativa”). Significa che un tale messaggio ha due opzioni di rendering di conseguenza. Nel caso in cui un HTML non venga reso correttamente per qualche motivo, una versione di testo sarà ancora disponibile.

Input:

Output:

Invio di e-mail con allegati in Python

Il passo successivo nel mastering dell’invio di e-mail con Python è il collegamento di file., Gli allegati sono ancora gli oggetti MIME ma dobbiamo codificarli con il modulo base64. Un paio di punti importanti sugli allegati:

  1. Python consente di allegare file di testo, immagini, file audio e persino applicazioni. Hai solo bisogno di utilizzare la classe e-mail appropriata come e-mail.mimica.audio.MIMEAudio o e-mail.mimica.immagine.Immagine mimica. Per le informazioni complete, fare riferimento a questa sezione della documentazione Python. Inoltre, puoi controllare gli esempi forniti da Python per una migliore comprensione.
  2. Ricorda la dimensione del file: inviare file oltre i 20 MB è una cattiva pratica.,

Nelle e-mail transazionali, i file PDF sono i più utilizzati: di solito riceviamo ricevute, biglietti, carte d’imbarco, conferme di ordini, ecc. Quindi esaminiamo come inviare una carta d’imbarco come file PDF.

Ingresso:

Per allegare più file, è possibile chiamare il messaggio.attach () metodo più volte.

Come inviare un’e-mail con immagini

Le immagini, anche se fanno parte del corpo del messaggio, sono anche allegati., Ne esistono tre tipi: allegati CID (incorporati come oggetto MIME), immagini base64 (incorporamento in linea) e immagini collegate. Abbiamo descritto le loro peculiarità, pro e contro, e la compatibilità con la maggior parte dei client di posta elettronica in questo post.

Passiamo agli esempi.

Per aggiungere un allegato CID, creeremo un messaggio MIME multipart con il componente MIMEImage:

Output:

Il CID l’immagine viene mostrata sia come parte del messaggio HTML che come allegato., I messaggi con questo tipo di immagine sono spesso considerati spam: controlla la scheda Analytics in Mailtrap per vedere il tasso di spam e le raccomandazioni sul suo miglioramento. Molti client di posta elettronica, in particolare Gmail, non visualizzano immagini CID nella maggior parte dei casi. Quindi esaminiamo come incorporare un’immagine codificata base64.

Qui useremo il modulo base64 e sperimenteremo lo stesso file immagine:

Output:

Ora l’immagine è incorporata nel messaggio HTML ed è non disponibile come file allegato., Python ha codificato la nostra immagine jpg, e se andiamo alla scheda Sorgente HTML, vedremo la stringa di dati immagine lunga in img src.

Come inviare più e-mail in Python

Inviare più e-mail a destinatari diversi e renderli personali è la cosa speciale delle e-mail in Python.

Per aggiungere diversi altri destinatari, puoi semplicemente digitare i loro indirizzi separati da una virgola, aggiungere CC e CCN. Ma se lavori con un invio di e-mail di massa, Python ti salverà con loop.

Una delle opzioni è creare un database in un .,formato csv (supponiamo che sia salvato nella stessa cartella del tuo script Python).

Spesso vediamo i nostri nomi in esempi transazionali o addirittura promozionali. Ecco come possiamo farlo con Python.

Organizziamo l’elenco in una semplice tabella con solo due colonne: nome e indirizzo email. Dovrebbe apparire come il seguente esempio:

#name,emailJohn Johnson,[email protected] Peterson,[email protected]

Il codice sottostante aprirà il file e eseguirà il loop sulle sue righe riga per riga, sostituendo il {name} con il valore dalla colonna “name”.,

Input:

Dopo aver eseguito lo script, si ottiene la seguente risposta:

Sent to John JohnsonSent to Peter Peterson>>> 

Uscita

Nel nostro Mailtrap posta in arrivo, vediamo due messaggi: uno per John Johnson e un altro per Peter Peterson, consegnati contemporaneamente:

l’Invio di email con Python tramite Gmail

Quando si è pronti per l’invio di messaggi di posta elettronica ai reali destinatari, è possibile configurare il server di produzione. Dipende anche dalle tue esigenze, obiettivi e preferenze: il tuo localhost o qualsiasi SMTP esterno.,

Una delle opzioni più popolari è Gmail, quindi diamo un’occhiata più da vicino.

Spesso possiamo vedere titoli come “Come impostare un account Gmail per lo sviluppo”. In realtà, significa che si creerà un nuovo account Gmail e lo utilizzerà per uno scopo particolare.

Per poter inviare e-mail tramite il tuo account Gmail, devi fornire l’accesso ad esso per la tua applicazione. Puoi consentire app meno sicure o sfruttare il protocollo di autorizzazione OAuth2. È un modo più difficile ma consigliato a causa delle ragioni di sicurezza.,

Inoltre, per utilizzare un server Gmail, è necessario sapere:

  • il nome del server = smtp.gmail.com
  • port = 465 per la connessione SSL / TLS (preferita)
  • o port = 587 per la connessione STARTTLS.
  • nome utente = il tuo indirizzo email Gmail
  • password = la tua password.

Se tendi alla semplicità, puoi usare Yagmail, il Gmail/SMTP dedicato. Rende l’invio di e-mail davvero facile., Basta confrontare gli esempi di cui sopra con queste diverse righe di codice:

Servizi di posta elettronica transazionali

Gmail è gratuito e ampiamente utilizzato, ma ha ancora limitazioni per l’invio di e-mail. Se le tue esigenze vanno ben oltre le regole di Gmail, scegli tra una delle opzioni di servizi transazionali o, come vengono anche chiamate, servizi API di posta elettronica.

Python è supportato dalla stragrande maggioranza delle API email attendibili in modo da poter scegliere in base alle proprie preferenze e budget.,

Qui ci sono alcune guide su come inviare e-mail con Python attraverso l’elenco dei servizi più popolari:

  • Amazon SES
  • Mailgun
  • Mandrillo
  • farà fede il Timbro postale
  • Sendgrid
  • SocketLabs

passaggi successivi con e-mail in Python

Abbiamo dimostrato solo di base, opzioni di invio e-mail con Python, per descrivere la logica e una vasta gamma di capacità. Per ottenere ottimi risultati, si consiglia di rivedere la documentazione Python e solo sperimentando con il proprio codice!,

Ci sono un sacco di vari framework Python e librerie, che rendono la creazione di applicazioni più elegante e dedicato. In particolare, alcuni di essi possono aiutare a migliorare la tua esperienza con la creazione di funzionalità di invio di e— mail:

I framework più popolari sono:

  1. Flask, che offre una semplice interfaccia per l’invio di e-mail-Flask Mail.
  2. Django, che può essere una grande opzione per la costruzione di modelli HTML. (Ed ecco il nostro tutorial sull’invio di e-mail con Django).
  3. Zope è utile per lo sviluppo di siti web.,
  4. Marrow Mailer è un framework dedicato per la consegna della posta che aggiunge varie configurazioni utili.
  5. Plotly e il suo Trattino possono aiutare con l’invio di grafici e report.