雖然是用在接收BOSS直聘郵件的,但也可以改爲其他郵箱,不過解析需要自己修改
import imaplib
import email
import os
import base64
from email.header import decode_header
import re
# 郵箱信息
email_user = ''
email_pass = ''
# 連接到IMAP服務器
imap_server = 'imap.xxx' # 請替換成你的郵箱提供商的IMAP服務器地址
imap = imaplib.IMAP4_SSL(imap_server)
# 登錄到郵箱
imap.login(email_user, email_pass)
# 選擇郵箱文件夾(如收件箱)
folder = 'INBOX' # 可以根據需要更改爲其他文件夾
imap.select(folder)
# 設置搜索條件(日期和發件人)
search_criteria = '(FROM "[email protected]" SINCE "14-SEP-2023")'
# 搜索匹配的郵件
status, email_ids = imap.search(None, search_criteria)
# 遍歷匹配的郵件
for email_id in email_ids[0].split():
# 獲取郵件
status, email_data = imap.fetch(email_id, '(RFC822)')
raw_email = email_data[0][1]
# 解析郵件
msg = email.message_from_bytes(raw_email)
# 遍歷附件
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
# 獲取附件名稱並解碼
filename = part.get_filename()
if filename:
filename, encoding = decode_header(filename)[0]
if isinstance(filename, bytes):
filename = filename.decode(encoding or 'utf-8')
# 處理Base64編碼的附件內容
file_data = part.get_payload(decode=True)
file_data_decoded = base64.b64decode(file_data)
filename = filename[1:] # 保存附件
filename = "".join(x for x in filename if x.isalnum() or x in ["-", "_", "."])
# 解碼 Base64 編碼的附件內容
# 解碼 Base64 編碼的附件內容
payload = part.get_payload(decode=True)
try:
payload_decoded = payload.decode('utf-8')
except UnicodeDecodeError:
payload_decoded = payload
# 保存附件到 D 盤的 A 文件夾下
file_path = os.path.join('D:\\A\\', filename) # 替換爲你想保存附件的文件夾路徑
with open(file_path, 'wb') as file:
file.write(payload_decoded)
# 關閉連接
imap.logout()