Python - SMTP

Il protocollo SMTP (Simple Mail Transfer Protocol) è un protocollo che gestisce l'invio di una e-mail e il routing della posta tra i server di posta.

Python fornisce smtplib modulo, che definisce un oggetto di sessione client SMTP che può essere utilizzato per inviare e-mail a qualsiasi macchina Internet con un daemon listener SMTP o ESMTP.

Un oggetto SMTP dispone di un metodo di istanza chiamato sendmail, che viene generalmente utilizzato per eseguire il lavoro di spedizione di un messaggio. Ci vogliono tre parametri:

  • Il mittente : una stringa con l'indirizzo del mittente.

  • I destinatari : un elenco di stringhe, una per ogni destinatario.

  • Il messaggio - Un messaggio sotto forma di stringa formattata come specificato nelle varie RFC.

Esempio

Ecco un modo semplice per inviare un'e-mail utilizzando lo script Python. Provalo una volta -

#!/usr/bin/python3
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

Qui, hai inserito una semplice e-mail nel messaggio, usando una virgoletta tripla, avendo cura di formattare correttamente le intestazioni. Un'e-mail richiede unFrom, Toe a Subject intestazione, separata dal corpo dell'e-mail con una riga vuota.

Per inviare la posta si utilizza smtpObj per connettersi al server SMTP sulla macchina locale. Quindi utilizzare il metodo sendmail insieme al messaggio, l'indirizzo del mittente e l'indirizzo di destinazione come parametri (anche se gli indirizzi mittente e destinatario si trovano all'interno dell'e-mail stessa, questi non vengono sempre utilizzati per instradare la posta).

Se non si esegue un server SMTP sulla macchina locale, è possibile utilizzare il client smtplib per comunicare con un server SMTP remoto. A meno che tu non stia utilizzando un servizio di webmail (come Gmail o Yahoo! Mail), il tuo provider di posta elettronica deve averti fornito i dettagli del server di posta in uscita che puoi fornire, come segue:

mail = smtplib.SMTP('smtp.gmail.com', 587)

Invio di un'e-mail HTML utilizzando Python

Quando invii un messaggio di testo utilizzando Python, tutto il contenuto viene trattato come testo semplice. Anche se includi tag HTML in un messaggio di testo, questo viene visualizzato come testo semplice ei tag HTML non verranno formattati secondo la sintassi HTML. Tuttavia, Python fornisce un'opzione per inviare un messaggio HTML come messaggio HTML effettivo.

Durante l'invio di un messaggio di posta elettronica, è possibile specificare una versione Mime, il tipo di contenuto e il set di caratteri per inviare un messaggio di posta elettronica HTML.

Esempio

Di seguito è riportato un esempio per inviare il contenuto HTML come e-mail. Provalo una volta -

#!/usr/bin/python3
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"