JavaMail获取邮件内容
2016-11-25 11:25
155 查看
这是好久之前写的文章了,今天改了改,跟大家分享一下。
此图上的内容都可以解析到你指定的地方。
此图上的内容都可以解析到你指定的地方。
import java.io.FileOutputStream; import java.io.InputStream; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; public class ParserMail { /** * 获取邮件内容 * @param args * @throws Exception */ private static String host="pop3.163.com"; public static void main(String[] args) throws Exception { Properties props=new Properties(); //设置邮件接收协议为pop3 props.setProperty("mail.store.protocol", "pop3"); props.setProperty("mail.pop3.host", host); Session session = Session.getInstance(props); Store store = session.getStore("pop3"); //连接要获取数据的邮箱 主机+用户名+密码 store.connect(host, "xxx@163.com", "xxx"); Folder folder = store.getFolder("inbox"); //设置邮件可读可写 folder.open(Folder.READ_WRITE); Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { //解析发件人地址 String address = messages[i].getFrom()[0].toString(); //解析邮件主题 String subject = messages[i].getSubject(); //如果只是纯文本文件情况 //String content = (String) messages[i].getContent(); //MIME中包含文本情况 //getTextMultipart(messages[i]); //MIME中包含图片情况 //getPicMultipart(messages[i]); //MIME中包含附件情况 //getAttachmentMultipart(messages[i]); //解析综合数据情况 getAllMultipart(messages[i]); } folder.close(true); store.close(); } /** * 解析综合数据 * @param part * @throws Exception */ private static void getAllMultipart(Part part) throws Exception{ String contentType = part.getContentType(); int index = contentType.indexOf("name"); boolean conName = false; if(index!=-1){ conName=true; } //判断part类型 if(part.isMimeType("text/plain") && ! conName) { System.out.println((String) part.getContent()); }else if (part.isMimeType("text/html") && ! conName) { System.out.println((String) part.getContent()); }else if (part.isMimeType("multipart/*")) { Multipart multipart = (Multipart) part.getContent(); int counts = multipart.getCount(); for (int i = 0; i < counts; i++) { //递归获取数据 getAllMultipart(multipart.getBodyPart(i)); //附件可能是截图或上传的(图片或其他数据) if (multipart.getBodyPart(i).getDisposition() != null) { //附件为截图 if (multipart.getBodyPart(i).isMimeType("image/*")) { InputStream is = multipart.getBodyPart(i) .getInputStream(); String name = multipart.getBodyPart(i).getFileName(); String fileName; //截图图片 if(name.startsWith("=?")){ fileName = name.substring(name.lastIndexOf(".") - 1,name.lastIndexOf("?=")); }else{ //上传图片 fileName = name; } FileOutputStream fos = new FileOutputStream("D:\\" + fileName); int len = 0; byte[] bys = new byte[1024]; while ((len = is.read(bys)) != -1) { fos.write(bys,0,len); } fos.close(); } else { //其他附件 InputStream is = multipart.getBodyPart(i) .getInputStream(); String name = multipart.getBodyPart(i).getFileName(); FileOutputStream fos = new FileOutputStream("D:\\" + name); int len = 0; byte[] bys = new byte[1024]; while ((len = is.read(bys)) != -1) { fos.write(bys,0,len); } fos.close(); } } } }else if (part.isMimeType("message/rfc822")) { getAllMultipart((Part) part.getContent()); } } /** * 解析附件内容 * @param part * @throws Exception */ private static void getAttachmentMultipart(Part part) throws Exception{ if(part.isMimeType("multipart/*")){ Multipart multipart = (Multipart) part.getContent(); int count = multipart.getCount(); for (int i = 0; i < count; i++) { BodyPart bodyPart = multipart.getBodyPart(i); if(bodyPart.getDisposition()!=null){ InputStream is = bodyPart.getInputStream(); FileOutputStream fos=new FileOutputStream("路径+文件名"); int len=0; byte[] bys=new byte[1024]; while((len=is.read(bys))!=-1){ fos.write(bys, 0, len); } fos.close(); } } } } /** * 解析图片内容 * @param part * @throws Exception */ private static void getPicMultipart(Part part) throws Exception{ if(part.isMimeType("multipart/*")){ Multipart multipart = (Multipart) part.getContent(); int count = multipart.getCount(); for (int i = 0; i < count; i++) { BodyPart bodyPart = multipart.getBodyPart(i); if(bodyPart.isMimeType("image/*")){ InputStream is = bodyPart.getInputStream(); FileOutputStream fos=new FileOutputStream("路径+文件名"); int len=0; byte[] bys=new byte[1024]; while((len=is.read(bys))!=-1){ fos.write(bys, 0, len); } fos.close(); } } } } /** * 解析文本内容 * @param part * @throws Exception */ private static void getTextMultipart(Part part) throws Exception{ if(part.isMimeType("text/html")){ String content = (String) part.getContent(); System.out.println(content); }else if(part.isMimeType("text/plain")){ String content = (String) part.getContent(); System.out.println(content); } } }
相关文章推荐
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
- Android使用UncaughtExceptionHandler捕获全局异常 android获取手机信息大全Java追加文件内容使用JavaMail发送邮件OkHttp获取系统时间
- JavaMail在web容器中接收不到邮件内容解决方法
- javaMail发送邮件获取SMTP状态码
- android javamail 邮件备注内容
- javaMail邮件内容乱码的问题解决
- JavaMail 发送邮件内容乱码的处理
- JavaMail创建邮件内容API
- JavaMail学习五 创建邮件内容
- javamail 发送邮件 无主题 无收件人 邮件内容乱码 解决
- 用javamail显示复合邮件的内容的亲身体会
- discuz回贴通知插件实现-获取邮件内容
- 对MIME格式的邮件文件进行解码获取其可读内容和附件等
- javamail实例之获取邮件,包括gmail yahoo
- 通过javamail 获取gmail中指定label的邮件
- javamail邮件发送及相关内容
- 您的邮件安全吗――使用mailbag获取邮件内容
- JavaMail 解析退信 获取原件内容
- JavaMail:利用Tomcat和浏览器解析邮件内容