Javamail IMAP-按日期搜索邮件返回错误的结果

时间:2018-10-03 16:54:15

标签: java date email javamail imap

我正在尝试使用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

     

接收日期= 2018年10月1日星期一17:45:44 COT

     

DATE RECEIVED =星期一10月01日16:43:27 COT 2018

     

DATE RECEIVED =星期一10月01日16:17:11 COT 2018

     

收到日期= 2018年10月1日星期一15:37:38

     

接收日期= 2018年10月1日星期一14:53:48

然后当我使用日期“ 10/02/18”时,我得到以下结果

  

Total_Email = 6

     

DATE RECEIVED =星期二10月02 08:09:53 COT 2018

     

接收日期= 2018年10月1日星期一23:21:34

     

DATE RECEIVED = 2018年10月1日星期一COT

     

DATE RECEIVED = 2018年10月1日星期一21:33:37

     

接收日期= 2018年10月1日星期一20:21:20

     

DATE RECEIVED = 2018年10月1日星期一COT

我的猜测是,这与我的时区有关,我居住在哥伦比亚,时区为GMT-5,是否有任何方法可以解决并获得正确的结果?

1 个答案:

答案 0 :(得分:2)

否,IMAP不能识别时区,并且服务器特定于IMAP来计算和报告结果所在的时区。您可能需要的请求超出了要求,并需要进行客户端过滤。

为方便起见,大多数大型跨国服务器都使用UTC,因此您必须获取与您感兴趣的时间重叠的两天。