使用Python的extract_msg模块读取邮件附件内容的问题求助
问题:Python extract_msg模块无法获取邮件附件内容
我用Python的extract_msg模块读取.msg邮件,能正常获取发件人、日期、主题、正文,但拿不到附件内容。打印attachments变量时,只显示Attachment对象列表,看不到实际内容。
我的代码:
import extract_msg import glob import re f = glob.glob('Time Off -DAYS.msg') for filename in f: msg = extract_msg.Message(filename) msg_from = msg.sender msg_date = msg.date msg_subj = msg.subject msg_message = msg.body attachments = msg.attachments msg_to = msg.to print("To:-",msg_to) print("From:-",msg_from) print ("Date:-",msg.date) print(attachments)
当前attachments输出(邮件含2个附件):
[<extract_msg.attachment.Attachment object at 0x0000024444C9FEF0>, <extract_msg.attachment.Attachment object at 0x0000024444E39C50>]
解决思路
- Attachment对象不是直接内容:你看到的列表里是
extract_msg.attachment.Attachment类的实例,需要调用它的属性和方法才能获取附件信息与内容。 - 获取附件基础信息:每个Attachment对象自带
filename(文件名)、fileExtension(文件后缀)、mime_type(MIME类型)等属性,可直接读取。 - 提取/保存附件内容:
- 调用
attachment.save()方法可直接将附件保存到当前目录(或指定路径); - 若要直接读取附件的二进制内容,可访问
attachment.content属性。
- 调用
修改后的示例代码
import extract_msg import glob f = glob.glob('Time Off -DAYS.msg') for filename in f: msg = extract_msg.Message(filename) # 打印邮件基础信息 print("To:-", msg.to) print("From:-", msg.sender) print("Date:-", msg.date) print("Subject:-", msg.subject) # 处理附件 print("\n=== 附件信息 ===") for idx, attachment in enumerate(msg.attachments, 1): # 获取附件基础信息 print(f"附件{idx}:") print(f"文件名:{attachment.filename}") print(f"MIME类型:{attachment.mime_type}") # 保存附件到当前目录 attachment.save() print(f"已保存附件:{attachment.filename}") # (可选)直接读取附件二进制内容 # attachment_content = attachment.content # 可将content写入文件或做其他处理
内容的提问来源于stack exchange,提问作者mkpj
相关产品推荐
相关产品推荐

