邮件发送时间怎么修改 python_使用python通过电子邮件发送日期时间
我試圖使用python腳本解析電子郵件的日期時(shí)間。
在我打開郵件時(shí),郵件日期值如下所示...
1
2
3
4from: abcd@xyz.com
to: def@xyz.com
date: Tue, Aug 28, 2012 at 1:19 PM
subject: Subject of that mail
我正在使用代碼
1
2
3
4
5
6
7mail = email.message_from_string(str1)
#to = re.sub('','',mail["To"])
to = parseaddr(mail.get('To'))[1]
sender = parseaddr(mail.get('From'))[1]
cc_is = parseaddr(mail.get('Cc'))[1]
date = mail["Date"]
print date
使用python解析的相同郵件日期時(shí)間的輸出如下所示,具有時(shí)間偏移。
1Tue, 28 Aug 2012 02:49:13 -0500
我在哪里實(shí)際上是希望的
1Tue, Aug 28, 2012 at 1:19 PM
我對(duì)這兩個(gè)價(jià)值觀的關(guān)系感到很困惑。
任何人都可以幫我弄明白我需要同時(shí)進(jìn)入郵件詳細(xì)信息。
時(shí)區(qū)!樂趣。:-)
stackoverflow.com/questions/1790795/…
查看GMail中的電子郵件時(shí),會(huì)在顯示發(fā)送電子郵件的日期和時(shí)間時(shí)使用您的本地時(shí)區(qū)。解析"Tue,2012年8月28日02:49:13 -0500",然后更新到您當(dāng)?shù)氐臅r(shí)區(qū),并以GMail特定的方式格式化。
解析和格式化stdlib方式
email.utils模塊包含一個(gè)parsedate_tz()功能,專門處理帶有時(shí)區(qū)偏移的電子郵件標(biāo)頭。
它返回與time.struct_time兼容的元組,但添加了時(shí)區(qū)偏移量。附加的mktime_tz()函數(shù)將該元組轉(zhuǎn)換為偏移值(自UNIX紀(jì)元以來的秒數(shù))。然后可以輕松地將該值轉(zhuǎn)換為datetime.datetime()類型對(duì)象。
同一模塊還具有formatdate()功能,可將UNIX紀(jì)元時(shí)間戳轉(zhuǎn)換為與電子郵件兼容的日期字符串:
1
2
3
4
5
6
7>>> from email.utils import parsedate_tz, mktime_tz, formatdate
>>> import time
>>> date = 'Tue, 28 Aug 2012 02:49:13 -0500'
>>> tt = parsedate_tz(date)
>>> timestamp = mktime_tz(tt)
>>> print formatdate(timestamp)
Tue, 28 Aug 2012 07:49:13 -0000
現(xiàn)在我們有一個(gè)適合外發(fā)電子郵件的格式化日期。要將其打印為我的本地時(shí)區(qū)(由我的計(jì)算機(jī)確定),您需要將localtime標(biāo)志設(shè)置為True:
1
2>>> print formatdate(timestamp, True)
Tue, 28 Aug 2012 08:49:13 +0100
使用更好的工具進(jìn)行解析和格式化
請(qǐng)注意,當(dāng)我們嘗試處理時(shí)區(qū)時(shí),事情變得毛茸茸,并且formatdate()函數(shù)沒有給你任何選項(xiàng)來格式化一些不同的東西(比如GMail),也不會(huì)讓你選擇不同的時(shí)區(qū)來工作用。
輸入外部python-dateutil模塊;它有一個(gè)解析函數(shù),可以處理任何事情,并正確支持時(shí)區(qū)
1
2
3
4>>> import dateutil.parser
>>> dt = dateutil.parser.parse(date)
>>> dt
datetime.datetime(2012, 8, 28, 2, 49, 13, tzinfo=tzoffset(None, -18000))
parse()函數(shù)返回一個(gè)datetime.datetime()實(shí)例,這使得格式化更容易?,F(xiàn)在我們可以使用.strftime()函數(shù)將其輸出為您的電子郵件客戶端:
1
2>>> print dt.strftime('%a, %b %d, %Y at %I:%M %p')
Tue, Aug 28, 2012 at 02:49 AM
當(dāng)然,那仍然在當(dāng)?shù)貢r(shí)區(qū);將其轉(zhuǎn)換為您的時(shí)區(qū),使用.astimezone()方法,使用新的tzone對(duì)象。 python-dateutil包對(duì)我們來說有些方便。
以下是如何在本地時(shí)區(qū)(到您的機(jī)器)打印它:
1
2
3>>> import dateutil.tz
>>> print dt.astimezone(dateutil.tz.tzlocal()).strftime('%a, %b %d, %Y at %I:%M %p')
Tue, Aug 28, 2012 at 09:49 AM
或者使用特定的時(shí)區(qū)代替:
1
2>>> print dt.astimezone(dateutil.tz.tzstr('Asia/Kolkata')).strftime('%a, %b %d, %Y at %I:%M %p')
Tue, Aug 28, 2012 at 07:49 AM
實(shí)際上我要求輸出我可以捕獲的解析郵件...比如CC,TO或SENDER .....你引導(dǎo)我格式化那個(gè)日期時(shí)間字符串......我很舒服。
我剛剛再次更新了我的問題。
對(duì),你對(duì)我認(rèn)為的時(shí)區(qū)感到困惑;電子郵件日期被解析為一個(gè)時(shí)區(qū),顯示在另一個(gè)時(shí)區(qū)。這通常不是問題。
請(qǐng)注意,您的問題遠(yuǎn)非明確;目前尚不清楚您在哪里看到價(jià)值觀和預(yù)期。
@Martijin:現(xiàn)在好嗎?實(shí)際上我無法得到字符串"Tue,2012年8月28日下午1:19"..當(dāng)我在瀏覽器中使用我的gmail acc打開它時(shí),我可以在郵件中看到。
2012年8月28日星期二13:19:21在亞洲/加爾各答轉(zhuǎn)換到2012年8月28日星期二02:49:21 GMT-5 ...所以這是我的最終答案..謝謝@Martijin的幫助。
給出了很長的更新
有parsedate_tz和mktime_tz,即你不需要手工解析UTC偏移量
@ J.F.Sebastian:謝謝;不知道我當(dāng)時(shí)錯(cuò)過了那些。在我發(fā)布這個(gè)函數(shù)之后,這些函數(shù)并沒有被添加..: - /
你只能使用stdlib來做到這一點(diǎn):
1
2
3
4>>> from email.utils import parsedate_tz, mktime_tz, formatdate
>>> ts = mktime_tz(parsedate_tz('Tue, 28 Aug 2012 02:49:13 -0500'))
>>> formatdate(ts, localtime=True) # assuming Asia/Kolkata is the local timezone
'Tue, 28 Aug 2012 13:19:13 +0530'
如果您想使用PM格式數(shù)小時(shí):
1
2
3>>> from datetime import datetime
>>> datetime.fromtimestamp(ts).strftime('%a, %b %d, %Y at %I:%M %p')
'Tue, Aug 28, 2012 at 01:19 PM'
JF Sebastian只是一個(gè)錯(cuò)字而不是日期時(shí)間他需要datetime.datetime示例應(yīng)該是datetime.datetime.fromtimestamp(ts).strftime('%a,%b%d,%Y at%I:%M%p' )
@Dung:代碼按原樣運(yùn)行。看看進(jìn)口線。
此外,如果您希望日期格式與mysql日期時(shí)間格式匹配,則為:>>> datetime.fromtimestamp(ts).strftime('%y-%m-%d%H:%M:%S')
@Dung:再次,代碼按原樣運(yùn)行。它產(chǎn)生OP明確要求的時(shí)間格式。看看這個(gè)問題。
可以選擇以下代碼
1
2
3
4start = f.find('date:') + 5 # +5 is to exclude 'date'+':' i.e.(4+1=5)
end = f.find('subject:', start) # parse from date to subject
date_time = f[start:end]
print date_time #it will print"Tue, Aug 28, 2012 at 1:19 PM"
總結(jié)
以上是生活随笔為你收集整理的邮件发送时间怎么修改 python_使用python通过电子邮件发送日期时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饿了么率先抢占三四线城市,外卖市场新一轮
- 下一篇: 佛祖保佑 ,神兽保佑 , 代码神注释鉴赏