向EML文件追加附件的Java实现

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了向EML文件追加附件的Java实现脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 说明
    之前在网上也找了一下该需求的实现,但是后面测试发现几乎全部都只能够对没有附件的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<File> 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依赖:

<dependency>             <groupId>org.apache.commons</groupId>             <artifactId>commons-email</artifactId>             <version>1.4</version>         </dependency>

脚本宝典总结

以上是脚本宝典为你收集整理的向EML文件追加附件的Java实现全部内容,希望文章能够帮你解决向EML文件追加附件的Java实现所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。