javamail解析邮件内容中含有图片
有时候邮件正文中含有图片,这类邮件正文该如何保存?话不多说,直接上代码:
大概的实现思想就是:邮件内容中包含图片,则将正文中的图片上传到文件储存服务器(OOS)上,然后将[原图片地址]替换成[上传到OOS上后的地址]
package com.xiaochaojiang.mail.recieve;import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;import javax.activation.DataSource;
import javax.mail.Folder;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;import org.apache.commons.io.IOUtils;
import org.apache.commons.mail.util.MimeMessageParser;import com.sun.mail.pop3.POP3Folder;
//解析邮件内容中包含图片的情况 以163企业邮箱为例
/*** 方法说明:邮件内容中包含图片,则将正文中的图片上传到文件储存服务器(OOS)上,* 然后将[原图片地址]替换成[上传到OOS上后的地址]* @author Administrator**/
public class ContentImageReceive {public static void main(String[] args) throws Exception {Folder folder = null;Store store = null;try {Properties props = new Properties();props.setProperty("mail.store.protocol", "pop3"); // 协议props.setProperty("mail.pop3.port", "995"); // 端口 110 995props.setProperty("mail.pop3.host", "pop.qiye.163.com"); // pop3服务器// 如果设置,则指定实现该javax.net.SocketFactory接口的类的名称 。这个类将被用来创建POP3套接字。props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 如果设置为true,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.Socket该类创建套接字。默认为true。props.setProperty("mail.pop3.socketFactory.fallback", "false");// 指定在使用指定的套接字工厂时要连接的端口。如果未设置,则将使用默认端口。props.setProperty("mail.pop3.socketFactory.port", "995");props.setProperty("mail.pop3.ssl.enable", "true");
// props.setProperty("mail.debug", "true");//打印mail日志
// props.setProperty("mail.mime.charset","iso8859-1");Session session = Session.getInstance(props);session.setDebug(false);store = session.getStore("pop3");store.connect("邮箱", "邮箱密码/授权码");// 获得收件箱folder = store.getFolder("INBOX");POP3Folder inbox = (POP3Folder) folder;/** Folder.READ_ONLY:只读权限* Folder.READ_WRITE:可读可写(可以修改邮件的状态)*/folder.open(Folder.READ_WRITE); // 打开收件箱int messageCount = inbox.getMessageCount();if(messageCount <= 0) {System.out.println("没有可接受的邮件 ");}MimeMessageParser parser = null;MimeMessage msg = null;String contentStr = null;String uid = "";// 得到收件箱中的所有邮件,并解析for(int i = messageCount;i>0;i--) {if(!inbox.isOpen()) { //判断是否open inbox.open(Folder.READ_ONLY);}msg = (MimeMessage) inbox.getMessage(i);uid = inbox.getUID(msg);parser = new MimeMessageParser(msg).parse();contentStr = parser.getHtmlContent();if(contentStr == null) {contentStr = parser.getPlainContent();if(contentStr == null) {contentStr = "";}}//邮件内容中的图片处理List<DataSource> attachments = parser.getAttachmentList();//文件预览中无法显示不能包含/ 和-Set<String> cids = (Set<String>) parser.getContentIds();Iterator<String> it = cids.iterator();while (it.hasNext()) {String cid = it.next();// contentStr判断是否含有cid,如果含有需要处理,如果不包含,不需要处理if(contentStr.contains(cid)) {DataSource ds = parser.findAttachmentByCid(cid);if(ds != null){// to do 将邮件内容中的图片上传到文件存储服务器String replaceStr = "上传到文件存储服务器后的地址";//得到 上传到文件存储服务器后的地址attachments.remove(ds);contentStr = contentStr.replace("cid:"+cid,replaceStr);} }}for(int j=0;j<attachments.size();j++) {DataSource ds = attachments.get(i);byte[] bytesfile = IOUtils.toByteArray(ds.getInputStream());String fileName = decodeText(ds.getName());//to do 保存附件信息到数据库中//to do 将附件上传到文件存储服务器上}}} catch (Exception e) {e.printStackTrace();}finally {//释放资源 if(folder!=null && folder.isOpen()) {folder.close(true); }if(store != null) {store.close();}}}public static String decodeText(String encodeText) throws UnsupportedEncodingException { if (encodeText == null || "".equals(encodeText)) { return ""; } else { return MimeUtility.decodeText(encodeText); } }
}
javamail解析邮件内容中含有图片相关推荐
- 用javamail解析邮件(失败,浏览器无法直接解析阅读,变成文件了)
用javamail解析邮件(失败,浏览器无法直接解析阅读,变成文件了) 转载:https://www.cnblogs.com/huangminwen/p/6107078.html 按着上面的博文打了一 ...
- Python实现IMAP协议接收并解析邮件内容
Python实现IMAP协议接收并解析邮件内容 **前言:**昨天接到这个任务,然后搜索了很多资料和博客去看,这些资料链接我会放在本文后面 一.开通IMAP服务 我以网页邮箱(163邮箱为例) 1.登 ...
- 中 自动展示链接的内容_织梦DEDECMS文章内容中的图片自动添加ALT和title属性方法...
今天下载我资源网(www.xiazaiwo.net)要说的是织梦DEDECMS文章内容中的图片自动添加ALT和title属性,如果觉得不错,请分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 织 ...
- linux远ssh sed,ssh远程执行sed -i命令,替换的内容中含有双引号的问题
ssh远程执行sed -i命令,替换的内容中含有双引号的问题.在ssh 中执行sed -i 来替换匹配的字符串,当替换的内容中包含双引号"时,需要在转义的同时,加上单引号'"'. ...
- html邮件修改不了图片,邮件模板中的图片不显示,该怎么解决
邮件模板中的图片不显示 这个是我邮件模板 html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- django中发送html邮件以及html中含有图片的邮件
首先了解python中是如何发送邮件的:https://www.cnblogs.com/zhangxinqi/p/9113859.html 上面介绍了 Python 的 smtplib 及 email ...
- 如何解决EDM邮件营销中的图片难题
随着互联网的高速发展,已然进入到了读图时代,EDM邮件营销尤为注重图片的运用.纯文本的邮件太枯燥,巧借图片,可以提高内容的可读性,吸引用户注意力.然而,我们却常常不得不面对这样的尴尬:打开邮件,文图不 ...
- php 将内容中的图片的域名,php给编辑器中的图片地址添加域名
传统的PC管理后台一般保存的都是图片路径,随着移动端APP的流行,很多平台需要增加API接口.这时发现图片路径并不能被远程读取,下面提供图片路径转换为URL地址的方法:/** * 替换fckedit中 ...
- Java解析excel表格中的图片的方式
我们要用java解析首先得在项目中引入解析excel的相关包,我们这里使用的是apache的poi-3.12.jar来做开发. 首先获取excel文件,获取文件的方式这里就不细说了,获取到文件后,将文 ...
最新文章
- 应用宝上架审核要求_【建议收藏】安卓应用商店上架经验,含流程,方法
- ARM 嵌入式入门经验
- 《Haskell函数式编程入门》——导读
- json字符串转java对象数组
- Service Fabric 用 Powershell 部署应用到本地
- Docker中RocketMQ的安装与使用
- c++ - 在终端中,cout不显示任何内容
- git+repo 代码提交
- Oracle分页查询语句(一)
- mongod: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file:
- python入门基础知识实例-Python入门基础知识实例,值得收藏!
- x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
- 利用FreeType和OpenGL进行矢量字体渲染
- 最新eclipse国内镜像站,比ustc等站点资源新。
- 圆通电子面单下单接口
- C++11 auto类型说明符如for(atuo x : s)
- 宁夏移民文化的四个特点
- Could not initialize class com.android.build.gradle.internal.VariantManager解决方案
- shell获取系统当前时间、本月1日、下月1日、本月月底、上月月底、上月同期日期
- ECUG Con 2018 早鸟票热卖中 | 大咖聚首 探索云计算下一个十年
热门文章
- 格式转换(音频/视频)
- 【今日CV 计算机视觉论文速览 第129期】Wed, 12 Jun 2019
- 网上拍卖系统/拍卖网站
- Acrobat 配置 PDF阅读背景 护眼色 读Paper更轻松
- 测试轮播banner
- 意志力,人的意志力消耗的能量应该来自血液中的葡萄糖,意志力是一种生理机制,就像肌肉,使用会消耗能量,用多了会疲劳...
- Sql Server where case 满足条件执行 不满足 不做任何条件查询
- CUDA学习笔记 —— (三)GPU计算性能与线程关系
- Python学习第三课-基本数据类型
- PTA 7-138 昨天