首先导入javamail的jar包
<!-- java mail --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency> <!-- java mail end -->
java具体实现代码
package com.sharp.slc.common; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import com.sun.mail.imap.IMAPFolder; import com.sun.mail.imap.IMAPStore; public class ReadMail { private MimeMessage mimeMessage = null; private StringBuffer bodyText = new StringBuffer(); // 存放邮件内容的StringBuffer对象 private String dateFormat = "yy-MM-dd HH:mm"; // 默认的日前显示格式 private static String host = AgentConfig.getJavamailValue("host"); private static String userName = AgentConfig.getJavamailValue("userName"); private static String passWord = AgentConfig.getJavamailValue("passWord"); private static IMAPFolder folder; private static IMAPStore store; /** * 构造函数,初始化一个MimeMessage对象 */ public ReadMail() { } public ReadMail(MimeMessage mimeMessage) { this.mimeMessage = mimeMessage; } public void setMimeMessage(MimeMessage mimeMessage) { this.mimeMessage = mimeMessage; } /** * 获得发件人的地址和姓名 */ public String getFrom() throws Exception { InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom(); String from = address[0].getAddress(); if (from == null) from = ""; String personal = address[0].getPersonal(); if (personal == null) personal = ""; String fromaddr = personal + "<" + from + ">"; return fromaddr; } /** * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址 */ public String getMailAddress(String type) throws Exception { String mailaddr = ""; String addtype = type.toUpperCase(); InternetAddress[] address = null; if (addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) { if (addtype.equals("TO")) { address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO); } else if (addtype.equals("CC")) { address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC); } else { address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC); } if (address != null) { for (int i = 0; i < address.length; i++) { String email = address[i].getAddress(); if (email == null) email = ""; else { email = MimeUtility.decodeText(email); } String personal = address[i].getPersonal(); if (personal == null) personal = ""; else { personal = MimeUtility.decodeText(personal); } String compositeto = personal + "<" + email + ">"; mailaddr += "," + compositeto; } mailaddr = mailaddr.substring(1); } } else { throw new Exception("Error emailaddr type!"); } return mailaddr; } /** * * 获得邮件主题 */ public String getSubject() throws MessagingException { String subject = ""; try { subject = MimeUtility.decodeText(mimeMessage.getSubject()); if (subject == null) { subject = ""; } } catch (Exception exce) { exce.printStackTrace(); } return subject; } /** * * 获得邮件发送日期 */ public String getSentDate() throws Exception { Date sentDate = mimeMessage.getSentDate(); SimpleDateFormat format = new SimpleDateFormat(dateFormat); String strSentDate = format.format(sentDate); return strSentDate; } /** * * 获得邮件正文内容 */ public String getBodyText() { return bodyText.toString(); } /** * * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 * * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析 */ public void getMailContent(Part part) throws Exception { String contentType = part.getContentType(); int nameIndex = contentType.indexOf("name"); boolean conName = false; if (nameIndex != -1) { conName = true; } if (part.isMimeType("text/plain") && conName == false) { // text/plain 类型 bodyText.append((String) part.getContent()); } else if (part.isMimeType("multipart/*")) { // multipart/* Multipart multipart = (Multipart) part.getContent(); int counts = multipart.getCount(); for (int i = 0; i < counts; i++) { getMailContent(multipart.getBodyPart(i)); } } else if (part.isMimeType("message/rfc822")) { // message/rfc822 getMailContent((Part) part.getContent()); } } /** * * 设置日期显示格式 */ public void setDateFormat(String format) throws Exception { this.dateFormat = format; } /** * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】 */ public boolean isNew() throws MessagingException { boolean isnew = false; Flags flags = ((Message) mimeMessage).getFlags(); Flags.Flag[] flag = flags.getSystemFlags(); for (int i = 0; i < flag.length; i++) { if (flag[i] == Flags.Flag.SEEN) { isnew = true; break; } } return isnew; } /** * get all email message * @param subjectType * @return * @throws Exception */ public static Message[] getMsg() throws Exception { Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", host); props.setProperty("mail.imap.port", "143"); Session session = Session.getInstance(props); store = (IMAPStore)session.getStore("imap"); // 使用imap会话机制,连接服务器 store.connect(userName, passWord); folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱 folder.open(Folder.READ_WRITE); Message[] messages = folder.getMessages(); System.out.println("邮件数量: " + messages.length); return messages; } /** * close current folder */ public static void closeFolder(){ try { if(folder != null) { folder.close(true); } if(store!=null) { store.close(); } } catch (MessagingException e) { e.printStackTrace(); } } }
时间: 2024-10-17 22:44:10