import imaplib
import email
from email.header import decode_header
from email.utils import parsedate_to_datetime
from html2text import html2text
from datetime import datetime
IMAP_SERVER = 'imap.qq.com' # 例如: 'imap.gmail.com'
IMAP_PORT = 993 # 默认IMAP端口为993
EMAIL_ADDRESS = 'yourname@qq.com' # 你的邮箱地址
EMAIL_PASSWORD = 'xxxxxxxxxxxxxx' # IMAP授权密码
# 创建 IMAP 连接
mail = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
# 登录邮箱
mail.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
# 选择邮箱文件夹
mail.select('INBOX')
# 搜索符合条件的邮件
result, data = mail.search(None, 'ALL')
# 获取邮件编号列表
email_ids = data[0].split()
# 获取最新一封邮件的内容
latest_email_id = email_ids[-1]
result, data = mail.fetch(latest_email_id, '(RFC822)')
# 解析邮件内容
raw_email = data[0][1]
email_message = email.message_from_bytes(raw_email)
subject, encoding = decode_header(email_message['Subject'])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding if encoding else 'utf-8')
print('标题:', subject)
print('寄件人:', email_message['From'].encode('utf-8'))
print('收件人:', email_message['To'])
local_time_str = datetime.fromtimestamp(parsedate_to_datetime(email_message['Date']).timestamp()).strftime('%Y-%m-%d %H:%M:%S')
print('日期:', local_time_str)
payload = email_message.get_payload(decode=True)
text_content = ""
if email_message.is_multipart():
# 如果邮件是多部分消息,则递归处理每个部分
for part in email_message.get_payload():
if part.get_content_type() == "text/html":
text_content += part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8')
else:
text_content = email_message.get_payload(decode=True).decode('utf-8')
print('内容:',html2text(text_content))
# 关闭连接
mail.logout()
input('Press Enter to exit...')