simple-java-mail icon indicating copy to clipboard operation
simple-java-mail copied to clipboard

Wrong sent date when parsing mail

Open Faelean opened this issue 1 year ago • 3 comments

I've found a strange case where the sent date when looking at the Email Object is different than the one Outlook shows.

String msgFileName = ".\\assets_sjm\\test.msg";

try (FileInputStream fileInputStream = new FileInputStream(msgFileName)) {
    Email email = EmailConverter.outlookMsgToEmail(fileInputStream);
    System.out.println("Sent Date: " + email.getSentDate());
}

Sent Date: Mon Jun 10 08:46:28 CEST 2024 When I open the file in Outlook the sent date is 04.06.2024 15:31

The strange thing for me is that only one customer is able to produce these kind of mails, I haven't manage to create one myself.

The mail is exported from Outlook via Drag&Drop to our software, which then shows the sent date as the exact time when the mail was exported. This behaviour persists when downloading the file from their instance and then uploading it into another instance. If I download the mail and open it in Outlook the correct sent date is displayed. When I drag the file on to Outlook the mail is sorted with the expected sent date, if I export it again from my Outlook and put in our software the correct date is shown and running the example from above the output is Sent Date: Tue Jun 04 15:31:19 CEST 2024

test.zip

Faelean avatar Jun 10 '24 12:06 Faelean

I had a quick look how this field is populated right now:

builder.fixingSentDate(ofNullable(outlookMessage.getClientSubmitTime())
	.orElse(outlookMessage.getDate())); // TODO creation date?

I'm not sure this is correct. Probably not, considering your bug and the TODO question...

bbottema avatar Jun 10 '24 15:06 bbottema

Hi, do you have an update on this bug?

Faelean avatar Jul 11 '24 14:07 Faelean

No, but a quick Google search tells it might need to be the delivery-time as well, which is apparently what the Outlook client uses according to some sources. So add that to the gamut of options :/

  • ClientSubmitTime
  • Date
  • CreationDate
  • DeliveryTime

Which could translate into something like this:

builder.fixingSentDate(ofNullable(outlookMessage.getClientSubmitTime())
    .orElse(ofNullable(outlookMessage.getDeliveryTime())
    .orElse(ofNullable(outlookMessage.getDate())
    .orElse(outlookMessage.getCreationDate()))));

bbottema avatar Jul 14 '24 09:07 bbottema