当 header 值由变量而不是字符串给出时,为什么 'IMAP search by header' 会失败?

Why does an 'IMAP search by header' fail when the header value is given by a variable, not a string?

我可以获得具有特定 header 值的电子邮件的 uid,如下所示:

    res, tmp = self.mail.uid('search', None, '(HEADER Message-ID "<123.456.789@localhost>")')

然后,tmp 变为

[b'2993']

但我从文件中获取了 Message-ID 值,将该值存储到变量 (msg_ID) 中,并将 msg_ID 变量作为输入。

当我尝试上面的方法时:

tmp = "<123.456.789@localhost>"
res, tmp = self.mail.uid('search', None, '(HEADER Message-ID tmp)')

tmp returns 一个空列表

[b'']

,表示搜索目标邮箱失败。

如何使用变量给出适当的输入?

在您的示例中,您发送的是实际字符串 tmp - 它不会在字符串内神奇地展开。

您还缺少字符串周围的其他格式,应添加这些格式以使它们相同:

'(HEADER Message-ID "' + tmp + '")'

这样你的字符串实际上是相同的并且它应该如你所期望的那样工作。在编写代码时,您只是要求发送 Message-ID 字面上设置为 tmp.

的电子邮件

我也可以使用

来解决这个问题
res, tmp = self.mail.uid('search', None, '(HEADER Message-ID %s)' %tmp)