MIMEMultipart, MIMEText, MIMEBase und Payloads zum Senden von E-Mails mit Dateianhang in Python

Ohne viel Vorwissen über MIME habe ich versucht zu lernen, wie man ein Python-Skript schreibt, um eine E-Mail mit einem Dateianhang zu senden. Nachdem ich die Python-Dokumentation, Fragen zum Stapelüberlauf und die allgemeine Websuche durchgegangen war, entschied ich mich für den folgenden Cod [1] und getestet es funktioniert.

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()

Ich habe eine ungefähre Vorstellung davon, wie dieses Skript jetzt funktioniert, und habe den folgenden Workflow ausgearbeitet. Bitte lassen Sie mich wissen, wie genau mein Flussdiagramm (?) Ist.

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

Wie weiß ich, wann ich MIMEMultipart, MIMEText und MIMEBase verwenden soll? Dies scheint eine komplizierte Frage zu sein. Bieten Sie mir also vielleicht nur einige allgemeine Faustregeln an?

Ich habe gelesen, dass MIME eine baumartige Struktur hat [2], heißt das, dass MIMEMultipart immer ganz oben ist?Im ersten Codeblock codiert MIMEMultipart ['From'], ['To'] und ['Subject']. In der Python-Dokumentation kann MIMEText jedoch auch zum Codieren von ['From'], ['To'] verwendet werden '] und [' Betreff ']. Wie entscheide ich mich für eine?Was genau ist eine "Nutzlast"? Ist es etwas Inhalt, der transportiert werden soll? Wenn ja, welche Art von Inhalten sind darin enthalten (ich habe festgestellt, dass Textkörper und Anhänge als Nutzdaten behandelt werden)? Ich dachte, das wäre eine einfache Frage, aber ich konnte einfach keine befriedigende, zuverlässige und einfache Antwort finden.Ist es wahr, dass, obwohl MIME Dateiformate viel einfacher als nur einige Texte anhängen kann, am Ende alle Codierungen, Headerinformationen und Nutzdaten in Zeichenfolgen umgewandelt werden, damit sie an .sendmail () übergeben werden können?

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage