2016-11-03 48 views
4

匹配MIME附件,我發現這個片段在正式examples用Python創建

if maintype == 'text': 
     fp = open(path) 
     # Note: we should handle calculating the charset 
     msg = MIMEText(fp.read(), _subtype=subtype) 
     fp.close() 
    elif maintype == 'image': 
     fp = open(path, 'rb') 
     msg = MIMEImage(fp.read(), _subtype=subtype) 
     fp.close() 
    elif maintype == 'audio': 
     fp = open(path, 'rb') 
     msg = MIMEAudio(fp.read(), _subtype=subtype) 
     fp.close() 
    else: 
     fp = open(path, 'rb') 
     msg = MIMEBase(maintype, subtype) 
     msg.set_payload(fp.read()) 
     fp.close() 
     # Encode the payload using Base64 
     encoders.encode_base64(msg) 

我需要的正是這種功能:任何類型的文件添加到電子郵件中。

我想避免這麼長的if-elif-elif部分,因爲它對我來說看起來多餘。

有沒有通用的方式將任何類型的數據附加到電子郵件?

在我的情況「的所有類型的數據」是指:

  • 該文件是長
  • 只有不到兩個百萬字節的MIME類型可以通過mimetypes.guess_type()

回答

2

來猜是否沒有將任何類型的數據附加到電子郵件的通用方式?

您可以擺脫第一種情況,只保留MIMEBase,這是MIME類型的基礎(即泛型)類。

第一種情況只是您可以做的一些例子,如果您想對某些類型進行特定處理。

+0

謝謝你的回答。我問自己在生產代碼中存在多少無用的代碼行,這些代碼行來自官方的python文檔。我猜想有數百名程序員複製粘貼而沒有思考的例子並將其插入到他們的代碼中......快樂的膨脹:-) – guettli

+0

您也可以查看'/usr/lib/python3.5/email的代碼/ mime/application.py','/ usr/lib/python3.5/email/mime/image.py'等等,它幾乎是空的 –