posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          用java收郵件- -

          Posted on 2007-05-12 11:09 semovy 閱讀(1220) 評論(0)  編輯  收藏 所屬分類: JAVA應用

          用java收郵件- -

                                                

          收郵件沒問題了,缺點就是郵件太多的話,會等好長時間才出來,應用線程方式來收,否則看著象死機了,:),以后再說了

          package com.IEthing.util;

          import java.io.*;
          import java.text.*;
          import java.util.*;

          import javax.mail.*;
          import javax.mail.internet.*;
          import javax.mail.*;
          import javax.mail.internet.*;
          import javax.activation.*;
          import javax.mail.MessagingException;
          import javax.mail.Session;
          import javax.mail.internet.MimeMessage;

          import javax.mail.MessagingException;
          import javax.mail.Session;
          import javax.mail.internet.MimeMessage;


          /**
           * @author David update by tegger
           *
           * TODO To change the template for this generated type comment go to Window -
           * Preferences - Java - Code Style - Code Templates
           */
          public class Pop3Bean {

            private int mailCounter; //郵件計數

            private int mailIndex; //郵件編號,即郵件在messages數組中的位置

            private int mailDownErrorCounter; //正在下載郵件時,出錯的計數器

            private boolean[] recordFailure; //記錄下載出錯的郵件的序號

            private int totalRetryTimes; //總共重試次數

            private int retryTimeCounter; //記下重試的次數

            private boolean otherError; //若是在郵件正式下載之前出錯,則置該值為true

            private String extension=".eml"; //文件擴展名

            private Store store;

            private Folder folder;

            private Message[] messages;

            private Message message;

            private Part part;

            private String emlName;

            private String attachName;

            private int allMessageCount;

            private int messageCount;

            private String dateformat; //默認的日前顯示格式

            //  private String propFile = MailConstants.PROPS_FILE_NAME;//用這個接口類的好處是更改配置文件路徑的時候不需要更改每個類

            private String protocol="pop3"; //服務協議

            private String mailHost; //服務器地址

            private String userName; //用戶名

            private String password; //密碼

            private String saveAttachPath; //附件下載后的存放目錄

            private String saveEmlPath="E:\\test\\"; //保存eml文件的路徑

            public Pop3Bean() throws IOException
            {
              /*   FileProperties fp = new FileProperties(propFile);
                 fp.load();
                 protocol = fp.getProperty(MailConstants.RECV_PROTO);
                 mailHost = fp.getProperty(MailConstants.RECV_HOST);
                 userName = fp.getProperty(MailConstants.RECV_USER);
                 password = fp.getProperty(MailConstants.RECV_PASS);
                 saveAttachPath = fp.getProperty(MailConstants.RECV_ATTACH);
                 saveEmlPath = fp.getProperty(MailConstants.RECV_ROOT);
                 dateformat = fp.getProperty("mail.receive.dtfmat");
                 extension = fp.getProperty("mail.receive.extension");
                 totalRetryTimes = Integer
                         .parseInt(fp.getProperty("mail.receive.retry"));*/
            }

            /**
             * 設置郵件主機
             */
            public void setMailHost(String mailHost)
            {
              this.mailHost = mailHost;
            }

            /**
             * 獲取郵件主機
             */
            public String getMailHost()
            {
              return this.mailHost;
            }

            /**
             * 設置郵件帳號
             */
            public void setUserName(String userName)
            {
              this.userName = userName;
            }

            /**
             * 獲取郵件帳號
             */
            public String getUserName()
            {
              return this.userName;
            }

            /**
             * 設置郵件密碼
             */
            public void setPassword(String password)
            {
              this.password = password;
            }

            /**
             * 設置Store
             */
            public void setStore(Store store)
            {
              this.store = store;
            }

            /**
             * 設置郵箱文件夾
             */
            public void setFolder(Folder folder)
            {
              this.folder = folder;
            }

            /**
             * 設置messages數組
             */
            public void setMessages(Message[] messages)
            {
              this.messages = messages;
            }

            /**
             * 設置message
             */
            public void setMessage(Message message)
            {
              this.message = message;
            }
           public void setCurMessage(int i)
           {
             this.message = this.messages[i];
           }
            /**
             * 獲取message
             */
            public Message getMessage()
            {
              return this.message;
            }

            /**
             * 獲取folder中的message數量
             *
             * @throws MessagingException
             */
            public int getAllMessageCount() throws MessagingException
            {
              this.allMessageCount = folder.getMessageCount();
              return allMessageCount;
            }

            /**
             * 設置allMessageCount
             *
             * @throws MessagingException
             */
            private void setAllMessageCount() throws MessagingException
            {
              this.allMessageCount = this.folder.getMessageCount();
            }

            /**
             * 獲取messages中message的數量
             *
             * @return
             */
            public int getMessageCount()
            {
              this.messageCount = this.messages.length;
              return messageCount;
            }

            /**
             * 獲得folder中新郵件的數量
             *
             * @return
             * @throws MessagingException
             */
            public int getNewMessageCount() throws MessagingException
            {
              return this.folder.getNewMessageCount();
            }

            /**
             * 獲得folder中未讀郵件的數量
             *
             * @return
             * @throws MessagingException
             */
            public int getUnreadMessageCount() throws MessagingException
            {
              return this.folder.getUnreadMessageCount();
            }

            /**
             * 獲取Part
             */
            public Part getPart()
            {
              return (Part) message;
            }

            /**
             * 設置Part
             */
            public void setPart(Part part)
            {
              this.part = part;
            }

            /**
             * 設置附件存放路徑
             */

            public void setAttachPath(String attachPath)
            {
              this.saveAttachPath = attachPath;
            }

            /**
             * 獲得附件存放路徑
             */

            public String getAttachPath()
            {
              return saveAttachPath;
            }

            /**
             * 設置eml存放路徑
             */

            public void setEmlPath(String emlPath)
            {
              this.saveEmlPath = emlPath;
            }

            /**
             * 獲得eml存放路徑
             */

            public String getEmlPath()
            {
              return saveEmlPath;
            }

            public void setEmlName(String emlName)
            {
              this.emlName = emlName;
            }

            public String getEmlName()
            {
              return emlName;
            }

            public void setAttachName(String attachName)
            {
              this.attachName = attachName;
            }

            public String getAttachName()
            {
              return attachName;
            }

            public void setExtension(String extension)
            {
              this.extension = extension;
            }

            public String getExtension()
            {
              return extension;
            }

            /**
             * 設置日期顯示格式
             */

            public void setDateFormat(String format) throws Exception
            {
              this.dateformat = format;
            }

            /**
             * 獲取日期顯示格式
             */
            public String getDateFormat(String format) throws Exception
            {
              return this.dateformat;
            }

            /**
             * 獲得發件人的地址和姓名
             *
             * @throws Exception
             */
            public String getFrom() throws Exception
            {
              return getFrom(this.message);
            }

            public String getFrom(Message mimeMessage) 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 getTOAddress() throws Exception
            {
              return getMailAddress("TO", this.message);
            }

            public String getCCAddress() throws Exception
            {
              return getMailAddress("CC", this.message);
            }

            public String getBCCAddress() throws Exception
            {
              return getMailAddress("BCC", this.message);
            }

            public String getTOAddress(Message mimeMessage) throws Exception
            {
              return getMailAddress("TO", mimeMessage);
            }

            public String getCCAddress(Message mimeMessage) throws Exception
            {
              return getMailAddress("CC", mimeMessage);
            }

            public String getBCCAddress(Message mimeMessage) throws Exception
            {
              return getMailAddress("BCC", mimeMessage);
            }

            public String getMailAddress(String type) throws Exception
            {
              return getMailAddress(type, this.message);
            }

            public String getMailAddress(String type, Message mimeMessage) 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
            {
              return getSubject(this.message);
            }

            public String getSubject(Message mimeMessage) throws MessagingException
            {
              String subject = "";
              try
              {
                subject = MimeUtility.decodeText(mimeMessage.getSubject());
                if (subject == null)
                  subject = "";
              }
              catch (Exception exce)
              {
              }
              return subject;
            }

            /**
             * 獲得郵件發送日期
             */
            public String getSentDate() throws Exception
            {
              return getSentDate(this.message);
            }

            public String getSentDate(Message mimeMessage) throws Exception
            {
              Date sentdate = mimeMessage.getSentDate();
              SimpleDateFormat format = new SimpleDateFormat(dateformat);
              return format.format(sentdate);
            }

            /**
             * 判斷此郵件是否需要回執,如果需要回執返回"true",否則返回"false"
             */
            public boolean getReplySign() throws MessagingException
            {
              return getReplySign(this.message);
            }

            public boolean getReplySign(Message mimeMessage) 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 getMessageId(this.message);
            }

            public String getMessageId(Message mimeMessage) throws MessagingException
            {
              return ( (MimeMessage) mimeMessage).getMessageID();
            }

            /**
             * 初始化出錯郵件數組
             *
             */
            private void setRecordFailure()
            {
              this.recordFailure = new boolean[getMessageCount()];
            }

            /**
             * 返回出錯數組
             *
             * @return
             */
            public boolean[] getRecordFailure()
            {
              return this.recordFailure;
            }

            /**
             * 判斷此郵件是否已讀,如果未讀返回返回false,反之返回true
             */
            public boolean isNew() throws MessagingException
            {
              return isNew(this.message);
            }

            /**
             * 判斷此郵件是否已讀,如果未讀返回返回false,反之返回true
             */
            public boolean isNew(Message mimeMessage) throws MessagingException
            {
              boolean isnew = false;
              Flags flags = 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() throws Exception
            {
              return isContainAttach(this.part);
            }

            /**
             * 判斷此郵件是否包含附件
             */
            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;
            }

            /**
             * 連到server,創建folder對象,創建message對象
             */
            public void getConn()
            {
              try
              {
                this.getStoreFromServer();
                this.getFolderFromStore();
              }
              catch (Exception e)
              {
                otherError = true;
                mailDownErrorCounter++;
                System.out.print(e.getLocalizedMessage());
              }
            }

            /**
             * 建立Store連接
             */
            private Store getStoreFromServer() throws Exception
            {
              //創建session
              Session session = Session.getDefaultInstance(System.getProperties(),
                  null);
              //session.setDebug(true);

              //創建store,建立連接
              Store store = session.getStore(protocol);
              System.out.println("connecting");
              store.connect(mailHost, userName, password);
              System.out.println("connected successfully");
              setStore(store);
              return store;
            }

            /**
             * 打開INBox文件夾
             */
            private Folder getFolderFromStore()
            {
              //打開郵件相應文件夾
              Folder getFolder;
              try
              {
                getFolder = store.getFolder("INBOX");
                getFolder.open(Folder.READ_ONLY);
                setFolder(getFolder);
                return getFolder;
              }
              catch (MessagingException e)
              {
                // TODO Auto-generated catch block
                System.err.println("獲取Folder失敗!");
                e.printStackTrace();
              }
              return null;
            }

            /**
             * 從folder中提取所有的messages
             *
             * @throws MessagingException
             */
            public void getAllMessages() throws MessagingException
            {
              //從郵件文件夾獲取郵件信息
              Message[] messages = folder.getMessages();
              setMessages(messages);
              setRecordFailure(); //初始化出錯數組
              //        setMessageCount();
            }

            /**
             * 獲得messageNums數組指定的message
             *
             * @param messageNums
             * @throws MessagingException
             */
            public void getMessages(int[] messageNums) throws MessagingException
            {
              Message[] messages = folder.getMessages(messageNums);
              setMessages(messages);
              setRecordFailure(); //初始化出錯數組
              //        setMessageCount();
            }

            /**
             * 獲得start和end之間的message
             *
             * @param start
             * @param end
             * @throws MessagingException
             */
            public void getMessages(int start, int end) throws MessagingException
            {
              Message[] messages = folder.getMessages(start, end);
              setMessages(messages);
              setRecordFailure(); //初始化出錯數組
              //        setMessageCount();
            }

            /**
             * 關閉連接
             */
            public void closeConnection()
            {
              try
              {
                messages = null;
                message = null;
                if (folder.isOpen())
                  folder.close(true);
                store.close();
                System.out.println("close");
              }
              catch (Exception e)
              {
                System.out.println("關閉和郵件服務器之間連接時出錯!");
                e.printStackTrace();
              }
            }

            /**
             * 獲得當前郵件的基本方法 Pop3Bean內部應該調用這個方法 以便在調用函數中加入重試機制
             *
             * @throws MessagingException
             * @throws MessagingException
             *
             */
            public void getMail() throws Throwable
            { //拋出異常,用以重擲
              try
              {
                saveMessageAs(message);
                parseMessage(message);
              }
              catch (IOException e)
              {
                // TODO Auto-generated catch block
                System.err.println("保存郵件出錯,檢查保存路徑");
                throw new IOException("保存郵件出錯,檢查保存路徑");
              }
              catch (MessagingException e)
              {
                // TODO Auto-generated catch block
                System.err.println("郵件轉換出錯");
                throw new MessagingException("郵件轉換出錯");
              }
              catch (Exception e)
              {
                System.err.println("未知錯誤");
                otherError = true;
                e.printStackTrace();
                throw new Exception("未知錯誤");
              }
            }

            /**
             * 獲得指定的郵件
             *
             * @param index
             */
            public void getMail(int index)
            {
              mailDownErrorCounter = 0; //郵件下載出錯計數器置零
              try
              { //獲取郵件下載之前的錯誤
                setMessage(messages[index]); //設置當前message
                System.out.println("正在獲取第" + index + "封郵件. . .");
                getMail(); //獲取當前message
                System.out.println("成功獲取第" + index + "封郵件");
              }
              catch (Throwable e)
              { //獲得重擲異常
                recordFailure[index] = true;
                mailDownErrorCounter++;
                System.err.println("下載第" + index + "封郵件時出錯");
                retry();
              }
            }

            /**
             * 獲取messages中的所有郵件
             */
            public void getAllMail()
            {
              int mailArrayLength; //將要下載的郵件的數量。若是重試時,則為還未下載的郵件數量

              mailArrayLength = getMessageCount();

              System.out.println("一共有郵件" + mailArrayLength + "封");

              mailDownErrorCounter = 0; //郵件下載出錯計數器置零
              mailCounter = 0;
              for (int index = 0; index < mailArrayLength; index++)
              {
                try
                {
                  setMessage(messages[index]); //設置當前message
                  System.out.println("正在獲取第" + index + "封郵件. . .");
                  getMail(); //獲取當前message
                  System.out.println("成功獲取第" + index + "封郵件");
                  mailCounter++;
                }
                catch (Throwable e)
                {
                  otherError = false;
                  recordFailure[index] = true;
                  mailDownErrorCounter++;
                  System.err.println("下載第" + index + "封郵件時出錯");
                }
              }
              System.out.println("成功下載" + mailCounter + "封郵件");
              mailCounter = 0;
              if (mailDownErrorCounter != 0)
                retry();
            }

            /**
             * 保存郵件源文件
             */

            public void saveMessageAs(Message message)
            {
              String oriFileName;
              String fileExtend;

              try
              {
                oriFileName = getInfoBetweenBrackets(getMessageId(message)
                    .toString());
                //設置文件后綴名。若是附件則設法取得其文件后綴名作為將要保存文件的后綴名,若是正文部分則用.htm做后綴名
                String emlName = oriFileName;
                String fileNameWidthExtension = getEmlPath() + oriFileName
                    + getExtension();
                File storeFile = new File(fileNameWidthExtension);
                for (int i = 0; storeFile.exists(); i++)
                {
                  emlName = oriFileName + i;
                  fileNameWidthExtension = getEmlPath() + emlName
                      + getExtension();
                  storeFile = new File(fileNameWidthExtension);
                }
                setEmlName(emlName);
                System.out.println("storefile's path: " + fileNameWidthExtension);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                message.writeTo(baos);
                StringReader in = new StringReader(baos.toString());
                saveFile(fileNameWidthExtension, in);
              }
              catch (MessagingException e)
              {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
              catch (Exception e)
              {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
            }

            /*
             * 解析郵件
             */
            public void parseMessage(Message message) throws IOException,
                MessagingException
            {
              Object content = message.getContent();
              if (content instanceof Multipart)
              {
                handleMultipart( (Multipart) content);
              }
              else
              {
                handlePart(message);
              }
            }

            /*
             * 解析Multipart
             */
            public void handleMultipart(Multipart multipart) throws MessagingException,
                IOException
            {
              for (int i = 0, n = multipart.getCount(); i < n; i++)
              {
                handlePart(multipart.getBodyPart(i));
              }
            }

            /*
             * 解析指定part,從中提取文件
             */
            public void handlePart(Part part) throws MessagingException, IOException
            {
              String disposition = part.getDisposition(); // Find attachment
              String contentType = part.getContentType();
              String str;
              InputStreamReader sbis = new InputStreamReader(part.getInputStream());
              if (disposition == null)
              { // When just body
                System.out.println("Null: " + contentType);
                // Check if plain
                if ( (contentType.length() >= 9)
                    && (contentType.toLowerCase().substring(0, 9)
                    .equals("text/plai")))
                {

                  System.out.println(getAttachPath() + getEmlName() + ".txt");
                  saveFile(getAttachPath() + getEmlName() + ".txt", sbis);
                }
                else if ( (contentType.length() >= 8) // Check if html
                    && (contentType.toLowerCase().substring(0, 8)
                    .equals("text/htm")))
                {
                  saveFile(getAttachPath() + getEmlName() + ".html", sbis);
                }
                else if ( (contentType.length() >= 9) // Check if html
                    && (contentType.toLowerCase().substring(0, 9)
                    .equals("image/gif")))
                {
                  saveFile(getAttachPath() + getEmlName() + ".gif", sbis);
                }
                else if ( (contentType.length() >= 10)
                    && contentType.toLowerCase().substring(0, 10).equals(
                    "multipart/"))
                { // Check if multipart
                  System.out.println("multipart body: " + contentType);
                  Multipart mp = (Multipart) (part.getContent());
                  handleMultipart(mp);
                }
                else
                { // Unknown type
                  System.out.println("Other body: " + contentType);
                  saveFile(getAttachPath() + getEmlName() + ".txt", sbis);
                }
              }
              else if (disposition.equalsIgnoreCase(Part.ATTACHMENT))
              {
                System.out.println("Attachment: " + part.getFileName() + " : "
                    + contentType);
                //outToFile.println("Attachment: " + part.getFileName() + " : "
                //        + contentType);
                saveFile(getAttachPath() + part.getFileName(), sbis);
              }
              else if (disposition.equalsIgnoreCase(Part.INLINE))
              {
                System.out.println("Inline: " + part.getFileName() + " : "
                    + contentType);
                //outToFile.println("Inline: " + part.getFileName() + " : "
                //        + contentType);
                saveFile(getAttachPath() + part.getFileName(), sbis);
              }
              else
              { // Should never happen
                System.out.println("Other: " + disposition);
                //            outToFile.println("Other: " + disposition);
              }
            }

            public void saveFile(String fileName, Reader input) throws IOException
            {
              if (fileName == null)
              {
                fileName = File.createTempFile(getAttachPath() + "xx", ".out")
                    .getName();
              }
              // Do no overwrite existing file
              File file = new File(fileName);
              int lastDot = fileName.lastIndexOf(".");
              String extension = fileName.substring(lastDot);
              String fullFileName = fileName;
              fileName = fileName.substring(0, lastDot);
              for (int i = 0; file.exists(); i++)
              {
                file = new File(fileName + i + extension);
              }
              FileWriter fos = new FileWriter(file);
              BufferedWriter bos = new BufferedWriter(fos);
              BufferedReader bis = new BufferedReader(input);
              int aByte;
              while ( (aByte = bis.read()) != -1)
              {
                bos.write(aByte);
              }
              bos.flush();
              bos.close();
              bis.close();
            }

            public void readEmlFile(String fileName) throws MessagingException
            {
              try
              {
                //TODO readEmlFile
                InputStream fis = new FileInputStream(fileName);
                Object emlObj = (Object) fis;
                Session mailSession = Session.getDefaultInstance(System.getProperties(), null);
                MimeMessage msg = new MimeMessage(mailSession, fis);
                message = msg;

              }
              catch (FileNotFoundException e)
              {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
            }

            private String getInfoBetweenBrackets(String str) throws Exception
            {
              int i, j; //用于標識字符串中的"<"和">"的位置
              if (str == null)
              {
                str = "error";
                return str;
              }
              i = str.lastIndexOf("<");
              j = str.lastIndexOf(">");
              if (i != -1 && j != -1)
                str = str.substring(i + 1, j);
              return str;
            }

            //當有郵件無法下載時進行重試
            private void retry()
            {
              mailCounter = 0;
              while (retryTimeCounter < totalRetryTimes && mailDownErrorCounter != 0)
              {
                if (!store.isConnected() || !folder.isOpen())
                {
                  System.err.println("與服務器連接斷開,請重新連接");
                  closeConnection();
                  return;
                }

                System.out.println("第" + (retryTimeCounter + 1) + "次重試");

                mailDownErrorCounter = 0; //郵件下載出錯計數器置零

                for (int index = 0; index < getMessageCount(); index++)
                {
                  if (recordFailure[index])
                  {
                    try
                    {
                      setMessage(messages[index]); //設置當前message
                      System.out.println("正在獲取第" + index + "封郵件. . .");
                      getMail(); //獲取當前message
                      System.out.println("成功獲取第" + index + "封郵件");
                      mailCounter++;
                      recordFailure[index] = false;
                    }
                    catch (Throwable e)
                    {
                      otherError = false;
                      recordFailure[index] = true;
                      mailDownErrorCounter++;
                      System.err.println("重新下載第" + index + "封郵件時出錯");
                    }
                  }
                }
                retryTimeCounter++;
              }
              System.out.println("成功下載" + mailCounter + "封郵件");
              mailCounter = 0; //將郵件計數置零
              mailDownErrorCounter = 0; //下載錯誤數量歸零
            }

                public static void main(String[] args) throws Throwable
                {

                  try
                  {
                    Pop3Bean mail;
                    mail = new Pop3Bean();
                    mail.setUserName("abc");
                    mail.setMailHost("pop3.sohu.com");
                    mail.setPassword("***");
                    mail.setAttachPath("e:/test/");
                    mail.setExtension(".eml");
                    mail.setDateFormat("yyyydddd");

                    mail.getConn();
                    System.out.println("Count of messages in folder: " + mail.getAllMessageCount());
                    System.out.println("Count of new messages in folder: " + mail.getNewMessageCount());
                    System.out.println("Count of unread messages in folder: " + mail.getUnreadMessageCount());
                    mail.getAllMessages();
                    System.out.println("Count of loaded messages: " + mail.getMessageCount());
                    mail.getAllMail();
                    mail.setCurMessage(0);
                   System.out.println(mail.getSubject());
                    mail.closeConnection();
            //   ReadEml mail = new ReadEml("H:\\My_Soft_Works\\java\\jteam\\jmail\\received\\41C95D0F.008CD1.01099.eml");

                  }
                  catch (Exception e)
                  {
                    System.out.println("出現未預料的錯誤!");
                    e.printStackTrace();
                  }
                }
              }


          主站蜘蛛池模板: 邻水| 常山县| 青川县| 双辽市| 安吉县| 中西区| 临朐县| 改则县| 尚志市| 绍兴市| 陆丰市| 阜康市| 正蓝旗| 洪洞县| 辽源市| 德安县| 万年县| 罗山县| 永安市| 睢宁县| 高雄市| 库尔勒市| 乌恰县| 永胜县| 中山市| 东至县| 积石山| 莱西市| 南投县| 永城市| 盱眙县| 罗江县| 平湖市| 琼海市| 西安市| 林甸县| 阳春市| 晋城| 呼伦贝尔市| 亚东县| 灌云县|