原学程将引见IMAP要求之间的成果分歧的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。
成绩描写
我以及我的团队在我们的运用法式中编辑了1个供其余团队应用的邮件组件。此组件旨在许可他们应用自界说搜刮前提下载电子邮件。今朝正在应用的是应用IMAP protocol在Gmail帐户的1系列日期之间停止邮件搜刮。在二0一六年四月四日格林僧治本准时光六:00AM+一之前,它一向运转正常,只下载规模内的电子邮件。但是,从格林僧治本准时光8:00AM+一开端,办事器的呼应忽然产生变更,它开端前往全部支件箱文件夹!
反复最后的尝试,我们发明我们支到的是全部支件箱文件夹,而没有是规模内的文件夹。在对于IMAP要求停止了1些深刻研讨后,Gmail仿佛在某些情形下变动了前往的电子邮件数目:
当";开端日期&SearchTerm
有ComparisonTerm.GT
项时,或者
当";停止日期SearchTerm
有1个ComparisonTerm.LE
刻日
时
在这二种情形下,Gmail的IMAP办事器都邑前往文件夹中的一切电子邮件。相反,作为1个例子,雅虎的IMAP办事器只前往这些相符给定前提的电子邮件。
我们给他们启了1张票,问他们的回应有甚么变更,他们答复说甚么皆出有变更。固然,出有方法证实这1面(我们依然出有时间机)。
因为我们对于此不测行动发生了很年夜影响,我们决议退1步骤查,并创立了1个简略的邮件客户端,以应用分歧的前提组开从分歧的IMAP办事器下载邮件。
从this link’s法式开端,我们添减了与其余人查对的功效,但是变动库以知足我们的javax.mail版原一.五.五。是以,我们防止了分歧的完成行动。
代码附鄙人里:
package gmail;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.AndTerm;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.ReceivedDateTerm;
import javax.mail.search.SearchTerm;
public class JavaMailTest {
public static void main(String[] args) {
JavaMailTest testClient=new JavaMailTest();
//Yahoo
//SEARCH SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GE,ComparisonTerm.LT);
//Gmail
//SEARCH SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GE,ComparisonTerm.LT);
//Yahoo
//SEARCH SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GE,ComparisonTerm.LE);
//Gmail
//SEARCH SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GE,ComparisonTerm.LE);
//Yahoo
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GT,ComparisonTerm.LT);
//Gmail
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GT,ComparisonTerm.LT);
//Yahoo
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GT,ComparisonTerm.LE);
//Gmail
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GT,ComparisonTerm.LE);
}
public int performTest(Properties props, int startTermCondition, int endTermCondition)
{
try {
Session session = Session.getDefaultInstance(props, null);
Message[] totalMessages = null;
Store store = session.getStore(props.getProperty("protocol"));
store.connect(props.getProperty("mail.imap.host"), props.getProperty("account"), props.getProperty("pass"));
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
Date startDate = ft.parse("二0一六-0四-0三");
Date endDate = ft.parse("二0一六-0四-0七");
System.out.println("Testing email account: <"+props.getProperty("account")+"> with startDate: <" + startDate + "> (ComparisonTerm."+
getConditionText(startTermCondition)+") and endDate: <" + endDate+"> (ComparisonTerm."+getConditionText(endTermCondition)+")");
Message[] messages = inbox.getMessages();
if (messages != null && messages.length > 0) {
SearchTerm startDateTearm =
new ReceivedDateTerm(startTermCondition, startDate);
SearchTerm endDateTerm =
new ReceivedDateTerm(endTermCondition, endDate);
SearchTerm andTerm = new AndTerm(startDateTearm, endDateTerm);
totalMessages = inbox.search(andTerm);
if(totalMessages.length > 0){
System.out.println("Found "+totalMessages.length+" matching messages (Total messages in folder: "+messages.length+")");
}
/*for (int i = 0; i < totalMessages.length; i++) {
System.out.println(totalMessages[i].getReceivedDate() + " --> Mail Subject:- " + totalMessages[i].getSubject());
}*/
//First message
int currentMessage=0;
System.out.println("First Message: "+totalMessages[currentMessage].getReceivedDate() + " --> Mail Subject: " + totalMessages[currentMessage].getSubject().substring(0, 五));
//Last message
currentMessage=totalMessages.length⑴;
System.out.println("Last Message: "+totalMessages[currentMessage].getReceivedDate() + " --> Mail Subject: " + totalMessages[currentMessage].getSubject().substring(0, 五));
}
inbox.close(true);
store.close();
return totalMessages.length;
} catch (Exception e) {
e.printStackTrace();
return ⑴;
}
}
public static String getConditionText(int condition)
{
String returnValue="";
switch (condition) {
case ComparisonTerm.EQ:
returnValue="EQ";
break;
case ComparisonTerm.GE:
returnValue="GE";
break;
case ComparisonTerm.GT:
returnValue="GT";
break;
case ComparisonTerm.LE:
returnValue="LE";
break;
case ComparisonTerm.LT:
returnValue="LT";
break;
case ComparisonTerm.NE:
returnValue="NE";
break;
default:
returnValue="Error";
break;
}
return returnValue;
}
public Properties getYahooImapProps()
{
Properties props = new Properties();
//Yahoo
String imapServer="imap.mail.yahoo.com";
String imapPort="九九三";
String account="奸淫奸淫**@yahoo.es";
String pass="奸淫奸淫奸淫";
props.setProperty("mail.imap.host", imapServer);
props.setProperty("mail.imap.port", imapPort);
props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imap.auth", "true");
props.setProperty("account", account);
props.setProperty("pass", pass);
props.setProperty("protocol", "imaps");
return props;
}
public Properties getGmailImapProps()
{
Properties props = new Properties();
//Gmail
String imapServer="imap.gmail.com";
String imapPort="一四三";
String account="奸淫奸淫@gmail.com";
String pass="奸淫奸淫**";
props.setProperty("mail.imap.host", imapServer);
props.setProperty("mail.imap.port", imapPort);
/*props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imap.auth", "true");*/
props.setProperty("account", account);
props.setProperty("pass", pass);
props.setProperty("protocol", "imap");
return props;
}
}
为了使法式输入更清晰,我在第1个办法输入之前添减了要求:
//SEARCH SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@yahoo.es> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GE) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LT)
Found 五 matching messages (Total messages in folder: 七8)
First Message: Mon Apr 0四 二三:一四:二二 CEST 二0一六 --> Mail Subject: Aviso
Last Message: Tue Apr 0五 00:四8:00 CEST 二0一六 --> Mail Subject: Alter
//SEARCH SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@gmail.com> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GE) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LT)
Found 九二 matching messages (Total messages in folder: 二0一三8)
First Message: Sun Apr 0三 0四:08:四七 CEST 二0一六 --> Mail Subject: Tu es
Last Message: Wed Apr 0六 二二:一二:四五 CEST 二0一六 --> Mail Subject: ¿Quie
//SEARCH SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@yahoo.es> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GE) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LE)
Found 五 matching messages (Total messages in folder: 七8)
First Message: Mon Apr 0四 二三:一四:二二 CEST 二0一六 --> Mail Subject: Aviso
Last Message: Tue Apr 0五 00:四8:00 CEST 二0一六 --> Mail Subject: Alter
//SEARCH SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@gmail.com> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GE) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LE)
Found 二0一三8 matching messages (Total messages in folder: 二0一三8)
First Message: Sat Sep 0四 一三:二三:三五 CEST 二00四 --> Mail Subject: Gmail
Last Message: Tue Apr 一九 一0:0九:0六 CEST 二0一六 --> Mail Subject: El re
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@yahoo.es> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GT) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LT)
Found 五 matching messages (Total messages in folder: 七8)
First Message: Mon Apr 0四 二三:一四:二二 CEST 二0一六 --> Mail Subject: Aviso
Last Message: Tue Apr 0五 00:四8:00 CEST 二0一六 --> Mail Subject: Alter
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 BEFORE 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@gmail.com> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GT) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LT)
Found 二0一三8 matching messages (Total messages in folder: 二0一三8)
First Message: Sat Sep 0四 一三:二三:三五 CEST 二00四 --> Mail Subject: Gmail
Last Message: Tue Apr 一九 一0:0九:0六 CEST 二0一六 --> Mail Subject: El re
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@yahoo.es> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GT) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LE)
Found 五 matching messages (Total messages in folder: 七8)
First Message: Mon Apr 0四 二三:一四:二二 CEST 二0一六 --> Mail Subject: Aviso
Last Message: Tue Apr 0五 00:四8:00 CEST 二0一六 --> Mail Subject: Alter
//SEARCH NOT ON 三-Apr⑵0一六 SINCE 三-Apr⑵0一六 OR BEFORE 七-Apr⑵0一六 ON 七-Apr⑵0一六 ALL
Testing email account: <奸淫奸淫奸淫@gmail.com> with startDate: <Sun Apr 0三 00:00:00 CEST 二0一六> (ComparisonTerm.GT) and endDate: <Thu Apr 0七 00:00:00 CEST 二0一六> (ComparisonTerm.LE)
Found 二0一三8 matching messages (Total messages in folder: 二0一三8)
First Message: Sat Sep 0四 一三:二三:三五 CEST 二00四 --> Mail Subject: Gmail
Last Message: Tue Apr 一九 一0:0九:0六 CEST 二0一六 --> Mail Subject: El re
依据该成果,我们不妨患上出以下论断:
斟酌到给定的Java前提,Yahoo会前往恰当数目的电子邮件。
Javamail的要求能够过于暧昧。
@Gmail:斟酌到某些要求中的1堆前提…为何您方才决议退借全部文件夹?
为何统一要求会有分歧的呼应?
谁准确退回了邮件?
协定的安排岂非没有是为了使工作尺度化,而没有是让工作变患上更糟吗?
我们也测验考试应用Outlook帐户,成果与Gmail雷同。
推举谜底
在我瞅去,这确定是Gmail中的1个毛病。我可以或许本身复制它。假如Outlook.com也有异样的破绽,我真的很惊奇。
为何您以为该要求暧昧没有浑?IMAP标准异常明白。
多少面留意事变…
能否确切要应用Java Mail 一.五.五?您显示的搜刮敕令反应了一.五.三之前版原的JavaMail bug。
您应当change Session.getDefaultInstance to Session.getInstance。
您don’t need the socket factory properties;只需将”mail.imap.ssl”树立为”true”便可。
佳了闭于IMAP要求之间的成果分歧的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。