在這裏說明一下,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 = "[email protected]";
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("接收完畢!");
}
}