javax mail получает дату получения в часовом поясе отправителя

#java #jakarta-mail

#java #джакарта-почта

Вопрос:

Я хочу получить дату получения в часовом поясе отправителя электронной почты. возможно ли это с помощью javax mail? message.getReceivedDate() Возвращает дату в часовом поясе моего сервера.

Комментарии:

1. Если бы вы могли отправлять почту вместе с дополнительным пакетом данных, который содержал бы EST отправителя, это было бы немедленным решением. Что именно вы пытаетесь сделать?

2. Когда пользователь отправляет письмо, я обрабатываю его и успешно отвечаю пользователю. Я хочу также включить временную метку в ответ, когда было отправлено исходное письмо

3. Итак, можно ли отправить какие-либо дополнительные данные вместе с электронной почтой; используете ли вы свой собственный SMTP?

4. Нет. пользователь не будет отправлять почту со своего клиента.

5. Есть ли у вас сервер, принимающий данные и затем отправляющий их соответствующим пользователям? В противном случае вы могли бы добавить дату и время внизу каждого электронного письма, а затем обработать его в соответствии с тем, в какое время вы его получили.

Ответ №1:

Насколько я знаю, и, по крайней мере, в 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