有时候邮件正文中含有图片,这类邮件正文该如何保存?话不多说,直接上代码:

大概的实现思想就是:邮件内容中包含图片,则将正文中的图片上传到文件储存服务器(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解析邮件内容中含有图片相关推荐

  1. 用javamail解析邮件(失败,浏览器无法直接解析阅读,变成文件了)

    用javamail解析邮件(失败,浏览器无法直接解析阅读,变成文件了) 转载:https://www.cnblogs.com/huangminwen/p/6107078.html 按着上面的博文打了一 ...

  2. Python实现IMAP协议接收并解析邮件内容

    Python实现IMAP协议接收并解析邮件内容 **前言:**昨天接到这个任务,然后搜索了很多资料和博客去看,这些资料链接我会放在本文后面 一.开通IMAP服务 我以网页邮箱(163邮箱为例) 1.登 ...

  3. 中 自动展示链接的内容_织梦DEDECMS文章内容中的图片自动添加ALT和title属性方法...

    今天下载我资源网(www.xiazaiwo.net)要说的是织梦DEDECMS文章内容中的图片自动添加ALT和title属性,如果觉得不错,请分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 织 ...

  4. linux远ssh sed,ssh远程执行sed -i命令,替换的内容中含有双引号的问题

    ssh远程执行sed -i命令,替换的内容中含有双引号的问题.在ssh 中执行sed -i 来替换匹配的字符串,当替换的内容中包含双引号"时,需要在转义的同时,加上单引号'"'. ...

  5. html邮件修改不了图片,邮件模板中的图片不显示,该怎么解决

    邮件模板中的图片不显示 这个是我邮件模板 html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  6. django中发送html邮件以及html中含有图片的邮件

    首先了解python中是如何发送邮件的:https://www.cnblogs.com/zhangxinqi/p/9113859.html 上面介绍了 Python 的 smtplib 及 email ...

  7. 如何解决EDM邮件营销中的图片难题

    随着互联网的高速发展,已然进入到了读图时代,EDM邮件营销尤为注重图片的运用.纯文本的邮件太枯燥,巧借图片,可以提高内容的可读性,吸引用户注意力.然而,我们却常常不得不面对这样的尴尬:打开邮件,文图不 ...

  8. php 将内容中的图片的域名,php给编辑器中的图片地址添加域名

    传统的PC管理后台一般保存的都是图片路径,随着移动端APP的流行,很多平台需要增加API接口.这时发现图片路径并不能被远程读取,下面提供图片路径转换为URL地址的方法:/** * 替换fckedit中 ...

  9. Java解析excel表格中的图片的方式

    我们要用java解析首先得在项目中引入解析excel的相关包,我们这里使用的是apache的poi-3.12.jar来做开发. 首先获取excel文件,获取文件的方式这里就不细说了,获取到文件后,将文 ...

最新文章

  1. 应用宝上架审核要求_【建议收藏】安卓应用商店上架经验,含流程,方法
  2. ARM 嵌入式入门经验
  3. 《Haskell函数式编程入门》——导读
  4. json字符串转java对象数组
  5. Service Fabric 用 Powershell 部署应用到本地
  6. Docker中RocketMQ的安装与使用
  7. c++ - 在终端中,cout不显示任何内容
  8. git+repo 代码提交
  9. Oracle分页查询语句(一)
  10. mongod: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file:
  11. python入门基础知识实例-Python入门基础知识实例,值得收藏!
  12. x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
  13. 利用FreeType和OpenGL进行矢量字体渲染
  14. 最新eclipse国内镜像站,比ustc等站点资源新。
  15. 圆通电子面单下单接口
  16. C++11 auto类型说明符如for(atuo x : s)
  17. 宁夏移民文化的四个特点
  18. Could not initialize class com.android.build.gradle.internal.VariantManager解决方案
  19. shell获取系统当前时间、本月1日、下月1日、本月月底、上月月底、上月同期日期
  20. ECUG Con 2018 早鸟票热卖中 | 大咖聚首 探索云计算下一个十年

热门文章

  1. 格式转换(音频/视频)
  2. 【今日CV 计算机视觉论文速览 第129期】Wed, 12 Jun 2019
  3. 网上拍卖系统/拍卖网站
  4. Acrobat 配置 PDF阅读背景 护眼色 读Paper更轻松
  5. 测试轮播banner
  6. 意志力,人的意志力消耗的能量应该来自血液中的葡萄糖,意志力是一种生理机制,就像肌肉,使用会消耗能量,用多了会疲劳...
  7. Sql Server where case 满足条件执行 不满足 不做任何条件查询
  8. CUDA学习笔记 —— (三)GPU计算性能与线程关系
  9. Python学习第三课-基本数据类型
  10. PTA 7-138 昨天