我是python的新手,我一直在尝试创建一个程序来返回收到特定电子邮件的时间,但在任何地方都找不到这样做的函数。(到目前为止,我已经检查了reddit,Stack Overflow和Automate这些无聊的东西)我已经能够用下面的代码返回电子邮件的正文,但找不到任何关于我是否可以从电子邮件中提取时间的东西。如果这是可能的,以及如何做到这一点,任何帮助都将不胜感激。谢谢
password = input('Enter your password')
import imapclient
server = imapclient.IMAPClient('imap-mail.outlook.com', ssl=True)
server.login('myemail@msn.com',password)
import pprint
pprint.pprint(server.list_folders())
server.select_folder('Inbox')
rawMessage = server.fetch(40111, ['BODY[]'])
import pyzmail
message = pyzmail.PyzMessage.factory(rawMessage[40111][b'BODY[]'])
messagebodyTEXT = message.text_part.get_payload().decode(message.text_part.charset)
print(messagebodyTEXT)发布于 2020-05-20 03:42:00
您正在使用的库正在使用IMAP协议。在IMAP中,没有“收到消息的时间”这样的东西。消息何时为"stored into the mailbox (INTERNALDATE)"有一个时间戳,但这在一般情况下是另一回事。
您还可以尝试解析Received标头,这些标头可能包含(也可能不包含)您正在查找的信息。
发布于 2020-05-05 22:50:52
我知道您正在使用pyzmail第三方库,但是您知道Python标准库中有一个扩展的email模块吗?
具体地说,我认为解析器是提取时间戳所需的:
发布于 2020-08-14 16:44:21
基于之前关于INTERNALDATE的评论和答案,下面是我用来检索交付日期并将其转换为datetime对象的代码片段,其中包含imaplib库:
>>> import imaplib
>>> connection = imaplib.IMAP4_SSL('yourimapserver')
>>> response = connection.login('youremailaddress', 'password')
>>> connection.select('INBOX')
>>> status, data = connection.fetch(b'1', '(INTERNALDATE)') # b"1" is your uid从那里开始,根据以下情况选择不同的选项:
时区naive
>>> import datetime
>>> import time
>>> data[0]
b'1 (INTERNALDATE "12-Aug-2020 16:38:19 +0200")'
>>> timestruct = imaplib.Internaldate2tuple(data[0])
>>> timestruct
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=12,tm_hour=16, tm_min=38, tm_sec=19, tm_wday=2, tm_yday=225, tm_isdst=1)
>>> datetime_delivered = datetime.fromtimestamp(mktime(timestruct))
>>> datetime_delivered
datetime.datetime(2020, 8, 12, 16, 38, 19)Python时区感知( 3.2+)
>>> import email
>>> str_datetime = data[0].decode().split('"')[1]
>>> str_datetime
"12-Aug-2020 16:38:19 +0200"
>>> timezone_aware = email.utils.parsedate_to_datetime(str_datetime)
>>> timezone_aware
datetime.datetime(2020,8, 12, 16, 38, 19, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)))https://stackoverflow.com/questions/61614012
复制相似问题