【问题标题】:Way to avoid downloading file twice via IMAP避免通过 IMAP 两次下载文件的方法
【发布时间】:2011-07-09 10:15:37
【问题描述】:

我正在用 Python 编写一个脚本,用于保存来自 Gmail 的附件,仅来自看不见的电子邮件。为了节省带宽,我想确保每个文件只下载一次。

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

-现在我将文件名保存到 sqlite 数据库,但是有两个问题:我还没有弄清楚下次运行脚本时如何检查数据库中的文件名,并且还有可能在某些时候出现故障附件以相同文件名到达的行,然后不会被下载。

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

【问题讨论】:

    标签: python imaplib


    【解决方案1】:

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

    【讨论】:

    • 感谢您的建议,但这并不是我想要的:)
    【解决方案2】:

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

    【讨论】:

    • 那将是 Message-id 标头。
    • 我怎么称呼它们?就像我说的,我还没有弄清楚如何检查数据库的文件名(在这种情况下还有消息 ID),我该怎么做?
    • executeQuery("SELECT COUNT(*) FROM table WHERE msgID = ?", msgID)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2011-06-06
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多