package com.oa.email.send; import java.io.InputStreamReader; import java.io.Reader; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Header; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeUtility; //利用POP3来读取邮件 //主要用来检测消息Message的基本信息,如发送者,收信者,时间 public class POP3Client { public static void main(String[] args) { Properties props = System.getProperties(); String host = "pop3.163.com"; String username = "15518977794@163.com"; String password = "song5438"; String provider = "pop3"; try { // 连接到POP3服务器 Session ss = Session.getDefaultInstance(props, null); ss.setDebug(false); // 向回话"请求"一个某种提供者的存储库,是一个POP3提供者 Store store = ss.getStore(provider); // 连接存储库,从而可以打开存储库中的文件夹,此时是面向IMAP的 store.connect(host, username, password); // 打开文件夹,此时是关闭的,只能对其进行删除或重命名,无法获取关闭文件夹的信息 // 从存储库的默认文件夹INBOX中读取邮件 Folder inbox = store.getFolder("INBOX"); if (inbox == null) { System.out.println("NO INBOX"); System.exit(1); } // 打开文件夹,读取信息 inbox.open(Folder.READ_ONLY); System.out.println("TOTAL EMAIL:" + inbox.getMessageCount()); // 获取邮件服务器中的邮件 Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { System.out.println("------------Message--" + (i + 1) + "------------"); // 解析地址为字符串 String from = InternetAddress.toString(messages[i].getFrom()); if (from != null) { String cin = getChineseFrom(from); System.out.println("From:" + cin); } String replyTo = InternetAddress.toString(messages[i] .getReplyTo()); if (replyTo != null){ String rest = getChineseFrom(replyTo); System.out.println("Reply To" + rest); } String to = InternetAddress.toString(messages[i] .getRecipients(Message.RecipientType.TO)); if (to != null) { String tos = getChineseFrom(to); System.out.println("To:" + tos); } String subject = messages[i].getSubject(); if (subject != null) System.out.println("Subject:" + subject); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date sent = messages[i].getSentDate(); if (sent != null) System.out.println("Sent Date:" + sdf.format(sent)); Date ress = messages[i].getReceivedDate(); if (ress != null) System.out.println("Receive Date:" + sdf.format(ress)); // Multipart multipart = (Multipart)messages[i].getContent(); // for (int j=0, n=multipart.getCount(); j<n; j++) { // Part part = multipart.getBodyPart(j); // String disposition = part.getDisposition(); // if ((disposition != null) && (disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE))) { //// saveFile(part.getFileName(), part.getInputStream()); // } // } } // 关闭连接,但不删除服务器上的消息 // false代表不是删除 inbox.close(false); store.close(); } catch (Exception e) { System.err.println(e); } } // 解决中文乱码问题 public static String getChineseFrom(String res) { String from = res; try { if (from.startsWith("=?GB") || from.startsWith("=?gb") || from.startsWith("=?UTF")) { from = MimeUtility.decodeText(from); } else { from = new String(from.getBytes("ISO8859_1"), "GBK"); } } catch (Exception e) { e.printStackTrace(); } return from; } }