⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailserver.java

📁 javamail的应用
💻 JAVA
字号:
//package mailserver;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class MailServer
{
   private MimeMessage mimeMessage = null;
   private String saveAttachPath = "";//附件下载目录
   private StringBuffer bodytext = new StringBuffer();//邮件内容
   private String dateformat = "yyyy-MM-dd HH:mm:ss";//时间格式

	private Mail_dbcon m_dbcon = null;
	public MailServer(MimeMessage mimeMessage, Mail_dbcon dbcon)
   {
       this.mimeMessage = mimeMessage;
	   this.m_dbcon = dbcon;
   }

   //输出信息方法
   public static void Myprint(String str)
   {
       System.out.println(str);
   }

   //获得收件人的地址和姓名
   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="";
       return personal+"<"+from+">";
   }

   //获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同
   //"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);
                   }
                   mailaddr+=","+personal+"<"+email+">";
               }
               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 ex){}
       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;
       //Myprint("连接类型:"+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();
       for(int i=0;i<flag.length;i++)
       {
           if(flag[i]==Flags.Flag.SEEN)
           {
              isnew=true;
              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,String mailid) 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();
				   fileName = MimeUtility.decodeText(fileName);
				   /*
                   if(fileName.toLowerCase().indexOf("gb2312")!=-1)
                   {
                       fileName = MimeUtility.decodeText(fileName);
                   }
				    */
                   saveFile(fileName,mpart.getInputStream(),mailid);
               }
               else if(mpart.isMimeType("multipart/*"))
               {
                   saveAttachMent(mpart,mailid);
               }
               else
               {
                   fileName = mpart.getFileName();
                   if((fileName!=null) && (fileName.toLowerCase().indexOf("GB2312")!=-1))
                   {
                        fileName=MimeUtility.decodeText(fileName);
                        saveFile(fileName,mpart.getInputStream(),mailid);
                   }
               }
           }
       }
       else if(part.isMimeType("message/rfc822"))
       {
           saveAttachMent((Part)part.getContent(),mailid);
       }
   }

   //设置附件存放路径
   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,String mailid) throws Exception
   {
       /*String osName = System.getProperty("os.name");
       String storedir = getAttachPath();
       String separator = "";
	   
       if(osName.toLowerCase().indexOf("win")!=-1)
       {
           separator = "\\";
           if(storedir == null || storedir.equals(""))
              storedir="c:\tmp";
       }
       else
       {
           separator = "/";
           storedir = "/tmp";
       }
	    */
	   String filepath = "linshi\\" + fileName;
       File storefile = new File(filepath);
       //Myprint("storefile's path: "+storefile.toString());
       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();
           }
		   m_dbcon.f_savefj(mailid, fileName, filepath);
       }catch(Exception excep)
       {
           excep.printStackTrace();
           throw new Exception("文件保存失败");
       }finally
       {
           bos.close();
           bis.close();
		   storefile.delete();
       }
   }
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -