分享
 
 
 

javamail写的解析MimeMessage的程序

王朝java/jsp·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

自从上次在论坛发表了用JavaMail来发送邮件的程序以后,一直忙于学校里面的事情,没有时间静下心来写接收邮件的程序,现在学校里的事情终于忙完了,可以静下心里做自己喜欢做的事情了,这种感觉真的很好!

对我自己而言,刚开始在用JavaMail来编写收邮件的程序时最重要和最难的要数解析附件和邮件正文的部分,因为Mime类型实在是太多了!下面的这段代码是我自己学习JavaMail的一段体会,供大家来参考(请高手指教,有什么更好的办法,请回复此文章),具体代码如下:

-------------------------------------------------------------------------------

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+"";

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;iString 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+"";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") %26amp;%26amp; !conname){bodytext.append((String)part.getContent());}else if(part.isMimeType("text/html") %26amp;%26amp; !conname){bodytext.append((String)part.getContent());}else if(part.isMimeType("multipart/*")){Multipart multipart = (Multipart)part.getContent();int counts = multipart.getCount();for(int i=0;igetMailContent(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("flagss length: "+flag.length);for(int i=0;iif(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;iBodyPart mpart = mp.getBodyPart(i);String disposition = mpart.getDisposition();if((disposition != null) %26amp;%26amp;((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;}/*** 【保存附件】*/public void saveAttachMent(Part part)throws Exception{String fileName = "";if(part.isMimeType("multipart/*")){Multipart mp = (Multipart)part.getContent();for(int i=0;iBodyPart mpart = mp.getBodyPart(i);String disposition = mpart.getDisposition();if((disposition != null) %26amp;%26amp;((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){fileName = mpart.getFileName();if(fileName.toLowerCase().indexOf("gb2312") != -1){fileName = MimeUtility.decodeText(fileName);}saveFile(fileName,mpart.getInputStream());}else if(mpart.isMimeType("multipart/*")){saveAttachMent(mpart);}else{fileName = mpart.getFileName();if((fileName != null) %26amp;%26amp; (fileName.toLowerCase().indexOf("GB2312") != -1)){fileName=MimeUtility.decodeText(fileName);saveFile(fileName,mpart.getInputStream());}}}}else if(part.isMimeType("message/rfc822")){saveAttachMent((Part)part.getContent());}}/*** 【设置附件存放路径】*/public void setAttachPath(String attachpath){this.saveAttachPath = attachpath;}/*** 【设置日期显示格式】*/public void setDateFormat(String format)throws Exception{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){separator = "\\"if(storedir == null || storedir.equals("")) storedir="c:\\tmp";}else{separator = "/";storedir = "/tmp";}File storefile = new File(storedir+separator+fileName);System.out.println("storefiles path: "+storefile.toString());//for(int i=0;storefile.exists();i++){//storefile = new File(storedir+separator+fileName+i);//}BufferedOutputStream bos = null;BufferedInputStream bis = null;try{bos = new BufferedOutputStream(new FileOutputStream(storefile));bis = new BufferedInputStream(in);int c;while((c=bis.read()) != -1){bos.write(c);bos.flush();}}catch(Exception exception){exception.printStackTrace();throw new Exception("文件保存失败!");}finally{bos.close();bis.close();}}/*** PraseMimeMessage类测试*/public static void main(String args[])throws Exception{String host = "主机名/ip"; //【pop.mail.yahoo.com.cn】String username ="用户名"; //【wwp_1124】String password ="密码"; //【........】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();System.out.println("Messagess length: "+message.length);PraseMimeMessage pmm = null;for(int i=0;ipmm = new PraseMimeMessage((MimeMessage)message[i]);System.out.println("Message "+i+" subject: "+pmm.getSubject());System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());System.out.println("Message "+i+" replysign: "+pmm.getReplySign());System.out.println("Message "+i+" hasRead: "+pmm.isNew());System.out.println("Message "+i+" containAttachment: "+pmm.isContainAttach((Part)message[i]));System.out.println("Message "+i+" form: "+pmm.getFrom());System.out.println("Message "+i+" to: "+pmm.getMailAddress("to"));System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc"));System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc"));pmm.setDateFormat("yy年MM月dd日 HH:mm");System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId());pmm.getMailContent((Part)message[i]);System.out.println("Message "+i+" bodycontent: \r\n"+pmm.getBodyText());pmm.setAttachPath("c:\\tmp\\coffeecat1124");pmm.saveAttachMent((Part)message[i]);}}}-------------------------------------------------------------------------------上面就是用JavaMail来解析MimeMessage的具体程序代码,具体使用方法参考main方法里的测试代码,请大家在看过之余多提宝贵的意见,共同学习,共同成长!!,

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有