避免通过IMAP下载文件两次的方法

时间:2011-03-05 14:19:47

标签: python imaplib

我正在编写一个Python脚本,可以保存Gmail中的附件,只能从看不见的电子邮件中保存。为了节省带宽,我想确保每个文件只下载一次。

- 我无法检查保存它们的文件夹,因为文件可能已被删除,然后不应再次下载。 (脚本访问收件箱read_only,因此它不会将电子邮件标记为已读。一旦脚本再次运行,它将再次下载相同的附件,直到电子邮件被标记为通过另一个频道读取。)

- 现在我将文件名保存到sqlite数据库,但是有两个问题:我没有想到下次运行脚本时如何检查数据库中的文件名,并且还有一些机会附件到达的行使用相同的文件名,然后无法下载。

什么是安全且可扩展的方法,以确保我不会多次下载文件?

3 个答案:

答案 0 :(得分:1)

Python中有几个开源项目已经很好地执行了这项任务。为什么不查看OfflineIMAPgetmail的源代码。此外,如果您只是想备份您的GMail帐户,我建议您使用其中一个而不是自己动手...

答案 1 :(得分:0)

您不仅可以将文件名保存到数据库,还可以保存例如邮件的Date:-header。 (或者您确定它们唯一定义邮件的任何标题组合。)

答案 2 :(得分:0)

您可以获取邮件的标头,并使用邮件的Date和/或Message-Id标头值为该邮件中的所有附件构建“唯一ID前缀”。然后创建[unique_id]_[filename]形式的密钥,检查数据库或文件系统中是否存在该密钥。如果没有,请下载该邮件的所有附件,并使用修改后的唯一ID密钥保存每个附件。