MIMEMultipart, MIMEText, MIMEBase und Nutzlasten für das senden von E-Mail mit Datei-Anhang in Python

Ohne viel Vorkenntnisse der MIME, versuchte ich lernte, wie zu schreiben Sie ein Python-Skript zum senden einer E-Mail mit einem Dateianhang. Nach der cross-referencing Python-Dokumentation, Stack Overflow Fragen, und die Allgemeine web-Suche, ließ ich mich mit dem folgenden code [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()
  1. Ich habe eine grobe Vorstellung davon, wie das Skript funktioniert jetzt, und arbeitete die folgenden workflow. Bitte lassen Sie mich wissen, wie genau meine Flussdiagramm(?) ist.

     as.string()  
     |
     +------------MIMEMultipart  
                  |                                                |---content-type  
                  |                                   +---header---+---content disposition  
                  +----.attach()-----+----MIMEBase----|  
                                     |                +---payload (to be encoded in Base64)
                                     +----MIMEText
  2. Woher weiß ich, Wann MIMEMultipart, MIMEText und MIMEBase? Dies scheint eine komplizierte Frage, also vielleicht nur einige Allgemeine Regeln-of-Daumen für mich?

  3. Ich gelesen, dass die Pantomime eine Baum-Struktur wie[2] , bedeutet das, dass MIMEMultipart ist immer an der Spitze?
  4. In der ersten code-block, MIMEMultipart kodiert ['Von'], ['In'] und ['Betreff'], aber in der Python-Dokumentation, MIMEText kann auch verwendet werden, um zu Kodieren ['Von'], ['In'] und ['Betreff']. Wie kann ich entscheiden, einen zu verwenden?
  5. Was genau ist ein "payload"? Ist es, einige Inhalte werden transportiert? Wenn ja, welche Art von Inhalt funktioniert diese umfassen (I bemerkt, dass der Textkörper und der Anhang behandelt werden als payloads)? Ich dachte, das wäre eine einfache Frage, aber ich konnte einfach nicht finden, eine befriedigende, zuverlässige und einfache Antwort.
  6. Ist wahr, dass, obwohl MIME-Anhängen können Datei-Formate viel einfacher, als nur einige Texte, die am Ende alle das encoding, header-Informationen und Nutzlasten sind alles drehte sich in Zeichenfolgen, so dass Sie übergeben werden .sendmail()?

[1]http://naelshiab.com/tutorial-send-email-python/

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

InformationsquelleAutor Ken Lin | 2016-08-08
Schreibe einen Kommentar