You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python从Gmail下载并保存JSON格式附件?

解决Gmail IMAP下载JSON附件到本地的问题

你已经成功定位到JSON格式的附件,只需要在匹配到application/json的分支里添加文件读取和保存的逻辑即可。以下是修改后的完整代码:

# based on Python example from codingforentrepreneurs
import imaplib
import email  # 补充导入email模块,原代码遗漏了这个
import os

host = 'imap.gmail.com'

def get_inbox(tempList):
    mail = imaplib.IMAP4_SSL(host)
    mail.login(tempList[0], tempList[2])
    mail.select("inbox")
    
    _, search_data = mail.search(None, 'UNSEEN')
    my_message = []
    
    # 定义保存附件的本地目录,不存在则创建
    save_dir = "./gmail_json_attachments"
    os.makedirs(save_dir, exist_ok=True)
    
    for num in search_data[0].split():
        email_data = {}
        _, data = mail.fetch(num, '(RFC822)')
        _, b = data[0]
        
        email_message = email.message_from_bytes(b)
        # 记录邮件主题,方便对应附件来源
        email_data['subject'] = email_message['subject']
        email_data['saved_attachments'] = []
        
        for part in email_message.walk():
            if part.get_content_type() == "application/json":
                # 获取附件原始文件名,若无则生成带邮件编号的默认名
                filename = part.get_filename() or f"email_{num}_attachment.json"
                save_path = os.path.join(save_dir, filename)
                
                # 解码附件内容并写入本地文件
                with open(save_path, 'wb') as f:
                    f.write(part.get_payload(decode=True))
                
                email_data['saved_attachments'].append(save_path)
                print(f"已保存JSON附件到: {save_path}")
                           
        my_message.append(email_data)
    
    return my_message

关键修改说明:

  • 补充email模块导入:原代码使用email.message_from_bytes但未导入模块,会导致运行报错。
  • 自动创建保存目录:用os.makedirs确保目标目录存在,避免路径不存在的写入错误。
  • 处理附件文件名:优先使用邮件里的原始文件名,无文件名时生成唯一默认名,避免文件覆盖。
  • 解码并保存内容:part.get_payload(decode=True)会自动处理邮件的编码格式(如base64),还原原始JSON字节内容,再以二进制模式写入本地。
  • 记录保存路径:将每个邮件的附件保存路径存入email_data,方便后续追踪附件来源。

注意事项:

  • Gmail登录需使用应用专用密码:若账号开启两步验证,不能直接用普通密码登录,需在Google账号设置中生成应用专用密码。
  • 权限检查:确保脚本有写入目标目录的权限。

内容的提问来源于stack exchange,提问作者karasu671

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:30