【JavaMail-收取邮件】
生活随笔
收集整理的這篇文章主要介紹了
【JavaMail-收取邮件】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、收取郵件
?
package com.yht.email3;import com.yht.pdf.pdfAnalysis; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;import java.io.*; import java.text.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*;@SuppressWarnings("value={\"unchecked\", \"rawtypes\"}") public class PraseMimeMessage {private MimeMessage mimeMessage = null;private String saveAttachPath = "";// 附件下載后的存放目錄private StringBuffer bodytext = new StringBuffer();// 存放郵件內容的StringBuffer對象private String dateformat = "yy-MM-dd HH:mm";// 默認的日前顯示格式/*** 構造函數,初始化一個MimeMessage對象*/public PraseMimeMessage() {}public PraseMimeMessage(MimeMessage mimeMessage) {this.mimeMessage = mimeMessage;System.out.println("創建一個PraseMimeMessage對象........");}public void setMimeMessage(MimeMessage mimeMessage) {System.out.println(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("錯誤的電子郵件地址類型!");}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 {System.out.println(mimeMessage.getMessageID().toString());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的長度: " + 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);}if (fileName.toLowerCase().indexOf("gbk") != -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.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();}} catch (Exception exception) {exception.printStackTrace();throw new Exception("文件保存失敗!");} finally {bos.close();bis.close();}}/*** PraseMimeMessage類測試*/static String pdf_Url;public static void main(String args[]) throws Exception {String host = "pop.qq.com"; // 【pop.mail.yahoo.com.cn】String username = "3887537@qq.com";String password = "skvtezboajgfgfgfgfghjhjgfdcvncpvbide";Properties p = new Properties();p.setProperty("mail.pop3.host", "pop.qq.com"); // 按需要更改p.setProperty("mail.pop3.port", "995");// SSL安全連接參數p.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");p.setProperty("mail.pop3.socketFactory.fallback", "true");p.setProperty("mail.pop3.socketFactory.port", "995");Session session = Session.getDefaultInstance(p, null);Store store = session.getStore("pop3");store.connect(host, username, password);Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Message message[] = folder.getMessages();System.out.println("Messages's length: " + message.length);PraseMimeMessage pmm = null;for (int i = 0; i < message.length; i++) {pmm = new PraseMimeMessage((MimeMessage) message[i]);System.out.println("Message " + i + " 主題: " + pmm.getSubject());System.out.println("Message " + i + " 是否有附件: " + pmm.isContainAttach((Part) message[i]));System.out.println("Message " + i + " 發件人: " + pmm.getFrom());System.out.println("Message " + i + " 收件人: " + pmm.getMailAddress("to"));pmm.setDateFormat("yy年MM月dd日 HH:mm");pmm.getMailContent((Part) message[i]);// System.out.println("Message " + i + " 內容: \r\n" + pmm.getBodyText());String email_Body = pmm.getBodyText();if (pmm.getSubject().contains("20KG")) {//下載附件File file = new File("C:\\tmp\\");if (!file.exists()) {file.mkdirs();}pmm.setAttachPath(file.toString());pmm.saveAttachMent((Part) message[i]);}String aa = pmm.getSubject();if (aa.contains("Tigerair")) { //如果是這是名字叫"Tigerair",就進行獲取URLDocument doc =Jsoup.parse(email_Body);Elements es = doc.select("table[class=em_main_table]").select("table[style=border-collapse: collapse;]").select("table[align=center]").select("a");System.out.println("我是URL"+es.attr("href"));//}}}}?
轉載于:https://www.cnblogs.com/iitxt/p/8985417.html
總結
以上是生活随笔為你收集整理的【JavaMail-收取邮件】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接口,抽象类与内部类
- 下一篇: 为啥腾讯元宝要进行技术开源?