使用 IMAP 和 Python 获取 n 最近的电子邮件
我希望使用 IMAP 从电子邮件帐户收件箱返回 n(很可能是 10)封最近的电子邮件。
到目前为止,我已经拼凑起来:
import imaplib
from email.parser import HeaderParser
M = imaplib.IMAP4_SSL('my.server')
user = 'username'
password = 'password'
M.login(user, password)
M.search(None, 'ALL')
for i in range (1,10):
data = M.fetch(i, '(BODY[HEADER])')
header_data = data[1][0][1]
parser = HeaderParser()
msg = parser.parsestr(header_data)
print msg['subject']
这可以很好地返回电子邮件标头,但它似乎是它收到的电子邮件的半随机集合,而不是最近的 10 封。
如果有帮助,我将连接到 Exchange 2010 服务器。也欢迎其他方法,考虑到我只想阅读电子邮件而不发送任何电子邮件,IMAP 似乎是最合适的。
I'm looking to return the n (most likely 10) most recent emails from an email accounts inbox using IMAP.
So far I've cobbled together:
import imaplib
from email.parser import HeaderParser
M = imaplib.IMAP4_SSL('my.server')
user = 'username'
password = 'password'
M.login(user, password)
M.search(None, 'ALL')
for i in range (1,10):
data = M.fetch(i, '(BODY[HEADER])')
header_data = data[1][0][1]
parser = HeaderParser()
msg = parser.parsestr(header_data)
print msg['subject']
This is returning email headers fine, but it seems to be a semi-random collection of emails that it gets, not the 10 most recent.
If it helps, I'm connecting to an Exchange 2010 server. Other approaches also welcome, IMAP just seemed the most appropriate given that I only wanted to read the emails not send any.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
sort 命令可用,但不保证 IMAP 服务器支持。例如,Gmail 不支持 SORT 命令。
要尝试排序命令,您需要替换:
M.search(无,'全部')
与
M.sort(search_critera, 'UTF-8', 'ALL')
然后
search_criteria
将是一个字符串,例如:根据 RFC5256 这些是有效的
排序键
:“到达”/“抄送”/“日期”/“发件人”/“尺寸”/“主题”/“收件人”
注意:
1. 字符集是必需的,尝试
US-ASCII
或UTF-8
所有其他字符集不需要 IMAP 服务器支持2. 还需要搜索条件。
ALL
命令是有效的命令,但有很多命令。查看更多信息 http://www.networksorcery.com/enp/rfc/rfc3501.txt< /a>IMAP 的世界是狂野而疯狂的。祝你好运
The sort command is available, but it is not guaranteed to be supported by the IMAP server. For example, Gmail does not support the SORT command.
To try the sort command, you would replace:
M.search(None, 'ALL')
with
M.sort(search_critera, 'UTF-8', 'ALL')
Then
search_criteria
would be a string like:According to RFC5256 these are valid
sort-key
's:"ARRIVAL" / "CC" / "DATE" / "FROM" / "SIZE" / "SUBJECT" / "TO"
Notes:
1. charset is required, try
US-ASCII
orUTF-8
all others are not required to be supported by the IMAP server2. search critera is also required. The
ALL
command is a valid one, but there are many. See more at http://www.networksorcery.com/enp/rfc/rfc3501.txtThe world of IMAP is wild and crazy. Good luck
https://github.com/ikvk/imap_tools
https://github.com/ikvk/imap_tools
这是获取 emailFrom、emailSubject、emailDate、emailContent 等的代码。
This is the code to get the emailFrom, emailSubject, emailDate, emailContent etc..
这对我有用〜
这是获得更新的电子邮件功能:
this is work for me~
and this is get the newer email function :
Gmail 的解决方法。由于 IMAP.sort('DATE','UTF-8','ALL') 不适用于 gmail,我们可以将值和日期插入列表中,并以与日期相反的顺序对列表进行排序。可以使用计数器检查前 n 封邮件。如果有数百封邮件,此方法将花费几分钟的时间。
Workaround for Gmail. Since the The IMAP.sort('DATE','UTF-8','ALL') does not work for gmail ,we can insert the values and date into a list and sort the list in reverse order of date. Can check for the first n-mails using a counter. This method will take a few minutes longer if there are hundreds of mails.
要获取最新的邮件:
这将返回第二个返回值中包含的所有邮件号码,该返回值是一个包含字节对象的列表:
这将分割字节对象,通过访问负索引可以获取最后一个元素:
您可以使用邮件号码访问相应的邮件。
To get the latest mail:
This will return all the mail numbers contained inside the 2nd return value which is a list containing a bytes object:
This will split the bytes object of which the last element can be taken by accessing the negative index:
You may use the mail number to access the corresponding mail.