Как отправить вложения электронной почты?

У меня возникли проблемы с пониманием того, как отправлять вложения с помощью Python. Я успешно отправил простые сообщения с помощью smtplib . Не могли бы вы объяснить, как отправить вложение в электронном письме. Я знаю, что есть другие сообщения в Интернете, но, как начинающий Python, мне сложно их понять.

  • Ошибка входа в Gmail с использованием python и imaplib
  • Можно ли добавлять заголовки в электронные письма, отправляемые приложением?
  • Отправка почты через sendmail из python
  • Получение почтового вложения в файл файла python
  • IMAP получает имя отправителя и основной текст?
  • Как получать почту с помощью python
  • Переменные связывания Python cx_Oracle
  • 2D-графики не сидят на одном уровне с стенками 3D-оси в python mplot3D
  • В python, как захватить stdout из общей библиотеки c ++ в переменную
  • Как суммировать значения кортежей, которые имеют одинаковое имя в Python
  • Как установить флаг TCP_NODELAY при загрузке URL с urllib2?
  • Python: рекурсивно сгладить список
  • 5 Solutions collect form web for “Как отправить вложения электронной почты?”

    Вот еще один, адаптированный отсюда :

     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 def send_mail(send_from, send_to, subject, text, files=None, server="127.0.0.1"): assert isinstance(send_to, list) msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach(MIMEText(text)) for f in files or []: with open(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) smtp = smtplib.SMTP(server) smtp.sendmail(send_from, send_to, msg.as_string()) smtp.close() 

    Это почти то же, что и в первом примере … Но это должно быть проще.

    это код, который я закончил, используя:

     import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email import Encoders SUBJECT = "Email Data" msg = MIMEMultipart() msg['Subject'] = SUBJECT msg['From'] = self.EMAIL_FROM msg['To'] = ', '.join(self.EMAIL_TO) part = MIMEBase('application', "octet-stream") part.set_payload(open("text.txt", "rb").read()) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="text.txt"') msg.attach(part) server = smtplib.SMTP(self.EMAIL_SERVER) server.sendmail(self.EMAIL_FROM, self.EMAIL_TO, msg.as_string()) 

    Код очень похож на сообщение Оли. Спасибо всем

    Код, основанный на сообщении о проблеме с прикрепленным файлом в двоичном файле .

    Вот модифицированная версия от Oli для python 3

     import smtplib, os 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 def send_mail( send_from, send_to, subject, text, files=[], server="localhost", port=587, username='', password='', isTls=True): msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime = True) msg['Subject'] = subject msg.attach( MIMEText(text) ) for f in files: part = MIMEBase('application', "octet-stream") part.set_payload( open(f,"rb").read() ) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="{0}"'.format(os.path.basename(f))) msg.attach(part) smtp = smtplib.SMTP(server, port) if isTls: smtp.starttls() smtp.login(username,password) smtp.sendmail(send_from, send_to, msg.as_string()) smtp.quit() 
     from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage import smtplib msg = MIMEMultipart() msg.attach(MIMEText(file("text.txt").read())) msg.attach(MIMEImage(file("image.png").read())) # to send mailer = smtplib.SMTP() mailer.connect() mailer.sendmail(from_, to, msg.as_string()) mailer.close() 

    Адаптировано отсюда .

    Самый простой код, который я мог бы получить, это:

     #for attachment email from django.core.mail import EmailMessage def attachment_email(request): email = EmailMessage( 'Hello', #subject 'Body goes here', #body 'MyEmail@MyEmail.com', #from ['SendTo@SendTo.com'], #to ['bcc@example.com'], #bcc reply_to=['other@example.com'], headers={'Message-ID': 'foo'}, ) email.attach_file('/my/path/file') email.send() 

    Он основывался на официальной документации Django

    Python - лучший язык программирования в мире.