[Python]使用 python 下載 gmail 附件
每天都會收到信並且要利用信中的附件整理資料, 但這樣我在跑程式前還要手動去下載檔案, 覺得實在太麻煩, 所以找到了這個辦法!
因為我的mail是gamil, 所以以下的程式碼是針對gmail, 在執行前要先打開imap 我主要是參考這裡
import imaplib, inspect
import email
import os
from datetime import datetime
from email.header import decode_header
inspect.getmro(imaplib.IMAP4_SSL)
#與IMAP4 server連線,gmail要開啟IMAP
imap = imaplib.IMAP4_SSL('imap.gmail.com')
#登入
imap.login('mymailaddress@gmail.com', 'mypasswd')
#選擇信箱標籤
imap.select("label")
#找所有mail
resp, mails = imap.search(None, "ALL")
#讀取信件內容,只抓取最新一封信件(len(mails[0].split())-1)
resp, data = imap.fetch(mails[0].split()[len(mails[0].split())-1], '(RFC822)')
emailbody = data[0][1]
mail = email.message_from_string(emailbody)
#找出含有附件的部分
for part in mail.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
#附件檔名
fileName = part.get_filename()
#修改檔名編碼<http://stackoverflow.com/questions/11206489/how-to-print-next-year-from-current-year-in-python>
fileName = str(datetime.now().year - 1911) + str(decode_header(fileName)[0][0]).decode(decode_header(fileName)[0][1])
if bool(fileName):
filePath = os.path.join("C:\\Users\\mypc\\Desktop\\data", fileName)
if not os.path.isfile(filePath) :
fp = open(filePath, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
print "attachement is downloaded!"
else:
print "file is already exist!"
#關閉連線與登出
imap.close()
imap.logout()