说明

之前在网上也找了一下该需求的实现,但是后面测试发现几乎全部都只能够对没有附件的eml文件进行追加,如果已近带了附件的eml文件在执行时源文件会被破坏掉。所有在此写下可以附件追加代码。

代码

import org.apache.commons.mail.util.MimeMessageUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import utils.ParseEmailUtil;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.*;

import javax.mail.internet.*;

import java.io.*;

import java.util.List;

/**

* Created by jacob on 2016/11/28.

*/

public class AddAttachemnt2Eml {

private static final Logger logger = LoggerFactory.getLogger(AddAttachemnt2Eml.class );

public static void add(String emlPath, String writeto, List attachments) {

Properties props = new Properties();

Session session = Session.getDefaulInstance(props, null);

InputStream inMsg;

inMsg = new FileInputStream(emlPath);

Message message = new MimeMessage(session, inMsg);

OutputStream os = null;

try {

os = new FileOutputStream(writeto+File.separator+new File(emlPath).getName());

// ParseEmailUtil.getContentHtml(emlPath);

// Message message = ParseEmailUtil.getMessage();

for(File filename : attachments){

message = attachment(message,filename);

}

new File(emlPath).delete();

message.saveChanges();

message.writeTo(os);

}catch (Exception e){

logger.error(String.format("failed to add attachment to eml file %s",emlPath ),e);

}finally {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

private static Message attachment (Message message,File filename) {

try{

Multipart mp = (Multipart) message.getContent();

MimeBodyPart attachment = new MimeBodyPart();

DataSource source = new FileDataSource(filename);

attachment.setDataHandler(new DataHandler(source));

attachment.setFileName(filename.getName());

if (mp.getContentType().equalsIgnoreCase("multipart/alternative")) { //原始文件已近有附件的情况直接追加即可

mp.addBodyPart(attachment);

message.setContent(mp);

} else { //原始文件不带附件需要将之前的正文与新加附件并列

Multipart allPart = new MimeMultipart();

MimeBodyPart contentPart = new MimeBodyPart();

contentPart.setContent(mp);

allPart.addBodyPart(contentPart);

allPart.addBodyPart(attachment);

message.setContent(allPart);

}

source.getInputStream().close();

}catch (javax.mail.MessagingException e){

logger.error(String.format("add attachment %s fail",filename.getAbsolutePath() ),e);

}catch (IOException e2){

logger.error(String.format("add attachment %s fail", filename),e2);

}

return message;

}

}

注:manve依赖:

org.apache.commons

commons-email

1.4

java eml 附件_向EML文件追加附件的Java实现相关推荐

  1. java 队列复制_复制一个文件夹里的文件到另一个目录下 (使用队列的方法实现)...

    最近在由于准备实习,在学android,也会用到Java,所以想实现复制文件夹的功能,当然也参考了别人的代码.这里是我参考的网址:http://blog.csdn.net/etzmico/articl ...

  2. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  3. java框架核心技术_你必须掌握的 21 个 Java 核心技术!(干货)

    点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘 ...

  4. java oom分析_作为测试你应该知道的JAVA OOM及定位分析

    上周现网一个内存溢出问题导致应用服务器每隔一小时死一次,遂整理下常见的OMM.发现方法和处理方式,加入Bug预防. 常见的OutOfMemoryError有三种:OutOfMemoryError:Pe ...

  5. java gradle构建_在Gradle中为JPMS构建Java 6-8库

    java gradle构建 通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS ...

  6. java转换为c#_将25k行C#转换为Java的经验教训

    java转换为c# 由于各种原因,我最近完成了一个将复杂的财务应用程序从C#转换为Java的项目. 港口的原因大部分是非技术性的,而是对相关企业的一项战略举措. 这是一次有趣的经历,我在此过程中吸取了 ...

  7. java future用法_你必须掌握的 21 个 Java 核心技术

    作者:工程师-搁浅来源:https://www.jb51.net/article/122070.htm 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知 ...

  8. java hashmap用法_备战金九银十:Java核心技术面试题100+,助你搞定面试官

    一线互联网公司工作了几年,我作为求职者参加了不少面试,也作为面试官面试了很多同学,整理这份面试指南,一方面是帮助大家更好的准备面试,有的放矢,另一方面也是对自己知识框架做一个体系化的梳理. 这篇文章梳 ...

  9. java jws配置_与WordNet有关的两个JAVA库(JWNL和JWS)的配置

    JWNL JWNL是一个Java API,可以用来访问WordNet中的关系词典.WordNet广泛用于开发NLP(神经语言学)应用,而一个像JWNL这样的Java API可以使得开发者更简单地使用J ...

  10. 解决java -version 系统找不到文件 C:\ProgramData\Oracle\Java\javapath\java.exe的问题

    一.问题出现 最近为了调试一个项目,需要启动一个项目,但启动一直有问题.电脑是64位的,但这个项目用的是32位的JDK,于是想看下安装的环境有没有问题,在CMD窗口输入:java -version,结 ...

最新文章

  1. 2021级山西高考成绩查询时间,2021山西高考成绩什么时候出
  2. 为什么在把多维数组传递给函数时必须要指定除第一维之外的其他维
  3. ESP32彩屏应用开源了https://github.com/wireless-tag-cn/lv_port_esp32
  4. 在 ASP.NET Core 中集成 Skywalking APM
  5. BugkuCTF-MISC题一切有为法如梦幻泡影
  6. matlab 程序 收缩,基于MATLAB的小波收缩去噪方法研究(程序)
  7. 一步步实现SDDC-嵌入式PSC的VC部署
  8. Android项目Tab类型主界面大总结
  9. JAVA 文件分割工具类
  10. 爬虫小白入门实例 —— 爬取全国某天所有火车的运行时刻表
  11. GBF ASIA亚太电池展
  12. Windows时钟同步(时间同步)问题
  13. 基于LPRNet的车牌识别算法移植与测试
  14. 小程序助力银行数字化转型
  15. Reflex WMS系统里的Team Code
  16. 限时订单实现方案(DelayQueue、ActiveMq)
  17. 论文阅读:Push the Limit of Acoustic Gesture Recognition
  18. 华为NQA与默认路由
  19. 前端优化之回流(Reflow)与重绘(Repaint)
  20. XMPP中文 XEP-0060: 发布-订阅(二)

热门文章

  1. eclipse常用的搜索快捷键
  2. 【acwing 寒假每日一题(入门组)】day20 火星人
  3. linux下传输文件命令
  4. 6 个常用的 API 接口在线管理平台
  5. Android开发之传感器(加速度传感器、方向传感器)
  6. SpringBoot_01_初窥门径
  7. 【离散数学】偏序集Hasse图的画法和重要元素
  8. japanhr日语小工具 日文汉字转平假名-japankana
  9. 自动激活win7系统的bat文件
  10. stm32的人体红外传感器的初步使用