| javamail收郵件很麻煩。要作很多判斷,如附件中文,附件存放等。這段代碼不算完整。僅作參考。 /** * 存放收件到系統中 * * @param sess * @param pmm * @return */ private boolean storeReceiveMail(Session sess, PlatMessageMailset pmm) throws Exception { Store store = null; POP3Folder folder = null; long size = 0; try { URLName url = new URLName("pop3", pmm.getPop3(), 110, "", pmm.getUsername(), pmm.getPassword()); javax.mail.Session s = javax.mail.Session.getDefaultInstance(System.getProperties(), null); store = s.getStore(url); // if (folder == null) throw new Exception("No default folder"); //如果是收件匣 store.connect(); folder = (POP3Folder) store.getFolder("INBOX"); if (folder == null) throw new Exception("No POP3 INBOX"); //使用唯讀方式開啟收件匣 folder.open(Folder.READ_WRITE); //得到檔案夾資訊,擷取郵件清單 FetchProfile profile = new FetchProfile(); profile.add(UIDFolder.FetchProfileItem.UID); profile.add(FetchProfile.Item.ENVELOPE); Message[] msgs = folder.getMessages(); folder.fetch(msgs, profile); for (int msgNum = 0; msgNum < msgs.length; msgNum++) { Message message = (msgs[msgNum]); if (!message.getFlags().contains(Flags.Flag.SEEN)) { PlatMessage pm = new PlatMessage(); pm.setReceiver(pmm.getOwner()); pm.setRec_email(pmm.getMailaddr()); pm.setSend_date(message.getSentDate()); pm.setFolder("INBOX"); pm.setMsg_tag(2); pm.setCreate_date(new Date()); pm.setIstag(0); pm.setAcctag(0); ///////////////////////////////////存放郵件 //獲得發送郵件地址 String text = ""; String from = ((InternetAddress) message.getFrom()[0]).getPersonal(); //InternetAddress ia = new InternetAddress(from); if (from == null) from = ((InternetAddress) message.getFrom()[0]).getAddress(); pm.setSender(from); //擷取主題 String subject = message.getSubject(); pm.setMsg_title(subject); System.out.println("收取郵件,來自:" + from + "。主題:" + subject); //擷取資訊對象 Part messagePart = message; Object content = messagePart.getContent(); String acc_id = ""; System.out.println("content" + content); if (content instanceof String) { //附件 text = String.valueOf(content); System.out.println("這兒" + text); } else if (content instanceof Multipart) { Multipart mp = ((Multipart) content); for (int k = 0; k < mp.getCount(); k++) { BodyPart bp = mp.getBodyPart(k); Object t = bp.getContent(); if (t instanceof String) { text = (String.valueOf(t)); System.out.println("這兒1" + text); } else if (t instanceof InputStream) { String physical = UUIDHex.getUUIDHex(); FileControl fc = new FileControl(); fc.setMyFile(new File(MESSAGE_ACC_PATH + "\\" + physical)); fc.createFile(); fc.writeFile(bp.getInputStream()); PlatMsgAccessary pma = new PlatMsgAccessary(); pma.setFile_name(StringUtil.getString(MailUtil.decodeText(bp.getFileName()), "未知檔案名稱")); pma.setPhysical(physical); pma.setFile_size(bp.getSize()); sess.save(pma); acc_id += physical + "||"; System.out.println("收取附件,名稱:" + MailUtil.decodeText(bp.getFileName()) + "。大小:" + bp.getSize()); size += bp.getSize(); pm.setAcctag(1); } } } pm.setAcc_id(acc_id); /** //擷取content類型 String contentType = messagePart.getContentType(); //如果郵件內容是純文字或者是HTML,那麼列印出資訊 String context = ""; if (contentType.startsWith("text/plain") || contentType.startsWith("text/html")) { InputStream is = messagePart.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String thisLine = reader.readLine(); context += thisLine; while (thisLine != null) { thisLine = reader.readLine(); context += thisLine; } size += context.length(); } **/ pm.setMsg_size(message.getSize()); pm.setMsg_sys("SSEIP"); // pm.setMsg_text(context); sess.save(pm); sess.flush(); System.out.println("郵件內文:" + text); saveMessageText(sess, pm.getMsg_id(), text);// if (pmm.getDeltag() == 1) { message.setFlag(Flags.Flag.DELETED, true); } else { message.setFlag(Flags.Flag.SEEN, true); } } // folder.expunge(); ////////////////////////////////////////結束 } return true; } catch (Exception ex) { throw ex; } finally { if (folder != null) { folder.close(true); } store.close(); } } |