刚进公司的training, 下面是要求:

  1. Self-study of Java Mail library:  http://www.oracle.com/technetwork/java/javamail/index.html  --下载Java Mail相关的包
  2. 要求:
    1. (Required)Get attachment (XML) content of current document
    2. by :DynamicEntityModel.toLightXml().  ----转化为字符串
    3. (Optional) Compress the attachment in ZIP format and send as attachment.
    4. package com.core.cbx.coloralbert.action;
      
      import java.io.BufferedOutputStream;
      import java.io.ByteArrayInputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.FileWriter;
      import java.io.IOException;
      import java.math.BigDecimal;
      import java.util.Properties;
      import java.util.zip.ZipEntry;
      import java.util.zip.ZipOutputStream; import javax.activation.DataHandler;
      import javax.activation.DataSource;
      import javax.activation.FileDataSource;
      import javax.mail.Address;
      import javax.mail.Authenticator;
      import javax.mail.BodyPart;
      import javax.mail.Message;
      import javax.mail.MessagingException;
      import javax.mail.Multipart;
      import javax.mail.PasswordAuthentication;
      import javax.mail.Session;
      import javax.mail.Transport;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeBodyPart;
      import javax.mail.internet.MimeMessage;
      import javax.mail.internet.MimeMultipart; import org.dom4j.DocumentException;
      import org.dom4j.io.OutputFormat;
      import org.dom4j.io.SAXReader;
      import org.dom4j.io.XMLWriter; import com.core.cbx.action.actionContext.SaveDoc;
      import com.core.cbx.action.exception.ActionException;
      import com.core.cbx.common.type.DateTime;
      import com.core.cbx.data.DynamicEntityModel;
      import com.core.cbx.data.constants.ColorAlbert;
      import com.core.cbx.data.entity.DynamicEntity;
      import com.core.cbx.data.exception.DataException; /**
      * @author Albert.chen
      *
      */
      public class SaveDocAction extends com.core.cbx.action.SaveDocAction<SaveDoc>{ /* (non-Javadoc)
      * @see com.core.cbx.action.SaveDocAction#process(com.core.cbx.action.actionContext.SaveDoc)
      */ @Override
      protected void process(final SaveDoc actionContext) throws ActionException { final DynamicEntity doc = actionContext.getDoc(); //getValue
      final BigDecimal defaultValue = new BigDecimal(0); final BigDecimal rgb_number = doc.getBigDecimal(ColorAlbert.RGB_CODE,defaultValue); final BigDecimal cmyk_number = doc.getBigDecimal(ColorAlbert.CMYK_CODE,defaultValue); final BigDecimal mul_result =rgb_number.multiply(cmyk_number); //setValue
      doc.put(ColorAlbert.HSV_CODE, mul_result); doc.put(ColorAlbert.STATUS, ColorAlbert.WorkflowStatus.IN_PROGRESS); //save information
      super.process(actionContext); } @Override
      protected void postprocess(SaveDoc actionContext) throws ActionException {
      // TODO Auto-generated method stub final DynamicEntity doc = actionContext.getDoc();
      try {
      final String docString=DynamicEntityModel.toLightXml(doc);
      final String refNo=doc.getReference();
      final DateTime updatedOn=doc.getDateTime(ColorAlbert.UPDATED_ON);
      final String updateUser=doc.getString(ColorAlbert.UPDATE_USER);
      final String fileName=strChangeXML(docString,refNo);
      compressedFile(fileName, "D:\\"+ refNo +".zip");
      sengMail(refNo, fileName, updatedOn, updateUser);
      } catch (final DataException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (final IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (final MessagingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (final Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.out.println("压缩文件生成失败...");
      } } //将字符串string类型转换成xml文件
      public static String strChangeXML(final String str, final String refNo) throws IOException {
      final SAXReader saxReader = new SAXReader();
      final StringBuffer stringBuffer=new StringBuffer();
      stringBuffer.append(refNo).append(".xml");
      final String fileName=stringBuffer.toString();
      org.dom4j.Document document;
      try {
      document =saxReader.read(new ByteArrayInputStream(str.getBytes("UTF-8")));
      final OutputFormat format = OutputFormat.createPrettyPrint();
      /** 将document中的内容写入文件中 */
      final XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName)),format);
      writer.write(document);
      writer.close();
      } catch (final DocumentException e) {
      e.printStackTrace();
      } return fileName;
      } public static void sengMail( final String refNo,final String fileName, DateTime updatedOn, String updateUser) throws MessagingException{
      // 创建邮件的发送过程中用到的主机和端口号的属性文件
      final Properties pro = new Properties();
      // 设置邮件发送方的主机地址如果是163邮箱,则为smtp.163.com
      // 如果是其他的邮箱可以参照http://wenku.baidu.com/link?url=Cf-1ggeW3e7Rm9KWfz47UL7vvkRpPxAKBlYoTSGpnK4hxpJDiQ0A4lRoPDncMlcMIvUpEn6PD0aObgm5zJaM7AOGkRdccSx6HDH2fSWkxIq这个文档
      pro.put("mail.smtp.host", "*******.com");
      // 设置发送邮件端口号
      pro.put("mail.smtp.port", "25");
      pro.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      // 设置邮件发送需要认证
      pro.put("mail.smtp.auth", "true");
      // 创建邮件验证信息,即发送邮件的用户名和密码
      final Authenticator authenticator = new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
      // 重写验证方法,填写用户名,密码
      return new PasswordAuthentication("*******.com", "ma2s******");
      }
      }; // 根据邮件会话 构建一个邮件的session
      final Session sendMailSession = Session
      .getDefaultInstance(pro, authenticator);
      //打印信息
      sendMailSession.setDebug(true);
      // 创建一个邮件消息
      final Message message = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      final Address sourceAddress = new InternetAddress("******.com");
      // 将原地址设置到消息的信息中
      message.setFrom(sourceAddress);
      // 创建邮件的接收者地址
      final Address destAddress = new InternetAddress("***********.com");
      final Address ccAddress=new InternetAddress("************.com");
      // 将接收者的地址设置到消息的信息中
      message.setRecipient(Message.RecipientType.TO, destAddress);
      // 将接收者的地址设置到消息的信息中
      message.setRecipient(Message.RecipientType.CC, ccAddress);
      // 设置邮件的主题
      final StringBuffer strBuf2=new StringBuffer();
      strBuf2.append("subject:").append(refNo).append(".xml ").append("was updatedp[Do Not Reply]");
      message.setSubject(strBuf2.toString()); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
      final Multipart multipart = new MimeMultipart(); //设置邮件的文本内容
      final BodyPart contentPart = new MimeBodyPart(); final StringBuffer strBuf=new StringBuffer();
      strBuf.append("subject:").append(refNo).append(".xml ").append("was updatedp[Do Not Reply]").append("<br/><br/>");
      strBuf.append("-------------------------------------------------------------").append("<br/>");
      strBuf.append(" Dear Customer,").append("<br/><br/>");
      strBuf.append(refNo).append(" is updated at").append(updatedOn).append(" by ").append(updateUser).append(".").append("<br/><br/>");
      strBuf.append("Regards,").append("<br/>");
      strBuf.append("CBX System").append("<br/>");
      // 设置邮件的发送内容
      contentPart.setContent(strBuf.toString(),"text/html;charset=UTF-8");
      multipart.addBodyPart(contentPart);
      //添加附件
      final BodyPart messageBodyPart= new MimeBodyPart();
      // final String filename="file.txt";
      final DataSource source = new FileDataSource(fileName);
      //添加附件的内容
      messageBodyPart.setDataHandler(new DataHandler(source));
      messageBodyPart.setFileName(fileName); multipart.addBodyPart(messageBodyPart); //添加附件2
      final BodyPart messageBodyPart2= new MimeBodyPart();
      final String zipFileName=refNo +".zip";
      final DataSource source2 = new FileDataSource("D:\\"+ zipFileName);
      //添加附件的内容
      messageBodyPart2.setDataHandler(new DataHandler(source));
      messageBodyPart2.setFileName(zipFileName); multipart.addBodyPart(messageBodyPart2); //将multipart对象放到message中
      message.setContent(multipart);
      //保存邮件
      message.saveChanges();
      // 可以设置邮件的发送时间(就是对方看邮件发送的时间)
      // String sendDate = "2013-12-23 17:55:00";
      // Date date = new
      // SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(sendDate);
      // message.setSentDate(date); // 发送邮件
      Transport.send(message);
      } /**
      * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip
      * @param resourePath 源文件/文件夹
      * @param targetPath 目的压缩文件保存路径
      * @return void
      * @throws Exception
      */
      public void compressedFile(String resourcesPath,String targetPath) throws Exception{
      final File resourcesFile = new File(resourcesPath); //源文件
      final File targetFile = new File(targetPath); //目的
      //如果目的路径不存在,则新建
      if(!targetFile.exists()){
      targetFile.mkdirs();
      } final String targetName = resourcesFile.getName()+".zip"; //目的压缩文件名
      final FileOutputStream outputStream = new FileOutputStream(targetPath+"\\"+targetName);
      final ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream)); createCompressedFile(out, resourcesFile, ""); out.close();
      } /**
      * @desc 生成压缩文件。
      * 如果是文件夹,则使用递归,进行文件遍历、压缩
      * 如果是文件,直接压缩
      * @param out 输出流
      * @param file 目标文件
      * @return void
      * @throws Exception
      */
      public void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{
      //如果当前的是文件夹,则进行进一步处理
      if(file.isDirectory()){
      //得到文件列表信息
      final File[] files = file.listFiles();
      //将文件夹添加到下一级打包目录
      out.putNextEntry(new ZipEntry(dir+"/")); dir = dir.length() == 0 ? "" : dir +"/"; //循环将文件夹中的文件打包
      for(int i = 0 ; i < files.length ; i++){
      createCompressedFile(out, files[i], dir + files[i].getName()); //递归处理
      }
      }
      else{ //当前的是文件,打包处理
      //文件输入流
      final FileInputStream fis = new FileInputStream(file); out.putNextEntry(new ZipEntry(dir));
      //进行写操作
      int j = 0;
      final byte[] buffer = new byte[1024];
      while((j = fis.read(buffer)) > 0){
      out.write(buffer,0,j);
      }
      //关闭输入流
      fis.close();
      System.out.println("压缩文件已经生成...");
      }
      } }

