解析来自电子邮件的日期时间在Python 2.6

问题描述:

你好,我有一个从电子邮件解析日期与Python 2.6 这里的问题是代码:解析来自电子邮件的日期时间在Python 2.6

typ_sent, data_sent = sentbox.fetch(num_sent, '(RFC822)') 
    mail_sent = email.message_from_string(data_sent[0][1]) 
    subject_sent = unicode(email.header.decode_header(mail_sent['Subject'])[0]) 
    from_sent = unicode(email.header.decode_header(mail_sent['From'])[0]) 
    datetime_sent = email.utils.mktime_tz(email.utils.parsedate_tz((mail_sent["Date"]))) 
    datetime_sent = datetime.datetime.fromtimestamp(datetime_sent) 

我想有从邮件中的日期时间时出错日期时间对象。这是消息错误。

File "checkIMAP_client.py", line 116, in <module> 
    datetime_sent = email.utils.mktime_tz(email.utils.parsedate_tz((mail_sent["Date"]))) 
    File "/usr/lib64/python2.6/email/_parseaddr.py", line 142, in mktime_tz 
    if data[9] is None: 
TypeError: 'NoneType' object is unsubscriptable 

而我将需要解析日期时间对象到有效的电子邮件日期格式。

编辑: 在我的脚本中,我需要比较发送的项目和收件箱文件夹中的电子邮件。 我可以从收件箱中的电子邮件中读取日期(我在email.message()对象上使用append命令) 但是我无法从使用smtplib从SMTP发送的电子邮件中读取日期时间。

我修改一下代码,看看会发生什么: 代码:

datetime_sent = unicode(mail_sent["Date"]) 
print("Datetime sent =" + datetime_sent) 

提示:

Datetime sent =None 

我会看的日期应该如何在发送的电子邮件中实现。这似乎我有一个问题,因为收件箱邮件没有问题。编辑: 好的,我发现了这个问题。 我使用smtplib从我的服务器向远端服务器发送电子邮件。 当远程服务器从某个地址的服务器接收邮件时,它会将其重定向回原始地址。 我的脚本无法从发送的电子邮件中读取日期时间。 那么我需要使用email.parsedate_tz()来使用什么格式?

+0

该消息是否有一个有效的Date:'header?你在一行中有多个函数调用;也许你可以将它们展开几行,看看你到底在哪里得到意想不到的结果。也许[编辑]你的问题,包括这些诊断。另请参阅包含[mcve]的指导。 – tripleee

+0

为什么你要在这个时代定位Python 2.6?过渡到3.6会让你有一个更新的'电子邮件'库内置日期解析。 – tripleee

+0

评论1: 我在解析某些电子邮件时遇到了错误的日期格式。在测试邮箱清除后,确定无误。由于其他Stack人遇到同样的问题,我害怕遇到问题。 评论2: 我无法更新将执行脚本的服务器上的Python。 – Aurelien

好吧, 所以我检查了我的解析函数。 当我使用我的smtp服务器从Thunderbird发送邮件时,它可以工作。 我可以得到我的日期时间对象。 当我用python发送我的邮件时,有东西击中粉丝。