在這里說明一下,pop3和imap協議都是接收郵件的,但是他們還是有很多不同的。
IMAP和POP有什么區別?
POP允許電子郵件客戶端下載服務器上的郵件,但是您在電子郵件客戶端的操作(如:移動郵件、標記已讀等),這是不會反饋到服務器上的,比如:您通過電子郵件客戶端收取了QQ郵箱中的3封郵件並移動到了其他文件夾,這些移動動作是不會反饋到服務器上的,也就是說,QQ郵箱服務器上的這些郵件是沒有同時被移動的 。但是IMAP就不同了,電子郵件客戶端的操作都會反饋到服務器上,您對郵件進行的操作(如:移動郵件、標記已讀等),服務器上的郵件也會做相應的動作。也就是說,IMAP是“雙向”的。
同時,IMAP可以只下載郵件的主題,只有當您真正需要的時候,才會下載郵件的所有內容。
上代碼:
package cn.com; import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; import com.sun.mail.imap.IMAPFolder; import com.sun.mail.imap.IMAPStore; public class ImapFetchMail { public static void main(String[] args) { String host = "imap.qq.com"; int port = 993; String username = "316301857@qq.com"; String password = "dengzhiyuanaiyuer"; final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); /* Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 這里有一個錯我是這么解決的(Windows -> Preferences,Java/Compiler/Errors/Warnings-> Deprecated and restricted API, Forbidden reference (access rules),原始設定為Error修改為Warning)*/ Properties props = System.getProperties(); props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY); props.setProperty("mail.imap.socketFactory.port","993"); props.setProperty("mail.store.protocol","imap"); props.setProperty("mail.imap.host", host); props.setProperty("mail.imap.port", "993"); props.setProperty("mail.imap.auth.login.disable", "true"); Session session = Session.getDefaultInstance(props,null); session.setDebug(false); IMAPFolder folder= null; IMAPStore store=null; try { store=(IMAPStore)session.getStore("imap"); // 使用imap會話機制,連接服務器 store.connect(host,port,username,password); folder=(IMAPFolder)store.getFolder("Sent Messages"); //收件箱 Folder defaultFolder = store.getDefaultFolder(); Folder[] allFolder = defaultFolder.list(); for (int i = 0; i < allFolder.length; i++) { System.out.println("這個是服務器中的文件夾="+allFolder[i].getFullName()); } // 使用只讀方式打開收件箱 folder.open(Folder.READ_WRITE); int size = folder.getMessageCount(); System.out.println("這里是打印的條數=="+size); Message[] mess=folder.getMessages(); // Message message = folder.getMessage(size); for (int i = 0; i <5; i++) { String from = mess[i].getFrom()[0].toString(); String subject = mess[i].getSubject(); Date date = mess[i].getSentDate(); System.out.println("From: " + from); System.out.println("Subject: " + subject); System.out.println("Date: " + date); } /* String from = message.getFrom()[0].toString(); String subject = message.getSubject(); Date date = message.getSentDate();*/ /* BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); */ } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } finally { try { if (folder != null) { folder.close(false); } if (store != null) { store.close(); } } catch (MessagingException e) { e.printStackTrace(); } } System.out.println("接收完畢!"); } }