最近在写JavaMail接收Gmail邮件的NetBeans插件,发现一个问题。。。。
下面是连接邮件账户与接收邮件的代码片断:
/**
*conncecttothegmailaccount.
*@paramuserNameusername
*@paramuserPassworduserpassword
*@throwsException
*/
privatestaticvoidconnect(StringuserName,StringuserPassword)
throwsException{
Security.addProvider(newcom.sun.net.ssl.internal.ssl.Provider());
finalStringSSL_FACTORY="javax.net.ssl.SSLSocketFactory";
Propertiesprops=System.getProperties();
props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback","false");
props.setProperty("mail.pop3.port","995");
props.setProperty("mail.pop3.socketFactory.port","995");
props.setProperty("mail.imap.socketFactory.class",SSL_FACTORY);
props.setProperty("mail.imap.socketFactory.fallback","false");
props.setProperty("mail.imap.port","993");
props.setProperty("mail.imap.socketFactory.port","993");
Sessionsession=Session.getDefaultInstance(props,null);
session.setDebug(true);//setdebug
//URLNameurln=newURLName("pop3s","pop.gmail.com",995,null,
//userName,userPassword);
URLNameurln=newURLName("imap","imap.gmail.com",993,null,userName,
userPassword);
store=session.getStore(urln);
store.connect();
}
/**
*Retieveallnewmessages.
*@paramuserNameusername
*@paramuserPassworduserpassword
*@returnallnewmessages
*@throwsException
*/
publicMessage[]getNewMails(StringuserName,StringuserPassword)
throwsException{
if(!store.isConnected()){
connect(userName,userPassword);
}
Folderinbox=store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
FetchProfileprofile=newFetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
if(inbox.getUnreadMessageCount()>0){
intfetchCount=inbox.getMessageCount()-inbox.getUnreadMessageCount();
if(fetchCount==0){
returninbox.getMessages();
}
Message[]messages=inbox.getMessages(1,2);
returnmessages;
}else{
System.out.println("Noanynewmail!");
thrownewRuntimeException("Noanynewmail!");
}
}
*conncecttothegmailaccount.
*@paramuserNameusername
*@paramuserPassworduserpassword
*@throwsException
*/
privatestaticvoidconnect(StringuserName,StringuserPassword)
throwsException{
Security.addProvider(newcom.sun.net.ssl.internal.ssl.Provider());
finalStringSSL_FACTORY="javax.net.ssl.SSLSocketFactory";
Propertiesprops=System.getProperties();
props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback","false");
props.setProperty("mail.pop3.port","995");
props.setProperty("mail.pop3.socketFactory.port","995");
props.setProperty("mail.imap.socketFactory.class",SSL_FACTORY);
props.setProperty("mail.imap.socketFactory.fallback","false");
props.setProperty("mail.imap.port","993");
props.setProperty("mail.imap.socketFactory.port","993");
Sessionsession=Session.getDefaultInstance(props,null);
session.setDebug(true);//setdebug
//URLNameurln=newURLName("pop3s","pop.gmail.com",995,null,
//userName,userPassword);
URLNameurln=newURLName("imap","imap.gmail.com",993,null,userName,
userPassword);
store=session.getStore(urln);
store.connect();
}
/**
*Retieveallnewmessages.
*@paramuserNameusername
*@paramuserPassworduserpassword
*@returnallnewmessages
*@throwsException
*/
publicMessage[]getNewMails(StringuserName,StringuserPassword)
throwsException{
if(!store.isConnected()){
connect(userName,userPassword);
}
Folderinbox=store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
FetchProfileprofile=newFetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
if(inbox.getUnreadMessageCount()>0){
intfetchCount=inbox.getMessageCount()-inbox.getUnreadMessageCount();
if(fetchCount==0){
returninbox.getMessages();
}
Message[]messages=inbox.getMessages(1,2);
returnmessages;
}else{
System.out.println("Noanynewmail!");
thrownewRuntimeException("Noanynewmail!");
}
}
使用POP3/POP3s连接后统计出来的邮件数目都是不对的。而使用IMAP统计的就正确了。很郁闷。。。。
在开发JavaMail接收Gmail邮件的NetBeans插件过程中,遇到了使用POP3统计邮件数量不准确的问题,而IMAP则能正确统计。本文提供了连接账户及接收邮件的代码示例。
2589

被折叠的 条评论
为什么被折叠?



