#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