久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

javamail 收郵件 解析eml文件

 fanjj 2010-07-03
內(nèi)容來(lái)自:http://www.oschina.net/bbs/thread/528
以下代碼經(jīng)過(guò)測(cè)試了的能通過(guò)
 
我在用javaMail做收郵件時(shí)怎么郵件內(nèi)容重復(fù)(一種文本格式的,一種html格式的),并且圖片無(wú)法正常顯示:
答:內(nèi)容重復(fù),,因?yàn)楹芏噜]件工具在發(fā)送HTML郵件的時(shí)候,,為了防止接收端無(wú)法閱讀html郵件,,都附送了一份純文本的郵件。解析的時(shí)候需要對(duì)這種情況進(jìn)行過(guò)濾

這是我用的代碼:請(qǐng)高手指教:

package com.espeed.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.BodyPart;
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.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

public class PraseMimeMessage{
 private MimeMessage mimeMessage=null;
 private String saveAttachPath="";//附件下載后的存放目錄
 private  StringBuffer bodytext=new StringBuffer();
 //存放郵件內(nèi)容的StringBuffer對(duì)象
 private String dateformat="yy-MM-dd HH:mm";//默認(rèn)的日前顯示格式
  /**
  * 構(gòu)造函數(shù),初始化一個(gè)MimeMessage對(duì)象
  */
 public PraseMimeMessage() {
 }
 public PraseMimeMessage(MimeMessage mimeMessage) {
  this.mimeMessage=mimeMessage;
 }
 public void setMimeMessage(MimeMessage mimeMessage){
  this.mimeMessage=mimeMessage; 
 }
 /**
  * 獲得發(fā)件人的地址和姓名
  */
 public String getFrom1()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;
 }
 /**
  * 獲得郵件的收件人,,抄送,,和密送的地址和姓名,,根據(jù)所傳遞的參數(shù)的不同
  * "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址  
  * @throws Exception */
 public String getMailAddress(String type){
  String mailaddr="";
  try {  
   String addtype=type.toUpperCase();
   InternetAddress []address=null;
   if(addtype.equals("TO")||addtype.equals("CC")||addtype.equals("BBC")){
    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{
   }
  } catch (Exception e) {
   // TODO: handle exception
  } 
  return mailaddr;
 }
 /**
   * 獲得郵件主題   
  */
 public String getSubject()
 {
  String subject="";
  try {
   subject=MimeUtility.decodeText(mimeMessage.getSubject());
   if(subject==null)subject="";
  } catch (Exception e) {
   // TODO: handle exception
  }
  return subject;
 }
 /**
   * 獲得郵件發(fā)送日期
   */
 public String getSendDate()throws Exception{
  Date senddate=mimeMessage.getSentDate();
  SimpleDateFormat format=new SimpleDateFormat(dateformat);
  return format.format(senddate);
 }
 /**
   * 解析郵件,,把得到的郵件內(nèi)容保存到一個(gè)StringBuffer對(duì)象中,,解析郵件
   * 主要是根據(jù)MimeType類(lèi)型的不同執(zhí)行不同的操作,一步一步的解析
   */
 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){
   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{}
 }
 /**
  * 獲得郵件正文內(nèi)容
   */
 public String getBodyText(){ 
  return bodytext.toString();
 }
 /**
   * 判斷此郵件是否需要回執(zhí),,如果需要回執(zhí)返回"true",否則返回"false"
   
  * @throws MessagingException */
 public boolean getReplySign() throws MessagingException{
  boolean replysign=false;
  String needreply[]=mimeMessage.getHeader("Disposition-Notification-To");
  if(needreply!=null){
   replysign=true;
  }
  return replysign;
 }
 /**
  * 獲得此郵件的Message-ID   
  * @throws MessagingException */
 public String getMessageId() throws MessagingException{
  return mimeMessage.getMessageID();
 }
 
 /**
  * 【判斷此郵件是否已讀,,如果未讀返回返回false,反之返回true】   
  * @throws MessagingException */
 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;
 }
 /**
  * 判斷此郵件是否包含附件  
  * @throws MessagingException */
 public boolean isContainAttach(Part part) throws Exception{
  boolean attachflag=false;
  String contentType=part.getContentType();
  if(part.isMimeType("multipart/*")){
   Multipart mp=(Multipart)part.getContent();
   //獲取附件名稱可能包含多個(gè)附件
   for(int j=0;j<mp.getCount();j++){
    BodyPart mpart=mp.getBodyPart(j);
    String disposition=mpart.getDescription();
    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(contype.toLowerCase().indexOf("application")!=-1) attachflag=true;
     if(contype.toLowerCase().indexOf("name")!=-1) attachflag=true;
    }
   }
  }else if(part.isMimeType("message/rfc822")){
   attachflag=isContainAttach((Part)part.getContent());
  }
  return attachflag;
 }
 /**
  * 【保存附件】  
  * @throws Exception
  * @throws IOException
  * @throws MessagingException
  * @throws Exception */
 public void saveAttachMent(Part part) throws Exception {
  String fileName="";
  if(part.isMimeType("multipart/*")){
   Multipart mp=(Multipart)part.getContent();
   for(int j=0;j<mp.getCount();j++){
    BodyPart mpart=mp.getBodyPart(j);
    String disposition=mpart.getDescription();
    if((disposition!=null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){
     fileName=mpart.getFileName();
     if(fileName.toLowerCase().indexOf("GBK")!=-1){
      fileName=MimeUtility.decodeText(fileName);
     }
     saveFile(fileName,mpart.getInputStream());
    }
    else if(mpart.isMimeType("multipart/*")){
     fileName=mpart.getFileName();   
    }
    else{
     fileName=mpart.getFileName();
     if((fileName!=null)){
      fileName=MimeUtility.decodeText(fileName);
      saveFile(fileName,mpart.getInputStream());
     }
    }
   }
  }
  else if(part.isMimeType("message/rfc822")){
   saveAttachMent((Part)part.getContent());
  }
 }
 /**
  * 【設(shè)置附件存放路徑】
  */
 public void setAttachPath(String attachpath){
  this.saveAttachPath=attachpath;
 }
 
 /**
  * 【設(shè)置日期顯示格式】
  */
 public void setDateFormat(String format){
  this.dateformat=format;
 }

 /**
  * 【獲得附件存放路徑】
  */
 
 public String getAttachPath()
 {
  return saveAttachPath;
 }
 /**
  * 【真正的保存附件到指定目錄里】
  */
 private void saveFile(String fileName,InputStream in)throws Exception{
  String osName=System.getProperty("os.name");
  String storedir=getAttachPath();
  String separator="";
  if(osName==null)osName="";
  if(osName.toLowerCase().indexOf("win")!=-1){
   //如果是window 操作系統(tǒng)
   separator="/";
   if(storedir==null||storedir.equals(""))storedir="c:\tmp";
  }
  else{
   //如果是其他的系統(tǒng)
   separator="/";
   storedir="/tmp";
  }
  File strorefile=new File(storedir+separator+fileName);
  BufferedOutputStream bos=null;
  BufferedInputStream bis=null;
  try {
   bos=new BufferedOutputStream(new FileOutputStream(strorefile));
   bis=new BufferedInputStream(in);
   int c;
   while((c=bis.read())!=-1){
    bos.write(c);
    bos.flush();
   }
  } catch (Exception e) {
   // TODO: handle exception
  }finally{
   bos.close();
   bis.close();
  }
 }
 /**
  * PraseMimeMessage類(lèi)測(cè)試
  
  * @throws Exception */
 public static void main(String[] args) throws Exception {
  String host="mail.21gmail.com";
  String username="[email protected]";
  String password="123456789";
  Properties props=new Properties();
  Session session=Session.getDefaultInstance(props,null);
  Store store=session.getStore("pop3");
  store.connect(host,username,password);
  Folder folder=store.getFolder("INBOX");
  folder.open(Folder.READ_ONLY);
  Message message[]=folder.getMessages();
  PraseMimeMessage pmm=null;
  for (int i = 0; i < message.length; i++) {
   System.out.println("****************************************第"+(i+1)+"封郵件**********************************");
   pmm=new PraseMimeMessage((MimeMessage)message[i]);
   System.out.println("主題 :"+pmm.getSubject());
   pmm.setDateFormat("yy年MM月dd日 HH:mm");
   System.out.println("發(fā)送時(shí)間 :"+pmm.getSendDate());
   System.out.println("是否回執(zhí) :"+pmm.getReplySign());
   System.out.println("是否包含附件 :"+pmm.isContainAttach((Part)message[i]));
   System.out.println("發(fā)件人 :"+pmm.getFrom1());
   System.out.println("收件人 :"+pmm.getMailAddress("TO"));
   System.out.println("抄送地址 :"+pmm.getMailAddress("CC"));
   System.out.println("密送地址 :"+pmm.getMailAddress("BCC"));    
   System.out.println("郵件ID :"+i+":"+pmm.getMessageId());
   pmm.getMailContent((Part)message[i]);  //根據(jù)內(nèi)容的不同解析郵件
   pmm.setAttachPath("d:/temp");  //設(shè)置郵件附件的保存路徑
   pmm.saveAttachMent((Part)message[i]); //保存附件
   System.out.println("郵件正文 :"+pmm.getBodyText());
   System.out.println("*********************************第"+(i+1)+"封郵件結(jié)束*************************************");
  }
 }
}

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多