/** * IMAP方式 * */ import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; import javax.mail.URLName; public class ReceiveMails { public static void main(String[] args) throws Exception { // 準備鏈接服務器的會話信息 Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", "imap.qq.com"); props.setProperty("mail.imap.port", "143"); /** QQ郵箱須要創建ssl鏈接 */ props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.imap.socketFactory.fallback", "false"); props.setProperty("mail.imap.starttls.enable","true"); props.setProperty("mail.imap.socketFactory.port", "993"); // 建立Session實例對象 Session session = Session.getInstance(props); URLName urln = new URLName("imap", "imap.qq.com", 143, null,"601340241@qq.com","enwjrumuitsdbeii"); // 建立IMAP協議的Store對象 Store store = session.getStore(urln); store.connect(); // 得到收件箱 Folder folder = store.getFolder("INBOX"); // 以讀寫模式打開收件箱 folder.open(Folder.READ_WRITE); // 得到收件箱的郵件列表 Message[] messages = folder.getMessages(); // 打印不一樣狀態的郵件數量 System.out.println("收件箱中共" + messages.length + "封郵件!"); System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未讀郵件!"); System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新郵件!"); System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已刪除郵件!"); System.out.println("------------------------開始解析郵件----------------------------------"); // 解析郵件 /** for (Message message : messages) { IMAPMessage msg = (IMAPMessage) message; String subject = MimeUtility.decodeText(msg.getSubject()); System.out.println("[" + subject + "]未讀,是否須要閱讀此郵件(yes/no)?"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String answer = reader.readLine(); if ("yes".equalsIgnoreCase(answer)) { // 第二個參數若是設置爲true,則將修改反饋給服務器。false則不反饋給服務器 msg.setFlag(Flag.SEEN, true); //設置已讀標誌 } } */ // 關閉資源 folder.close(false); store.close(); } }
POP3方式:與上面方法相似只需更改鏈接方式便可java
/** * qq郵箱須要創建ssl鏈接才能接收郵件 pop3方式 * */ public static Store getQQSSLStore(Mail mail) throws Exception { // 建立一個有具體鏈接信息的Properties對象 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; Properties props = System.getProperties(); props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); props.setProperty("mail.pop3.socketFactory.fallback", "false"); props.setProperty("mail.pop3.port", "465"); props.setProperty("mail.pop3.socketFactory.port", "995"); Session session = Session.getInstance(props); URLName urln = new URLName("pop3", mail.getPop3Server(), mail.getPop3Port(), null,mail.getMailAddr(),mail.getMailPassWord()); Store store = session.getStore(urln); return store; } /** * 返回非ssl鏈接 * */ public static Store getStore(Mail mail) throws Exception { Properties props = System.getProperties(); props.put("mail.smtp.host", mail.getSmtpServer()); props.put("mail.smtp.auth", "true"); Session session = Session.getInstance(props, null); URLName urln = new URLName("pop3", mail.getPop3Server(), 110, null, mail.getMailAddr(), mail.getMailPassWord()); Store store = session.getStore(urln); return store; }