【发布时间】: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 = '' - 但我仍然更喜欢标准工具,这样我就不必“构造”文件名。