如何自动下载设备每日发送的CSV邮件附件?
自动下载CSV邮件附件的实现方案
一、Python脚本核心实现(无需自建邮箱服务)
不用搭建额外邮箱服务,直接通过Python访问现有收件邮箱拉取附件即可,核心步骤如下:
- 依赖工具:用Python标准库
imaplib(处理IMAP协议,主流邮箱均支持)+email库解析邮件;嫌标准库繁琐的话,可改用第三方库imapclient简化操作。 - 核心逻辑:
- 开启收件邮箱的IMAP服务,获取授权码(替代登录密码,比如QQ/163邮箱在账户设置中开启IMAP后生成)
- 连接对应邮箱的IMAP服务器(如QQ邮箱
imap.qq.com,163邮箱imap.163.com) - 登录后筛选目标邮件:按发件人(设备固定邮箱)、日期(当日)、是否含CSV附件等条件过滤,避免误下载
- 解析匹配邮件,提取CSV附件并保存到指定目录
- 示例代码片段:
import imaplib import email from email.header import decode_header import os # 邮箱配置 IMAP_SERVER = "imap.xxx.com" USERNAME = "your_email@xxx.com" PASSWORD = "your_auth_code" # 邮箱授权码,非登录密码 SAVE_FOLDER = "./daily_csv_data" # 创建保存目录 os.makedirs(SAVE_FOLDER, exist_ok=True) # 连接并登录IMAP服务器 mail = imaplib.IMAP4_SSL(IMAP_SERVER) mail.login(USERNAME, PASSWORD) mail.select("inbox") # 搜索指定发件人的当日邮件(可根据需求调整搜索条件) status, messages = mail.search(None, '(FROM "device_email@xxx.com" ON "01-Oct-2024")') # 遍历并提取附件 for num in messages[0].split(): status, msg_data = mail.fetch(num, "(RFC822)") msg = email.message_from_bytes(msg_data[0][1]) # 遍历邮件内容,筛选CSV附件 for part in msg.walk(): if part.get_content_maintype() == 'multipart' or part.get('Content-Disposition') is None: continue filename = part.get_filename() if filename and filename.endswith('.csv'): # 解码文件名并保存 if isinstance(filename, bytes): filename = filename.decode('utf-8') filepath = os.path.join(SAVE_FOLDER, filename) with open(filepath, 'wb') as f: f.write(part.get_payload(decode=True)) print(f"已保存附件: {filepath}") # 关闭连接 mail.close() mail.logout()
二、树莓派部署方案
将脚本部署到树莓派,实现每日自动执行:
- 确保树莓派联网,自带的Python3即可满足需求
- 将脚本复制到树莓派,配置好邮箱信息和附件保存路径
- 用
cron定时任务实现自动运行:- 终端输入
crontab -e编辑任务 - 添加一行(示例为每日23点执行,可根据设备发件时间调整):
0 23 * * * /usr/bin/python3 /home/pi/scripts/download_csv.py >> /home/pi/scripts/csv_log.log 2>&1 - 保存退出后,cron会自动生效,日志可通过指定文件查看
- 终端输入
三、关键注意事项
- 必须开启收件邮箱的IMAP服务,使用授权码而非登录密码登录
- 邮件搜索条件要精准(指定发件人/主题/日期),避免下载无关附件
- 树莓派上要确保脚本路径、Python路径正确,定时任务用户有目录读写权限
四、学习资料推荐
- Python官方文档:
imaplib与email模块的官方说明,覆盖邮件解析、IMAP操作的全部API - Linux Cron教程:树莓派基于Debian,通用Linux Cron教程均可参考,讲解定时任务的配置与调试
imapclient库文档:第三方封装的IMAP操作库,提供更简洁的API,适合快速开发
内容的提问来源于stack exchange,提问作者NotARobot
相关产品推荐
相关产品推荐

