luglio 19, 2022 · python

Inviare una mail con Python

Di recente mi sono trovato a dover provare il server SMTP di una macchina SAP, che non è accessibile liberamente da Internet per motivi di sicurezza. Quindi ho messo assieme un rapido script python per testare la soluzione in locale, con la possibilità di aggiungere anche un allegato PDF. Lo lascio qui sotto a futura memoria.

Importiamo un pò di dipendenze:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

Prepariamo un pò di parametri:

fromaddr = "sender@sender.it"
toaddr = "mario@mario.it"
subject = "Oggetto email"
body = "Email di prova per testare invio di allegato"
filename = "nomefile.pdf"
filepath = "./" + filename
server_url = "<indirizzo locale server>"

Costruiamo il messaggio con l'allegato:

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = subject

msg.attach(MIMEText(body, 'plain'))

attachment = open(filepath, "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

msg.attach(part)

text = msg.as_string()

Inviamo il messaggio al server:

smtpObj = smtplib.SMTP(server_url)
smtpObj.sendmail(fromaddr, toaddr, text) 
smtpObj.quit()