`

javamail写的解析MimeMessage的程序(转)

阅读更多
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 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 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("flagss length: "+flag.length);
for(int i=0;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 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(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;i BodyPart mpart = mp.getBodyPart(i);
String disposition = mpart.getDisposition();
if((disposition != null) &&((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) && (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;i pmm = 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发送邮件小程序,类以及写好,只要放包,下载一个就可以

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中实现电子邮件的发送和接收。这个小程序可能包含了一套完整的类,可以帮助开发者快速构建邮件发送功能,无需从头开始编写所有必需的代码。 JavaMail 提供了对...

    javamail(带界面的javamail)

    关于邮件解析,JavaMail 提供了 MimeMessage 类,可以解析MIME格式的邮件。MIME是一种标准,允许在邮件中包含不同类型的附件,如图片、文档等。通过 MimeMultipart 类,可以访问邮件中的多个部分,并对每个部分进行...

    javamail 所有jar包

    JavaMail 是一个开源的 Java API,它为开发者提供了在 Java 应用程序中发送和接收电子邮件的功能。这个API包括了多种协议的支持,如SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)。在...

    javamail-1_3_1.zip

    JavaMail 是一个开源的 Java API,它允许开发者在 Java 应用程序中发送和接收电子邮件。这个名为 "javamail-1_3_1.zip" 的压缩包包含的是 JavaMail 的 1.3.1 版本,这是一个相对稳定的版本,提供了一套完整的邮件...

    JavaMail+JAF+JavaMailAPI文档

    例如,你可以使用`Session`类来配置邮件会话,`MimeMessage`类来创建和填充邮件内容,`Transport`类来发送邮件,而JAF则可以帮助解析和处理邮件中的各种附件和数据类型。通过阅读提供的API文档,开发者可以了解到...

    JavaMail相关Jar包

    在JavaMail中,JAF用于解析和操作MIME消息,包括读取和写入MIME类型的附件。没有JAF,JavaMail可能无法正确处理某些复杂的邮件格式,比如包含图像或其他多媒体附件的邮件。 以下是一个使用JavaMail发送邮件的基本...

    javamail例子程序

    1. **JavaMail API 概述**:JavaMail API 提供了多种接口和类,如 `Session`、`Message`、`Transport` 和 `MimeMessage` 等,它们是构建邮件功能的基础。`Session` 是邮件会话的入口点,负责设置邮件服务器信息和...

    Javamail网络程序与分布式计算

    JavaMail API 包含了多个关键组件,如`javax.mail`和`javax.mail.internet`包,提供了用于创建、解析和发送邮件的方法。`Session`对象是JavaMail的核心,用于配置邮件会话参数,如SMTP服务器地址、用户名和密码等。`...

    javamail.rar

    - **邮件头和MIME解析**:JavaMail可以解析邮件头信息,包括复杂的MIME结构,提取出附件、嵌入式图像等信息。 - **邮件通知**:可以设置监听器,当收到新邮件时触发相应的事件。 在实际开发中,通常会使用JavaMail...

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    JavaMail 是一个强大的 Java 库,它允许开发者在应用程序中实现电子邮件的发送和接收功能。这个库支持多种邮件协议,如 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议)和 IMAP(因特网消息访问协议)用于...

    javamail收发邮件类库

    JAF提供了一种标准的方式来注册和解析MIME类型,使得应用程序可以处理未知的数据类型,这对于处理邮件中的附件尤其有用。 总的来说,JavaMail类库是Java开发人员处理电子邮件的得力工具,无论是简单的文本邮件还是...

    JavaMail API细节详细解析大全

    `activation.jar`包含了JavaBeans Activation Framework (JAF),它是处理MIME类型的必备组件,允许Java应用程序识别和操作不同类型的邮件数据。而`mail.jar`则包含了JavaMail API的所有核心类和接口,如`Message`、`...

    javamail jar包

    JAF使得JavaMail能够自动解析和处理这些附件,而无需开发者编写特定的代码来处理每一种附件格式。 使用JavaMail时,首先需要配置`Properties`对象来设置邮件服务器的相关信息,如SMTP服务器地址、端口号、用户名和...

    JavaMail所需最新版(1.5.4)jar包

    JavaMail 是一个开源的 Java API,它允许开发者在 Java 应用程序中发送和接收电子邮件。这个【标题】"JavaMail所需最新版(1.5.4)jar包"指的是包含JavaMail 1.5.4版本所需的所有库文件的集合,确保开发者能够使用这...

    JavaMail需要的jar

    在处理邮件时,JAF 确保应用程序能够正确解析和操作邮件中的不同内容类型,如文本、图像或附件。这个框架使得开发者无需了解具体的数据格式,就能处理邮件中的复杂数据结构。 `mail.jar` 是 JavaMail 的核心库,...

    javamail-1.4.7.7z

    6. **邮件构建和解析**:JavaMail 提供了`Message`接口,用于构建和操作邮件。开发者可以通过`MimeMessage`类创建MIME格式的邮件,并添加收件人、抄送人、主题、正文和附件。 7. **异步邮件发送**:JavaMail 1.4.7 ...

    完整的javamail发送邮件源码

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个“完整的javamail发送邮件源码”提供了一种直接可用的解决方案,帮助开发者快速集成邮件发送功能到他们的项目中。以下是对JavaMail核心...

    javamail依赖的包.

    JavaMail 是一个开源库,用于在Java应用程序中处理电子邮件。它提供了一组API,使得开发者可以方便地发送、接收和管理邮件。JavaMail API 支持SMTP、POP3、IMAP等多种邮件传输协议,同时也支持MIME标准,能处理复杂...

    javamail源码

    `MimeMessage` 类是MIME邮件的具体实现,可以解析和创建复杂的MIME结构。 4. **认证机制**:JavaMail 支持多种身份验证机制,包括 PLAIN、LOGIN、CRAM-MD5 和 DIGEST-MD5 等,以安全地与邮件服务器交互。 5. **...

    javaMail详解

    它允许开发者在应用程序中发送、接收和管理电子邮件,提供了与邮件服务器进行交互的抽象层。 2. **邮件会话**: 邮件会话是JavaMail的核心,它代表了一个到邮件服务器的连接。开发者可以通过`Session`类创建和配置...

Global site tag (gtag.js) - Google Analytics