У меня возникли проблемы с пониманием того, как отправлять вложения по электронной почте с помощью Python. Я успешно отправлял простые сообщения по электронной почте с помощью smtplib. Не мог бы кто-нибудь объяснить, как отправить вложение по электронной почте. Я знаю, что в Интернете есть и другие сообщения, но как новичку в Python мне трудно их понять.
Переведено автоматически
Ответ 1
Вот еще:
import smtplib from os.path import basename from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate
for f in files or []: withopen(f, "rb") as fil: part = MIMEApplication( fil.read(), Name=basename(f) ) # After the file is closed part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f) msg.attach(part)
Это почти то же самое, что и в первом примере... Но использовать его должно быть проще.
Ответ 2
Вот модифицированная версия от Oli для python 3
import smtplib from pathlib import Path from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders
defsend_mail(send_from, send_to, subject, message, files=[], server="localhost", port=587, username='', password='', use_tls=True): """Compose and send email with provided info and attachments.
Args: send_from (str): from name send_to (list[str]): to name(s) subject (str): message title message (str): message body files (list[str]): list of file paths to be attached to email server (str): mail server host name port (int): port number username (str): server auth username password (str): server auth password use_tls (bool): use TLS mode """ msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject
msg.attach(MIMEText(message))
for path in files: part = MIMEBase('application', "octet-stream") withopen(path, 'rb') as file: part.set_payload(file.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename={}'.format(Path(path).name)) msg.attach(part)