2017-09-04 59 views
-1

你好,我有一個從電子郵件解析日期與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

回答

0

好吧, 所以我檢查了我的解析函數。 當我使用我的smtp服務器從Thunderbird發送郵件時,它可以工作。 我可以得到我的日期時間對象。 當我用python發送我的郵件時,有東西擊中粉絲。