Inviare un’e-mail con Python

Inviare un’e-mail con Python

Qualche giorno fa ho dovuto creare uno script che alla fine del suo lavoro invia una e-mail con i risultati. Visto che è una cosa che può essere utile in futuro, mi sono scritto questo promemoria e ho pensato di metterlo anche sul blog.

Per creare e spedire un’e-mail ho usato due moduli: email e smtp. Tutti e due sono parte della libreria standard. E molto semplice, quindi vediamo subito il codice:

from smtplib import SMTP
from email.mime.text import MIMEText

corpo_email = "Corpo dell'email".
msg = MIMEText(corpo_email, "html")
msg['Subject'] = "Soggetto"
msg['From'] = "example-from@example.com"
msg['To'] = "example-to@example.com"

connessione = SMTP("smtp.example.com")
connessione.login("utente","password")
connessione.sendmail("example-from@example.com"",["example-to@example.com"], msg.as_string())

Dal modulo email ho importato la classe MIMEText per creare un’e-mail di tipo text/html. Prima ho creato il corpo del messaggio, poi ho creato un’istanza della classe MIMEText indicando il corpo e il subtype che in questo caso è html. Volendo si può anche indicare un encoding per il messaggio. Ho visto che indicando un encoding diverso da ASCII il messaggio veniva codificato in Base64, immagino che sia d’accordo con la RFC2822. I parametri to, from, cc, ecc. si impostano usando la notazione di dizionario. Tutti questi campi sono implementati secondo la RFC 2822.
Dopo aver creato il messaggio email mi collego con un server SMTP usando la classe SMTP del modulo smtplib. Faccio login e invio il messaggio. Notare che il messaggio viene convertito a stringa usando il metodo as_string() di MIMEText.

Con poche linee di codice si può creare e inviare un’e-mail con python. Per capirne di più o studiare casi più complessi, leggere:
19.1. email‚ An email and MIME handling package

http://docs.python.org/library/email.html

21.12. smtplib‚ SMTP protocol client

http://docs.python.org/library/smtplib.html

Simple Mail Transfer Protocol

http://tools.ietf.org/html/rfc2821.html

Internet Message Format

http://tools.ietf.org/html/rfc2822.html

Etichette: ,