【问题标题】:Filename of a maildir message - mailbox.Maildirmaildir 消息的文件名 - maildir.Maildir
【发布时间】:2013-02-26 15:38:02
【问题描述】:

我怎样才能安全地,并希望使用 Maildir 的标准 python 工具,找到 Maildir 消息的完整文件名和路径。 我想在删除之前将邮件消息文件写入 tar 文件。

我正在导入邮箱和 tarfile (++)

上下文:

Maildirs 列表(从文本文件创建)

遍历 Maildirs(简化),创建要删除的邮件列表,一个函数将获取邮件列表,并将邮件逐个附加到 tar 文件,然后删除邮件。

import mailbox
# Creating the list
for maildir in maildir_list
    inbox = mailbox.Maildir(maildir, factory=None, create=False)
      # Looping over folders, if (folder = Trash)
    for key,msg in inbox.iteritems():
        my_list.append(maildir, inbox, key, foldername

然后循环遍历列表以将邮件附加到 tar 文件并删除(丢弃)它们。

    import tarfile,mailbox
    # _box is allready initialized in the previous function
    for _maildir, _box, _key, _foldername in __my_list:
        __msg = _box[_key]
        __subdir = __msg.get_subdir()
        __suffix   = mailbox.Maildir.colon + __msg.get_info()
        if __suffix == mailbox.Maildir.colon:
            __suffix = ''
        __file_name = "%s/.%s/%s/%s%s" % ( _maildir, _foldername, __subdir, _key, __suffix )

        try:
            tar.add(__file_name)
            _box.discard(_key)
        except Exception as inst:
            error_type = type(inst)
            log_text = "%s\: ERROR %s - %s" % (error_type, __file_name, inst)
            log_this( logKeySub, log_text )
            e.write(log_text + "\n")

我查看了邮箱和电子邮件的 python 文档,搜索了 google、stackoverflow 等。 现在我使用 _maildir、_foldername、_key 和 get_info() 构建路径和文件名。

编辑: 根据 t-8ch 的评论,我做了以下调整:

for _maildir, _box, _key, _foldername in __my_list:
    try:
        __file = _box._toc[_key]
        __file_name = "%s/.%s/%s" % ( _maildir, _foldername, __file )
    except Exception as inst:
            error_type = type(inst) # Type Exception, inst.args, inst
            log_text = "%s\: ERROR with %s/.%s - %s - %s" % (error_type, _maildir, _foldername, _key, inst)
            log_this( logKeySub, log_text )
            e.write(log_text + "\n")
            continue

试运行证明它工作得很好。

【问题讨论】:

  • __my_list的值从何而来?
  • 我一定错过了你的评论,因为我直到现在才看到它。在另一个函数中,我有“for key, msg in box.iteritems()”,它填充了列表。
  • 这仍然无助于澄清。您使用的是哪个库,box 是如何初始化的?您使用的是Mailbox 还是其他?请编辑您的问题以包含相关信息。
  • 我已经编辑了我的问题。
  • 根据我在mailbox.py中看到的内容,我做了一个小的调整。如果mailbox.Maildir.colon + msg.get_info() == maildir.Maildir.colon --> suffix = '' - 但我仍然更喜欢标准工具,这样我就不必“构造”文件名。

标签: python maildir


【解决方案1】:

您可以使用Maildir._toc。这是一个字典,将邮件的键映射到相应文件的路径。这本字典是在Maildir._refresh() 中构建的。这允许仅按需延迟读取邮件文件,从而减少刷新所有邮件列表的时间(这种情况经常发生)。

(我确实在源代码中找到了这个)

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多