Email

用於解析電子郵件以刪除特定名稱附件的腳本或工具

  • April 15, 2013

我已經配置了 Redmine 電子郵件集成,雖然它很棒,但一個主要的煩惱是人們擁有包含公司徽標的簽名,然後將其發佈到他們通過電子郵件更新的每張票上。我知道這不是一個完美的解決方案,但我想通過管道傳輸到一個腳本,該腳本從消息中刪除名為“image001.png”的附件,這樣我就可以將它傳遞給處理程序。是否有可用的工具來幫助解決這個問題,還是我必須從頭開始?

前:alias > mailhandler.rb

後:alias > parser.script > mailhandler.rb

我個人會選擇 Andrzej A. Filip 建議的 MIMEDefang 選項,但我想知道如何在 python 腳本中編寫它並提出以下解決方案。如果 MIMEDefang 不適合您的環境,您可能想嘗試一下。沒有保證,僅使用一些範例消息進行了測試

#!/usr/bin/python
import email
import sys

def remove_attachment(rootmsg,attachment_name):
   """return message source without the first occurence of the attachment named <attachment_name> or None if the attachment was not found"""
   for msgrep in rootmsg.walk():
       if msgrep.is_multipart():
           payload=msgrep.get_payload()
           indexcounter=0
           for attachment in payload:
               att_name = attachment.get_filename(None)
               if att_name==attachment_name:
                   del payload[indexcounter]
                   return rootmsg.as_string()
               indexcounter+=1

if __name__=='__main__':
   incontent=sys.stdin.read()
   try:
       rootmsg=email.message_from_string(incontent)
   except:
       sys.stderr.write("Message could not be parsed")
       sys.exit(1)
   src=remove_attachment(rootmsg,'image001.png')

   if src!=None:
       sys.stdout.write(src)
   else:
       sys.stdout.write(incontent)

引用自:https://serverfault.com/questions/499386