在这里说明一下,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("接收完毕!"); } }