Javamail IMAP - 按日期搜索邮件返回错误结果
Javamail IMAP - Searching mail by date returning wrong results
我尝试使用 IMAP 从 outlook 的收件箱中获取特定日期的电子邮件,但我收到的电子邮件的日期与我用于搜索的日期不对应,我的代码如下:
SimpleDateFormat df1 = new SimpleDateFormat( "MM/dd/yy" );
String dt="10/02/18";
java.util.Date dDate = df1.parse(dt);
/*
Connection code to the email goes here
*/
SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,dDate);
IMAPFolder inbox = (IMAPFolder) store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
Message[] messages = inbox.search(st);
int total = messages.length;
/* RESULTS */
println("\nTotal_Email = " + messages.length);
for (int index = 0; index < total; index++) {
Date date=message.getReceivedDate();
System.out.println("DATE RECEIVED="+date);
}
我在使用日期“10/01/18”时得到以下结果
Total_Email = 5
DATE RECEIVED=Mon Oct 01 17:45:44 COT 2018
DATE RECEIVED=Mon Oct 01 16:43:27 COT 2018
DATE RECEIVED=Mon Oct 01 16:17:11 COT 2018
DATE RECEIVED=Mon Oct 01 15:37:38 COT 2018
DATE RECEIVED=Mon Oct 01 14:53:48 COT 2018
然后我在使用日期“10/02/18”时得到以下结果
Total_Email = 6
DATE RECEIVED=Tue Oct 02 08:09:53 COT 2018
DATE RECEIVED=Mon Oct 01 23:21:34 COT 2018
DATE RECEIVED=Mon Oct 01 22:37:22 COT 2018
DATE RECEIVED=Mon Oct 01 21:33:37 COT 2018
DATE RECEIVED=Mon Oct 01 20:21:20 COT 2018
DATE RECEIVED=Mon Oct 01 19:11:50 COT 2018
我的猜测是这与我的时区有关,我住在哥伦比亚并且我的时区是 GMT-5,有什么方法可以修复并获得正确的结果吗?
不,IMAP 不识别时区,它是特定于服务器的,它计算和报告结果时所用的时区。您可能需要请求比您需要的更多的请求并进行客户端过滤。
为方便起见,大多数大型跨国服务器都使用 UTC,因此您必须获取与您感兴趣的时间段重叠的两天。
我尝试使用 IMAP 从 outlook 的收件箱中获取特定日期的电子邮件,但我收到的电子邮件的日期与我用于搜索的日期不对应,我的代码如下:
SimpleDateFormat df1 = new SimpleDateFormat( "MM/dd/yy" );
String dt="10/02/18";
java.util.Date dDate = df1.parse(dt);
/*
Connection code to the email goes here
*/
SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,dDate);
IMAPFolder inbox = (IMAPFolder) store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
Message[] messages = inbox.search(st);
int total = messages.length;
/* RESULTS */
println("\nTotal_Email = " + messages.length);
for (int index = 0; index < total; index++) {
Date date=message.getReceivedDate();
System.out.println("DATE RECEIVED="+date);
}
我在使用日期“10/01/18”时得到以下结果
Total_Email = 5
DATE RECEIVED=Mon Oct 01 17:45:44 COT 2018
DATE RECEIVED=Mon Oct 01 16:43:27 COT 2018
DATE RECEIVED=Mon Oct 01 16:17:11 COT 2018
DATE RECEIVED=Mon Oct 01 15:37:38 COT 2018
DATE RECEIVED=Mon Oct 01 14:53:48 COT 2018
然后我在使用日期“10/02/18”时得到以下结果
Total_Email = 6
DATE RECEIVED=Tue Oct 02 08:09:53 COT 2018
DATE RECEIVED=Mon Oct 01 23:21:34 COT 2018
DATE RECEIVED=Mon Oct 01 22:37:22 COT 2018
DATE RECEIVED=Mon Oct 01 21:33:37 COT 2018
DATE RECEIVED=Mon Oct 01 20:21:20 COT 2018
DATE RECEIVED=Mon Oct 01 19:11:50 COT 2018
我的猜测是这与我的时区有关,我住在哥伦比亚并且我的时区是 GMT-5,有什么方法可以修复并获得正确的结果吗?
不,IMAP 不识别时区,它是特定于服务器的,它计算和报告结果时所用的时区。您可能需要请求比您需要的更多的请求并进行客户端过滤。
为方便起见,大多数大型跨国服务器都使用 UTC,因此您必须获取与您感兴趣的时间段重叠的两天。