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(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<mp.getCount();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("storefile's 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("Messages's length: "+message.length);
PraseMimeMessage pmm = null;
for(
int i=0;i<message.length;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]);
}
}
}
分享到:
相关推荐
(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统...
简单的JavaMail的收发邮件程序,分为收邮件和发送邮件两部分。
基于JavaMail的邮件收发系统是一种用于发送和接收电子邮件的应用程序,它基于JavaMail API来实现与邮件服务器的通信,并提供用户界面来进行邮件的管理和操作。以下是对该系统实现的描述: 用户界面: 系统提供了...
很好的邮件处理代码,1.5版本,作为build path放在eclipse里面,就可以用啦! oracle官方推的,很好!jdk1.6版本以上用起来很方便。
这个程序在发送邮件是可以指定多个附件发送,多个发送人,收取邮件是可以收取邮件的附件
这里是javamail收发邮件的程序源代码,如果有什么不清楚的地方,可以和我联系,我尽量帮您解决
用户可使用这种包创建邮件用户代理(Mail User Agent,MUA)类型的程序,它类似于Foxmail、Eudora以及Miceosoft Outlook这些邮件程序。其主要目的不是像发送邮件或其他邮件传输代理(Mail Transfer Agent,MTA)类型...
java开发的电子邮件收发应用程序。包括邮件的发送、阅读、和删除功能。当然还可以添加联系人,联系人是采用xml文档保存的。本邮件系统当有新邮件到达时可以提示,并且系统托盘中的邮件图标会闪动。本邮件系统是本人...
基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT) 这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备了...
基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译)_jsp_java源程序代码.rar
1. SendMail.java 我写的一个发送邮件类。程序会根据配置的文件自动发送邮件,可包含任意数量的附件,每个附件目录及文件名在配置文件中配置。 2.ReceiveOneMail 从网上down下来的接收邮件类,可自动把收件箱中的...
基于Javamail的邮件收发系统(系统+LW+开题报告+任务书+外文翻译+文献综述+答辩PPT).zip
java发送邮件程序,已经打包成jar包,导入项目后只需调用静态方法即可实现发送邮件功能。做的比较粗糙,没有发送附件功能,但是“邮件找回/修改密码”,“反馈意见”等功能够用了。亲测163邮箱可用。具体静态方法和...
代码下载后,直接修改自己邮箱密码,接收者邮箱就可发送成功。其实Java应用程序发送 E-mail 非常简单。
网络程序与分布式技术,Javamail,邮件发送与接受
基于Javamail的邮件收发系统的设计与实现项目是一个基于Java语言开发的邮件收发系统,主要使用Javamail和JavaSMTP等技术实现邮件的收发和管理。该系统主要适用于需要频繁发送邮件的机构或个人,提供优质的邮件服务和...
JavaMail是实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂...
基于java语言的毕业设计——基于Javamail的邮件收发系统(附带:系统源码 + 毕业论文 + 开题报告 + 任务书 + 外文翻译 + 文献综述 + 答辩PPT + 作品说明书) 基于Javamail的邮件收发系统是一款简单、方便、快捷的...
这个项目是一个基于Java语言开发的Web应用程序,采用SSM(Spring+SpringMVC+MyBatis)或SSH(Spring+SpringMVC+Hibernate)框架进行开发,使用MySQL作为数据存储,JSP作为页面开发。 项目的目标是构建一个高效、可靠...
Java Mail API 的开发是SUN 为Java 开发者提供公用API 框架的持续努力的良好例证。提倡公用框 架,反对...实际上,一旦正式开 始使用,你就会发现该API 不失为在应用程序中加入健壮的邮件/通讯支持的简单工具。