2011-03-05 47 views
2

我正在用Python编写一个脚本,该脚本只保存来自Gmail的附件,只能从未看到的电子邮件中保存。为了节省带宽,我想确保每个文件只被下载一次。避免通过IMAP下载文件两次的方法

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

- 现在我把文件名保存到一个sqlite数据库中,但有两个问题:我没有想出如何在下一次运行脚本时检查数据库的文件名,还有一些机会,以相同的文件名到达,然后不会被下载。

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

回答

0

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

+2

这将是Message-id头。 – Satya 2011-03-05 14:27:25

+0

,我会如何称呼这些?就像我说的,我还没有想出如何检查数据库的文件名(在这种情况下也是消息ID),我该怎么做? – HankSmackHood 2011-03-05 14:36:30

+0

executeQuery(“SELECT COUNT(*)FROM table WHERE msgID =?”,msgID) – 2011-03-05 15:15:54

0

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

1

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

+0

感谢您的建议,但那不是我正在寻找的:) – HankSmackHood 2011-03-05 15:00:33