MIMEMultipart, MIMEText, MIMEBase и полезные нагрузки для отправки электронной почты с вложенными файлами в Python

Без особых предварительных знаний о MIME я пытался научиться писать скрипт на Python для отправки электронного письма с вложенным файлом. После перекрестных ссылок на документацию по Python, вопросы о переполнении стека и общий поиск в Интернете я остановился на следующем коде[1] и проверил это, чтобы работать.

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

fromaddr = "YOUR EMAIL"
toaddr = "EMAIL ADDRESS YOU SEND TO"

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "SUBJECT OF THE EMAIL"

body = "TEXT YOU WANT TO SEND"

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

filename = "NAME OF THE FILE WITH ITS EXTENSION"
attachment = open("PATH OF THE FILE", "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)

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "YOUR PASSWORD")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

У меня есть приблизительное представление о том, как работает этот скрипт, и я разработал следующий рабочий процесс. Пожалуйста, дайте мне знать, насколько точна моя блок-схема (?).

 as.string()  
 |
 +------------MIMEMultipart  
              |                                                |---content-type  
              |                                   +---header---+---content disposition  
              +----.attach()-----+----MIMEBase----|  
                                 |                +---payload (to be encoded in Base64)
                                 +----MIMEText

Как узнать, когда использовать MIMEMultipart, MIMEText и MIMEBase? Это кажется сложным вопросом, так что, может быть, просто предложите мне некоторые общие правила?

Я читал, что MIME имеет древовидную структуру[2] Означает ли это, что MIMEMultipart всегда на вершине?В первом блоке кода MIMEMultipart кодирует ['From'], ['To'] и ['Subject'], но в документации Python MIMEText также может использоваться для кодирования ['From'], ['To' ] и ['Тема']. Как мне выбрать один для использования?Что такое «полезная нагрузка»? Это какой-то контент для транспортировки? Если да, то к какому контенту это относится (я заметил, что основной текст и вложения рассматриваются как полезные данные)? Я думал, что это будет простой вопрос, но я просто не мог найти удовлетворительный, надежный и простой ответ.Верно ли, что, хотя MIME может прикреплять форматы файлов гораздо проще, чем просто некоторые тексты, в конце концов все кодирование, информация заголовка и полезные данные превращаются в строки, чтобы их можно было передавать в .sendmail ()?

[1]http://naelshiab.com/tutorial-send-email-python/
[2]http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial

Ответы на вопрос(1)

Ваш ответ на вопрос