一、收取邮件

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-收取邮件】相关推荐

  1. javaMail 收取邮件,邮件获取,并保存附件

    给大家介绍一个代码在线自动生成的网站:https://www.5ceo.cn 技术之家 代码自动生成 package com.frame.mall.core.mail;/***/import java ...

  2. JavaMail 收邮件 草稿箱 发件箱 IMAP 技巧

    @ 使用JavaMail收取邮件,可以通过IMAP协议收取草稿箱.发件箱等文件夹的邮件. Folder defaultFolder  =  store.getDefaultFolder();  // ...

  3. java发送hotmail邮件_利用javamail收取Hotmail的退信

    利用javamail收取Hotmail的退信 (2007-04-05 23:44:19) Hotmail 是我最常用的Email Client.虽然时下hotmail的容量是小了些,速度也常常慢得让人 ...

  4. javamail pop3模式收取邮件

    pop3协议收取邮件inbox.getMessages()是一次性读取所有邮件,如果邮箱邮件过多的话,会非常耗时. 还有一个方法是Folder.getMessages(int start, int e ...

  5. java邮箱插件,初步实现 Mail 插件 —— 收取邮件

    在上篇中描述了发送邮件的主要过程,今天我想和大家分享一下 Smart Mail 插件的另外一个功能 -- 收取邮件,可能没有发送邮件那么常用. 在具体描述如何实现收取邮件之前,有必要对发送邮件与收取邮 ...

  6. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两 ...

  7. Python学习笔记:电子邮件,POP3收取邮件

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. 使用javaMail收邮件 支持附件下载

    http://haohaoxuexi.iteye.com/blog/1162044 使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap.这两种协议都可以用来收邮件,但是在其中的处 ...

  9. 给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!

    /* 最近写了一个自动收邮件的机器人,原来一开始偷懒"娶"了 COM 组件 JMail: <封装 JMail 4.4 的 POP3 为 .Net 组件 (.dll 程序集), ...

  10. 使用javamail进行邮件发送

    使用javamail进行邮件发送 // 在javax.mail包中的类,需要引入的. import javax.activation.DataHandler; import javax.activat ...

最新文章

  1. Windows Azure 解决方案系列:组合拍卖供应商以云服务快速拓展,并节省成本
  2. React入门---事件与数据的双向绑定-9
  3. 关于数据中台的深度思考与总结,20000 字不到一丢丢。。。
  4. 中文NER涨点神器!基于多元数据的双流Transformer编码模型
  5. python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...
  6. Swing开发界面时的一个bug复盘
  7. 2小时撸完代码之后,所有程序员都逃不过的一天... (强共鸣)
  8. 前端网页 — 初始化文件
  9. ORACLE数据库 常用命令和Sql常用语句
  10. oracle连接数达不到上限,Oracle超出最大连接数问题及解决(转)
  11. Running 1 linux_yesterdaytodaytomorrow
  12. 安装CentOS时提示an error has occurred - no valid devices were fo
  13. cas单点登录的时序图
  14. 有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药?
  15. 外显子名词解释_生物信息学常用名词解释(一)
  16. 【Python】【Jupyter】Jupyter 的简单使用 与 Python的基本输出输入
  17. Ubuntu 16.04系统安装VS Code流程详解
  18. 韩信点兵的问题求解方法
  19. B站网页视频加速设置
  20. 37互娱旗下秒小程笔试题-2020.9

热门文章

  1. Android 破解之道 (二)
  2. Android的IPC机制Binder
  3. java异步执行任务
  4. go 获得 mysql 实际运行 SQL,Golang实践录:一个数据库迁移的代码记录
  5. POJ 3580. SuperMemo
  6. JZOJ 3632. 【汕头市选2014】舞伴
  7. core控制器属性注入的用处_了解ASP.NET Core 依赖注入,看这篇就够了
  8. QML编程之旅 之可视元素
  9. 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
  10. performance and scalability