Outras respostas são excelentes, embora eu ainda quisesse compartilhar uma abordagem diferente, caso alguém estivesse procurando alternativas.
A principal diferença aqui é que, usando essa abordagem, é possível usar HTML / CSS para formatar sua mensagem, para que você seja criativo e dê um estilo ao seu email. Embora você não seja obrigado a usar HTML, também pode usar apenas texto sem formatação.
Observe que esta função aceita enviar o email para vários destinatários e também permite anexar vários arquivos.
Eu só tentei isso no Python 2, mas acho que deve funcionar bem no 3 também:
import os.path
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
def send_email(subject, message, from_email, to_email=[], attachment=[]):
"""
:param subject: email subject
:param message: Body content of the email (string), can be HTML/CSS or plain text
:param from_email: Email address from where the email is sent
:param to_email: List of email recipients, example: ["a@a.com", "b@b.com"]
:param attachment: List of attachments, exmaple: ["file1.txt", "file2.txt"]
"""
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = from_email
msg['To'] = ", ".join(to_email)
msg.attach(MIMEText(message, 'html'))
for f in attachment:
with open(f, 'rb') as a_file:
basename = os.path.basename(f)
part = MIMEApplication(a_file.read(), Name=basename)
part['Content-Disposition'] = 'attachment; filename="%s"' % basename
msg.attach(part)
email = smtplib.SMTP('your-smtp-host-name.com')
email.sendmail(from_email, to_email, msg.as_string())
Eu espero que isso ajude! :-)