首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回已发送电子邮件的时间和日期- IMAP

返回已发送电子邮件的时间和日期- IMAP
EN

Stack Overflow用户
提问于 2020-05-05 21:12:56
回答 3查看 1.8K关注 0票数 0

我是python的新手,我一直在尝试创建一个程序来返回收到特定电子邮件的时间,但在任何地方都找不到这样做的函数。(到目前为止,我已经检查了reddit,Stack Overflow和Automate这些无聊的东西)我已经能够用下面的代码返回电子邮件的正文,但找不到任何关于我是否可以从电子邮件中提取时间的东西。如果这是可能的,以及如何做到这一点,任何帮助都将不胜感激。谢谢

代码语言:javascript
运行
复制
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)
EN

回答 3

Stack Overflow用户

发布于 2020-05-20 03:42:00

您正在使用的库正在使用IMAP协议。在IMAP中,没有“收到消息的时间”这样的东西。消息何时为"stored into the mailbox (INTERNALDATE)"有一个时间戳,但这在一般情况下是另一回事。

您还可以尝试解析Received标头,这些标头可能包含(也可能不包含)您正在查找的信息。

票数 1
EN

Stack Overflow用户

发布于 2020-05-05 22:50:52

我知道您正在使用pyzmail第三方库,但是您知道Python标准库中有一个扩展的email模块吗?

具体地说,我认为解析器是提取时间戳所需的:

票数 0
EN

Stack Overflow用户

发布于 2020-08-14 16:44:21

基于之前关于INTERNALDATE的评论和答案,下面是我用来检索交付日期并将其转换为datetime对象的代码片段,其中包含imaplib库:

代码语言:javascript
运行
复制
>>> 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

从那里开始,根据以下情况选择不同的选项:

  • 您的imap服务器提供的日期时间的格式,
  • 是否需要时区感知对象。

时区naive

代码语言:javascript
运行
复制
>>> 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+)

代码语言:javascript
运行
复制
>>> 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)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61614012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档