溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

          使用javamail接收電子郵件代碼

          import java.io.BufferedInputStream;
          import java.io.BufferedOutputStream;
          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.InputStream;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          import java.util.Properties;

          import javax.mail.BodyPart;
          import javax.mail.Flags;
          import javax.mail.Folder;
          import javax.mail.Message;
          import javax.mail.MessagingException;
          import javax.mail.Multipart;
          import javax.mail.Part;
          import javax.mail.Session;
          import javax.mail.Store;
          import javax.mail.URLName;
          import javax.mail.internet.InternetAddress;
          import javax.mail.internet.MimeMessage;
          import javax.mail.internet.MimeUtility;


          /**   
           * 有一封郵件就需要建立一個ReciveMail對象   
           
          */
          public class ReciveMail {
              
              
          private MimeMessage mimeMessage = null;
              
          private String saveAttachPath = ""//附件下載后的存放目錄    
              private StringBuffer bodytext = new StringBuffer();//存放郵件內容    
              private String dateformat = "yy-MM-dd HH:mm"//默認的日前顯示格式    

              
          public ReciveMail(MimeMessage mimeMessage) {
                  
          this.mimeMessage = mimeMessage;
              }

              
          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 {
                  
                  Properties props 
          = System.getProperties();
                  props.put(
          "mail.smtp.host""smtp.163.com");
                  props.put(
          "mail.smtp.auth""true");
                  Session session 
          = Session.getDefaultInstance(props, null);
                  URLName urln 
          = new URLName("pop3""pop3.163.com"110null,
                          
          "xxxxxx""*******");
                  Store store 
          = session.getStore(urln);
                  store.connect();
                  Folder folder 
          = store.getFolder("INBOX");
                  folder.open(Folder.READ_ONLY);
                  Message message[] 
          = folder.getMessages();
                  System.out.println(
          "您有郵件: "+ message.length+ "");
                  ReciveMail pmm 
          = null;
                  
          for (int i = 0; i < message.length; i++) {
                      System.out.println(
          "==============================第"+(i+1)+"封===========================");
                      pmm 
          = new ReciveMail((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:\\ddd");
                      pmm.saveAttachMent((Part) message[i]);
                  }
              }
          }
          posted on 2010-10-21 11:45 雪山飛鵠 閱讀(2587) 評論(3)  編輯  收藏 所屬分類: javase

          Feedback

          # re: 使用javamail接收電子郵件[轉][未登錄] 2011-02-07 11:27 Jack
          謝謝,幫了我許多忙  回復  更多評論
            

          # re: 使用javamail接收電子郵件[轉][未登錄] 2012-07-06 17:29 Louis
          謝謝,很受用。  回復  更多評論
            

          # re: 使用javamail接收電子郵件[轉] 2012-12-02 19:57 toxicrose
          很感謝  回復  更多評論
            

          主站蜘蛛池模板: 金沙县| 黑水县| 南平市| 独山县| 阳江市| 洪洞县| 平昌县| 临洮县| 绥宁县| 拜城县| 阳江市| 双牌县| 昭觉县| 台东市| 洛川县| 宝应县| 通山县| 壶关县| 沧州市| 阳高县| 松江区| 台北县| 苍梧县| 盖州市| 泉州市| 乌拉特后旗| 星座| 疏附县| 湘潭县| 沛县| 怀来县| 原阳县| 陆良县| 托克托县| 富川| 济阳县| 崇信县| 桦南县| 万山特区| 和田市| 云和县|