Inne odpowiedzi są doskonałe, chociaż nadal chciałem podzielić się innym podejściem na wypadek, gdyby ktoś szukał alternatyw.
Główną różnicą jest to, że stosując to podejście, możesz użyć HTML / CSS do sformatowania wiadomości, dzięki czemu możesz wykazać się kreatywnością i nadać stylizację swojej wiadomości e-mail. Chociaż nie jesteś zmuszony do używania HTML, możesz nadal używać tylko zwykłego tekstu.
Zauważ, że ta funkcja akceptuje wysyłanie wiadomości e-mail do wielu odbiorców, a także umożliwia dołączanie wielu plików.
Próbowałem tego tylko na Pythonie 2, ale myślę, że powinno również działać dobrze na 3:
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())
Mam nadzieję, że to pomoże! :-)