2014-07-06 56 views
3

我想在電子郵件發件人的時區中獲取收到的日期。使用javax郵件可能嗎? message.getReceivedDate()在我服務器的時區中返回日期。javax mail發件人時區中的getReceivedDate

+0

如果你能發送郵件旁邊數據的一個額外的數據包,其中將包含發件人EST,那將是一個立即解決。你究竟想要做什麼? – Cartier

+0

當用戶發送郵件時,我會對其進行處理併成功回覆用戶。我還希望在發送原始郵件時包含回覆時間戳 – vishesh

+0

因此,可以將任何額外的數據發送到電子郵件旁邊;你使用自己的SMTP嗎? – Cartier

回答

3

據我所知,至少在Java 7中,Date類擁有(由它自己)沒有原始時區的概念。因此,如果您想訪問郵件的原始時區,則應直接獲取Date標題:message.getHeader("Date")

根據RFC2822,這個頭必須總是存在,必須包含一個時區,並應在當地時間表示。所以你必須解析該值並提取發件人時區。接下來,您只需將getReceivedDate轉換爲該時區即可。從RFC2822

提取物(日期標題的解析):

orig-date  =  "Date:" date-time CRLF 
date-time  =  [ day-of-week "," ] date FWS time [CFWS] 
day-of-week  =  ([FWS] day-name)/obs-day-of-week 
day-name  =  "Mon"/"Tue"/"Wed"/"Thu"/
         "Fri"/"Sat"/"Sun" 
date   =  day month year 
year   =  4*DIGIT/obs-year 
month   =  (FWS month-name FWS)/obs-month 
month-name  =  "Jan"/"Feb"/"Mar"/"Apr"/
         "May"/"Jun"/"Jul"/"Aug"/
         "Sep"/"Oct"/"Nov"/"Dec" 
day    =  ([FWS] 1*2DIGIT)/obs-day 
time   =  time-of-day FWS zone 
time-of-day  =  hour ":" minute [ ":" second ] 
hour   =  2DIGIT/obs-hour 
minute   =  2DIGIT/obs-minute 
second   =  2DIGIT/obs-second 
zone   =  (("+"/"-") 4DIGIT)/obs-zone 
相關問題