javamail实现大全.docx
《javamail实现大全.docx》由会员分享,可在线阅读,更多相关《javamail实现大全.docx(33页珍藏版)》请在冰豆网上搜索。
javamail实现大全
javamail实现大全
packageorg.mail.core;
importjava.io.*;
importjava.text.*;
importjava.util.*;
importjavax.mail.*;
importjavax.mail.internet.*;
publicclassReceiveMail{
privateMimeMessagemimeMessage=null;
privateStringsaveAttachPath="";//附件下载后的存放目录
privateStringBufferbodytext=newStringBuffer();
//存放邮件内容的StringBuffer对象
privateStringdateformat="yy-MM-ddHH:
mm";//默认的日前显示格式
/**
*构造函数,初始化一个MimeMessage对象
*/
publicReceiveMail(){
}
publicReceiveMail(MimeMessagemimeMessage){
this.mimeMessage=mimeMessage;
System.out.println("createaReceiveMailobject........");
}
publicvoidsetMimeMessage(MimeMessagemimeMessage){
this.mimeMessage=mimeMessage;
}
/**
**获得发件人的地址和姓名
*/
publicStringgetFrom()throwsException{
InternetAddressaddress[]=(InternetAddress[])mimeMessage.getFrom();
Stringfrom=address[0].getAddress();
if(from==null)
from="";
Stringpersonal=address[0].getPersonal();
if(personal==null)
personal="";
Stringfromaddr=personal+"<"+from+">";
returnfromaddr;
}
/**
**获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同*"to"----收件人"cc"---抄送人地址
*"bcc"---密送人地址
*/
publicStringgetMailAddress(Stringtype)throwsException{
Stringmailaddr="";
Stringaddtype=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);
}elseif(addtype.equals("CC")){
address=(InternetAddress[])mimeMessage
.getRecipients(Message.RecipientType.CC);
}else{
address=(InternetAddress[])mimeMessage
.getRecipients(Message.RecipientType.BCC);
}
if(address!
=null){
for(inti=0;i
Stringemail=address[i].getAddress();
if(email==null)
email="";
else{
email=MimeUtility.decodeText(email);
}
Stringpersonal=address[i].getPersonal();
if(personal==null)
personal="";
else{
personal=MimeUtility.decodeText(personal);
}
Stringcompositeto=personal+"<"+email+">";
mailaddr+=","+compositeto;
}
mailaddr=mailaddr.substring
(1);
}
}else{
thrownewException("Erroremailaddrtype!
");
}
returnmailaddr;
}
/**
**获得邮件主题
*/
publicStringgetSubject()throwsMessagingException{
Stringsubject="";
try{
subject=MimeUtility.decodeText(mimeMessage.getSubject());
if(subject==null)
subject="";
}catch(Exceptionexce){
}
returnsubject;
}
/**
**获得邮件发送日期
*/
publicStringgetSentDate()throwsException{
Datesentdate=mimeMessage.getSentDate();
SimpleDateFormatformat=newSimpleDateFormat(dateformat);
returnformat.format(sentdate);
}
/**
**获得邮件正文内容
*/
publicStringgetBodyText(){
returnbodytext.toString();
}
/**
**解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件*
*主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
*/
publicvoidgetMailContent(Partpart)throwsException{
Stringcontenttype=part.getContentType();
intnameindex=contenttype.indexOf("name");
booleanconname=false;
if(nameindex!
=-1)
conname=true;
System.out.println("CONTENTTYPE:
"+contenttype);
if(part.isMimeType("text/plain")&&!
conname){
bodytext.append((String)part.getContent());
}elseif(part.isMimeType("text/html")&&!
conname){
bodytext.append((String)part.getContent());
}elseif(part.isMimeType("multipart/*")){
Multipartmultipart=(Multipart)part.getContent();
intcounts=multipart.getCount();
for(inti=0;igetMailContent(multipart.getBodyPart(i));
}
}elseif(part.isMimeType("message/rfc822")){
getMailContent((Part)part.getContent());
}else{
}
}
/**
**判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
*/
publicbooleangetReplySign()throwsMessagingException{
booleanreplysign=false;
Stringneedreply[]=mimeMessage
.getHeader("Disposition-Notification-To");
if(needreply!
=null){
replysign=true;
}
returnreplysign;
}
/**
**获得此邮件的Message-ID
*/
publicStringgetMessageId()throwsMessagingException{
returnmimeMessage.getMessageID();
}
/**
**【判断此邮件是否已读,如果未读返回返回false,反之返回true】
*/
publicbooleanisNew()throwsMessagingException{
booleanisnew=false;
Flagsflags=((Message)mimeMessage).getFlags();
Flags.Flag[]flag=flags.getSystemFlags();
System.out.println("flags'slength:
"+flag.length);
for(inti=0;iif(flag[i]==Flags.Flag.SEEN){
isnew=true;
System.out.println("seenMessage.......");
break;
}
}
returnisnew;
}
/**
**判断此邮件是否包含附件
*/
publicbooleanisContainAttach(Partpart)throwsException{
booleanattachflag=false;
StringcontentType=part.getContentType();
if(part.isMimeType("multipart/*")){
Multipartmp=(Multipart)part.getContent();
for(inti=0;iBodyPartmpart=mp.getBodyPart(i);
Stringdisposition=mpart.getDisposition();
if((disposition!
=null)
&&((disposition.equals(Part.ATTACHMENT))||(disposition
.equals(Part.INLINE))))
attachflag=true;
elseif(mpart.isMimeType("multipart/*")){
attachflag=isContainAttach((Part)mpart);
}else{
Stringcontype=mpart.getContentType();
if(contype.toLowerCase().indexOf("application")!
=-1)
attachflag=true;
if(contype.toLowerCase().indexOf("name")!
=-1)
attachflag=true;
}
}
}elseif(part.isMimeType("message/rfc822")){
attachflag=isContainAttach((Part)part.getContent());
}
returnattachflag;
}
/**
**【保存附件】
*/
publicvoidsaveAttachMent(Partpart)throwsException{
StringfileName="";
if(part.isMimeType("multipart/*")){
Multipartmp=(Multipart)part.getContent();
for(inti=0;iBodyPartmpart=mp.getBodyPart(i);
Stringdisposition=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());
}elseif(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());
}
}
}
}elseif(part.isMimeType("message/rfc822")){
saveAttachMent((Part)part.getContent());
}
}
/**
**【设置附件存放路径】
*/
publicvoidsetAttachPath(Stringattachpath){
this.saveAttachPath=attachpath;
}
/**
**【设置日期显示格式】
*/
publicvoidsetDateFormat(Stringformat)throwsException{
this.dateformat=format;
}
/**
**【获得附件存放路径】
*/
publicStringgetAttachPath(){
returnsaveAttachPath;
}
/**
**【真正的保存附件到指定目录里】
*/
privatevoidsaveFile(StringfileName,InputStreamin)throwsException{
StringosName=System.getProperty("os.name");
Stringstoredir=getAttachPath();
Stringseparator="";
if(osName==null)
osName="";
if(osName.toLowerCase().indexOf("win")!
=-1){
separator="\\";
if(storedir==null||storedir.equals(""))
storedir="c:
\\tmp";
}else{
separator="/";
storedir="/tmp";
}
Filestorefile=newFile(storedir+separator+fileName);
System.out.println("storefile'spath:
"+storefile.toString());
//for(inti=0;storefile.exists();i++){
//storefile=newFile(storedir+separator+fileName+i);
//}
BufferedOutputStreambos=null;
BufferedInputStreambis=null;
try{
bos=newBufferedOutputStream(newFileOutputStream(storefile));
bis=newBufferedInputStream(in);
intc;
while((c=bis.read())!
=-1){
bos.write(c);
bos.flush();
}
}catch(Exceptionexception){
exception.printStackTrace();
thrownewException("文件保存失败!
");
}finally{
bos.close();
bis.close();
}
}
/**
**ReceiveMail类测试
*/
publicstaticvoidmain(Stringargs[])throwsException{
Stringhost="";
Stringusername="demo";//您的邮箱用户名
Stringpassword="******";//您的邮箱密码
Propertiesprops=newProperties();
Sessionsession=Session.getDefaultInstance(props,null);
Storestore=session.getStore("pop3");
store.connect(host,username,password);
Folderfolder=store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Messagemessage[]=folder.getMessages();
System.out.println("Messages'slength:
"+message.length);
ReceiveMailpmm=null;
for(inti=0;ipmm=newReceiveMail((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.setD