首页 > 解决方案 > 如何使用 python 从 EML 文件开始在 imap 文件夹中搜索邮件?

问题描述

我试图在我的 imap 文件夹中选择一个特定的邮件,但没有明确的标识符。我唯一拥有的是保存为 eml 文件的邮件的纯文本副本。

我尝试使用email模块从文件中加载邮件,但每当我imaplib从邮件中包含的数据开始运行模块的搜索功能时,我都会不断收到错误消息。

在这种情况下,我假设邮件来自当前邮箱。

这是我现在使用的代码

import imaplib, email

m = imaplib.IMAP4_SSL(IMAP_SERVER)
m.login(IMAP_USER, IMAP_PWD)
m.select()

mail_file = open('./file.eml')
raw_mail = mail_file.read()
mail = email.message_from_string(raw_mail)

resp, items = m.search(None, '(FROM "' + mail["FROM"] +'")')

但我收到以下错误:

回溯(最近一次通话最后):

  File "<stdin>", line 1, in <module>
  File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 707, in search
    typ, dat = self._simple_command(name, *criteria)
  File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 1180, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "C:\Users\user\AppData\Local\conda\conda\envs\py353\lib\imaplib.py", line 1011, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD [b'Error in IMAP command SEARCH: Unknown argument DATE (0.000 + 0.000 secs).']`

我应该如何做到这一点以及我可以使用哪些过滤器来有合理的机会在结果中获得我想要的邮件?

编辑:按要求我的mail['FROM']回报'test sender\n\t<sender@domain.com>'

我做了一个类似格式的硬编码测试并删除了特殊字符,但当然我收到了一封不同的邮件,其中有匹配的发件人。此外,我试图在不以最自动的方式更改任何数据的情况下获取正确的邮件。

标签: pythonimaplib

解决方案


推荐阅读