import imaplib
import email
from email.header import decode_header
import chardet
import string
import os
# 邮箱配置
username = "xxxxxx@yyy.com"
password = "授权码或者密码"
imap_server = "imap.xxxxxx.com" # 邮箱的IMAP服务器地址
# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL(imap_server)
mail.login(username, password)
mail.select("inbox") # 选择收件箱
# 搜索邮件
result, data = mail.search(None, "ALL") # 获取所有邮件的ID
if result == "OK":
for num in data[0].split():
result, data = mail.fetch(num, "(RFC822)")
if result == "OK":
raw_email = data[0][1]
msg = email.message_from_bytes(raw_email)
# 获取邮件主题
subject = decode_header(msg["Subject"])[0][0]
if isinstance(subject, bytes):
try:
subject = subject.decode('utf-8')
except UnicodeDecodeError:
# 如果解码失败,尝试使用 chardet 检测的编码
charset = chardet.detect(subject)['encoding']
if charset:
subject = subject.decode(charset)
else:
subject = subject.decode('gbk') # 或者使用其他备选编码方式
# 移除邮件主题中的特殊字符,例如回车符和换行符
subject = subject.replace("\r", "").replace("\n", "")
# 获取发件人
from_ = decode_header(msg.get("From"))[0][0]
if isinstance(from_, bytes):
try:
from_ = from_.decode('utf-8')
except UnicodeDecodeError:
# 如果解码失败,尝试使用 chardet 检测的编码
charset = chardet.detect(from_)['encoding']
if charset:
from_ = from_.decode(charset)
else:
from_ = from_.decode('gbk') # 或者使用其他备选编码方式
# 移除发件人中的特殊字符,例如回车符和换行符
from_ = from_.replace("\r", "").replace("\n", "")
# 移除文件名中的特殊字符,例如 <> 以及任何非法的文件名字符
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
filename = ''.join(c for c in subject if c in valid_chars)
# 添加文件扩展名
filename += ".eml"
with open(filename, "wb") as f:
f.write(raw_email)
print(f"已备份邮件: {subject} 来自 {from_}")
# 关闭连接
mail.close()
mail.logout()
备份邮件python代码
本文介绍了如何使用Python的imaplib和email库从IMAP服务器中检索邮件,提取主题、发件人信息,并将邮件内容保存为.eml文件。作者详细展示了登录、搜索邮件、解析邮件头信息及文件命名过程。
摘要由CSDN通过智能技术生成