EWS Java - в ответе на письмо указана неверная дата
Я пытаюсь ответить на электронное письмо из java-кода. Когда я получаю ответ, дата отправления неверна в фактическом письме. Я думаю, что служба Exchange рассматривает время UTC.
Фактическая дата Отправлено - Вт 1/3/2017 15:58
Дата получения - вторник, 3 января 2017 г., 20:58:51
Я не знаю, как настроить время обслуживания Exchange для учета восточного времени.
Я могу получить часовые пояса сервера с помощью
Collection<TimeZoneDefinition> response = service.getServerTimeZones();
Но как настроить сервис на использование только восточного времени.?
Вот мой код ответа.
PropertySet propertySet = new PropertySet(BasePropertySet.IdOnly,
EmailMessageSchema.From, EmailMessageSchema.CcRecipients,
EmailMessageSchema.Subject, EmailMessageSchema.Body,
EmailMessageSchema.Sender, EmailMessageSchema.DateTimeReceived,
EmailMessageSchema.Attachments);
propertySet.setRequestedBodyType(BodyType.HTML);
String itemId = emailMessage.getId().toString();
EmailMessage message = EmailMessage.bind(service, new ItemId(itemId), propertySet);
//message.getIsTimeZoneHeaderRequired(true);
//getESTTimeZone(service);
MessageBody errorMessage = new MessageBody();
errorMessage.setBodyType(BodyType.HTML);
errorMessage.setText(returnMessage);
message.reply(errorMessage, false); //false means do not reply all
1 ответ
Я нашел способ обойти проблему, вот что я в итоге сделал. Надеюсь, это поможет кому-то.
public static void reply(EmailMessage originalEmailMsg, Properties properties,
String returnMessage, ExchangeService service)
throws ServiceLocalException, Exception {
String newLine = "<br>";
String emailBody = "";
try {
PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties,
EmailMessageSchema.From, EmailMessageSchema.Subject, EmailMessageSchema.Body);
propertySet.setRequestedBodyType(BodyType.HTML);
originalEmailMsg.load(propertySet);
emailBody = getEmailBody(originalEmailMsg, newLine);
ResponseMessage replyMsg = originalEmailMsg.createReply(false);
MessageBody errorMessage = new MessageBody();
errorMessage.setBodyType(BodyType.HTML);
errorMessage.setText(returnMessage.concat(newLine + "<hr>" + emailBody));
replyMsg.setBody(errorMessage);
replyMsg.send();
log.debug("Successfully replied to email message");
} catch (Exception e) {
throw e;
}
}
// get the original email body and concat that to the return email
private static String getEmailBody(EmailMessage emailMessage, String newLine) throws Exception {
StringBuffer concatenatedBody = new StringBuffer();
String toRecipients = "";
try {
toRecipients = emailMessage.getToRecipients().getItems().toString();
String sentDate = emailMessage.getDateTimeSent() != null ?
convertDateToEST(emailMessage.getDateTimeSent().toString()) : "";
MessageBody ebody = emailMessage.getBody();
String emailBody = ebody != null ? ebody.toString() : "";
concatenatedBody.append
("<b>From: </b>" + emailMessage.getFrom() + newLine +
"<b>Sent: </b>" + sentDate + newLine +
"<b>To: </b>" + toRecipients + newLine +
"<b>Subject: </b>" + emailMessage.getSubject() + newLine);
concatenatedBody.append(emailBody);
} catch (Exception e) {
log.error("Error reading email body for reply email");
}
return concatenatedBody.toString();
}
/**
* Convert date String coming in Fri Jan 13 10:30:46 CST 2017 format to
* Friday, January 13, 2017 11:30 AM
*
* @param dateStr
* @return converted Date String
* @throws Exception
*/
public static String convertDateToEST(String dateStr) throws Exception {
String convertedDate = "";
TimeZone timeZone = TimeZone.getTimeZone("EST");
try {
//date received is in Fri Jan 13 10:30:46 CST 2017 format
DateFormat f = new SimpleDateFormat("E MMM dd HH:mm:ss zzz yyyy");
Date newDate = f.parse(dateStr);
// convert it to Friday, January 13, 2017 11:30 AM format
DateFormat out = new SimpleDateFormat("EEEE',' MMMM dd',' yyyy hh:mm a");
out.setTimeZone(timeZone);
convertedDate = out.format(newDate);
} catch (Exception e) {
throw new Exception("Exception while converting date string of " + dateStr + " : "+ e.getMessage());
}
return convertedDate.toString();
}