如何在 imaplib SINCE 和 BEFORE 中使用变量

How to use variables with imaplib SINCE and BEFORE

我正在使用 imaplib 获取邮箱在特定日期收到的电子邮件数量,效果很好,但我想更进一步,使用变量 select 日期范围(使用 SINCE 和BEFORE) 并循环打印从选定的开始日期到今天收到的每日电子邮件数。

但是,当我用今天的日期变量替换之前的日期时,我已经收到一条错误消息:

from datetime import date,timedelta

today = date.today()
tdate = today.strftime("%d-%b-%Y")


obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)  
obj.login('xxx@gmail.com', 'password')  
obj.select('Inbox')     
('OK', ['50'])  
gmail_count = obj.search(None,'(SINCE "28-Aug-2020" BEFORE "tdate")') 
values = gmail_count[1][0]
replaced = values.decode("utf-8").replace(" ", ",")
replaced.count(",") + 1

error: SEARCH command error: BAD [b'Could not parse command']

有没有办法避免这种情况?

如果我理解正确,您正试图将 variable 值用于 select SINCE & BEFORE 的日期范围。由于 obj.search() 的第二个参数在传入之前仅接受字符串值 format the string

例如

你可以像这样设置一个格式化的变量并在其中传递变量值

rangeVals = (SINCE "{}" BEFORE "{}").format("<Start-Date>,<End-Date>")

然后将变量作为参数传递,像这样

gmail_count = obj.search(None, rangeVals) 

如果解决方案不成功,请考虑更新问题的错误跟踪。