龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

用Javamail写的解析MimeMessage的程序

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
package coffeecatwebmail; import Java.io.*; import java.text.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class PraseMimeMessage{ private MimeMessage mimeMessage = null; private String saveAttachPath = ""

  package coffeecatwebmail;
  
  import Java.io.*;
  import java.text.*;
  import java.util.*;
  import javax.mail.*;
  import javax.mail.internet.*;
  
  public class PraseMimeMessage{
  private MimeMessage mimeMessage = null;
  private String saveAttachPath = "";   //附件下载后的存放目录
  private StringBuffer bodytext = new StringBuffer(); //存放邮件内容的StringBuffer对象
  private String dateformat = "yy-MM-dd HH:mm";    //默认的日前显示格式
  
  /**
   * 构造函数,初始化一个MimeMessage对象
   */
  public PraseMimeMessage(){}
  public PraseMimeMessage(MimeMessage mimeMessage){
  this.mimeMessage = mimeMessage;
  System.out.println("create a PraseMimeMessage object........");
  }
  
  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;
  }
  return replysign;
  }
  
  /**
   * 获得此邮件的Message-ID
   */
  public String getMessageId()throws MessagingException{
  return mimeMessage.getMessageID();
  }
  
  /**
   * 【判定此邮件是否已读,假如未读返回返回false,反之返回true】
   */
  public boolean isNew()throws MessagingException{
  boolean isnew = false;
  Flags flags = ((Message)mimeMessage).getFlags();
  Flags.Flag []flag = flags.getSystemFlags();
  System.out.println("flags's length: "+flag.length);
  for(int i=0;i<flag.length;i++){
  if(flag[i] == Flags.Flag.SEEN){
  isnew=true;
  System.out.println("seen Message.......");
  break;
  }
  }
  return isnew;
  }
  
  /**
   * 判定此邮件是否包含附件
   */
  public boolean isContainAttach(Part part)throws Exception{
  boolean attachflag = false;
  String contentType = part.getContentType();
  if(part.isMimeType("multipart/*")){
  Multipart mp = (Multipart)part.getContent();
  for(int i=0;i<mp.getCount();i++){
  BodyPart mpart = mp.getBodyPart(i);
  String disposition = mpart.getDisposition();
  if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) (disposition.equals(Part.INLINE))))
  attachflag = true;
  else if(mpart.isMimeType("multipart/*")){
  attachflag = isContainAttach((Part)mpart);
  }else{
  String contype = mpart.getContentType();
  if(conty
  
精彩图集

赞助商链接