基于Java Mail 进行发送(带附件和压缩附件)的邮件的更多相关文章

  1. [Java] JavaMail 发送带图片的 html 格式的邮件

    JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的. 发送带附件的邮件可参考JavaMail 发送 html 格式.带附件的 ...

  2. Java网络编程:利用Java mail包发送电子邮件

    下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...

  3. 基于java mail实现简单的QQ邮箱发送邮件

    刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...

  4. UiPath: Send SMTP Mail Message 发送带附件的邮件

    Tips:关于Hotmail的server和port的获取方式,请参考以下链接 https://support.office.com/en-us/article/Server-settings-you ...

  5. 2018.4.28 基于java的聊天系统(带完善)

    Java聊天系统 1.Socket类 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号. Socket(String ...

  6. Java Mail多人群发与多附件发送

        近期公司的项目用到了Java Mail来发送注冊邮件,只是.开发的时候都是使用封装好的JAR,曾经也不是非常了解Java Mail的使用原理. 网上非常多代码都是仅仅有一部分,看一看也跑不起来 ...

  7. java mail使用中遇到的550类型错误

    前言 首先,需要说明的是,本错误来自于一个简单的基于java mail的api程序,邮件服务器是163的SMTP,即smtp.163.com. 程序 需要说明一下,下面这个程序,是来自于网络上,本人为 ...

  8. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  9. java发送带附件的邮件

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

随机推荐

  1. var a=function(){...}与function a(){...}的区别

    var a = function(){...}在js预加载时按变量处理,即预加载定义,不加载赋值. function a(){...}即加载定义,而且赋值. 例如:a(); //正常执行a()函数; ...

  2. C++杂分析

    class word{ public: word(){cout<<"word constructure \n";} word(int i){cout<<&q ...

  3. php获取当前月与上个月月初及月末时间戳的方法

    php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime.下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日.上周.本月的起始 ...

  4. 浏览器拦截js打开新窗口

    最近做项目时,遇到的问题"想通过javascript在浏览器新标签页或新窗口打开一个新的页面,结果被浏览器大大无情给拦截了"业务需求:前端提交数据到后端,后端返回url,然后在新窗 ...

  5. javaScript 验证码 倒计时60秒

    <input type="button" id="btn" value="免费获取验证码" /> <script type ...

  6. 1、C#基础 - C# 语言简介

    C# 语言和 .NET Framework 介绍 C# 是类型安全的面向对象的精妙语言,可帮助开发者生成在 .NET Framework 上运行的各种安全可靠的应用程序. C# 可用于创建 Windo ...

  7. Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验,使用消息资源文件对消息国际化

    导包和配置 导入 JSR 303 的包.hibernate valid 的包 <dependency> <groupId>org.hibernate.validator< ...

  8. Android测试:Fundamentals of Testing

    原文地址:https://developer.android.com/training/testing/fundamentals.html 用户在不同的级别上与你的应用产生交互.从按下按钮到将信息下载 ...

  9. 从无到有<前端异常监控系统>落地

    导火索 有一天一个测试同事的一个移动端页面白屏了,看样子是页面哪里报错了.  我自己打开页面并没有报错,最后发现报错只存在于他的手机,移动端项目又是在微信环境下,调试起来会比较麻烦,最后用他手机调试才 ...

  10. 从durable谈起,我是如何用搜索引擎抓住技术的关键字学习新姿势打开敏捷开发的大门

    ---又名我讨厌伸手党 我又把个人博客的子标题改为了 你可以在书和搜索引擎找到90%的问题的答案,为什么要问别人?剩下的10%或许没有答案,为什么要问别人? 这是由于最近在网上看到各种伸手,对于我这种 ...