收邮件、更改邮件标志 javamai +imap
?

import?java.io.*;
import?java.security.Security;
import?java.text.*;
import?java.util.*;
import?javax.mail.*;
import?javax.mail.internet.*;
public?class?gmailRead?{
????private?MimeMessage?mimeMessage?=?null;
????private?String?saveAttachPath?=?"";?//?附件下载后的存放目录
????private?StringBuffer?bodytext?=?new?StringBuffer();//?存放邮件内容的StringBuffer对象
????private?String?dateformat?=?"yy-MM-dd?HH:mm";?//?默认的日前显示格式
????/**
?????*?*?構造函数,初始化一个MimeMessage對象
?????*?
?????*/
????public?gmailRead()?{
????}
????public?gmailRead(MimeMessage?mimeMessage)?{
????????this.mimeMessage?=?mimeMessage;
????????System.out.println("create a PraseMimeMessage object........");
????}
????/**
?????*?*?獲取一个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)?{
????????}
????????return?subject;
????}
????/**
?????*?*?獲得郵件的發送日期
?????*?
?????*/
????public?String?getSentDate()?throws?Exception?{
????????Date?sentdate?=?mimeMessage.getSentDate();
????????SimpleDateFormat?format?=?new?SimpleDateFormat(dateformat);
????????return?format.format(sentdate);
????}
????/**
?????*?*?獲得郵件的正文内容
?????*?
?????*/
????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;
????????System.out.println("CONTENTTYPE: "?+?contenttype);
????????if?(part.isMimeType("text/plain")?&&?!conname)?{
????????????bodytext.append((String)?part.getContent());
????????}?else?if?(part.isMimeType("text/html")?&&?!conname)?{
????????????bodytext.append((String)?part.getContent());
????????}?else?if?(part.isMimeType("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"))?{
????????????getMailContent((Part)?part.getContent());
????????}?else?{
????????}
????}
????/**
?????*?*?判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
?????*?
?????*/
????public?boolean?getReplySign()?throws?MessagingException?{
????????boolean?replysign?=?false;
????????String?needreply[]?=?mimeMessage
????????.getHeader("Disposition-Notification-To");
????????if?(needreply?!=?null)?{
????????????replysign?=?true;