String to = "xxx@qq.com"; // 收件人的QQ邮箱
String from = "xxx@qq.com"; // 发件人的QQ邮箱
String authoCode = "xxx"; // 使用qq邮箱发送时的授权码
String smtpServer = "smtp.qq.com";

/**
 * 1,创建邮件对象
 */
Properties properties = new Properties();
properties.put("mail.smtp.host", smtpServer); // 指定SMTP服务器
properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证
Session session = Session.getInstance(properties);
MimeMessage message = new MimeMessage(session);

try {
    /**
     * 2. 设置发件人
     * 其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
     */
    message.setFrom(new InternetAddress(from, "XXX", "UTF-8"));

    /**
     * 3,设置收件人
     * To收件人   CC 抄送  BCC密送
     */
    message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to, "", "UTF-8"));
    message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to, "", "UTF-8"));

    /**
     * 4,设置标题
     */
    message.setSubject("报表","UTF-8");

    /**
     * 5,组织数据
     */
    Workbook xlsFile = new HSSFWorkbook(); // create a workbook
    CreationHelper helper = xlsFile.getCreationHelper();

    Sheet sheet1 = xlsFile.createSheet("title"); // add a sheet to your workbook
    org.apache.poi.ss.usermodel.Row row1 = sheet1.createRow((short)0);
    sheet1.setColumnWidth(0, 25 * 256);
    sheet1.setColumnWidth(1, 30 * 256);
    row1.createCell(0).setCellValue(helper.createRichTextString("cell0"));
    row1.createCell(1).setCellValue(helper.createRichTextString("cell1"));
    row1.createCell(2).setCellValue(helper.createRichTextString("cell2"));

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    xlsFile.write(bos); // write excel data to a byte array
    bos.close();
    DataSource fds = new ByteArrayDataSource(bos.toByteArray(), "application/vnd.ms-excel");

    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setText("Everything will be fine.");

    MimeBodyPart mbp2 = new MimeBodyPart();
    mbp2.setDataHandler(new DataHandler(fds));
    mbp2.setFileName("report.xls");

    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    mp.addBodyPart(mbp2);
    message.setContent(mp);

    /**
     * 6,保存邮件并发送
     */
    message.saveChanges();
    Transport transport = session.getTransport("smtp");
    transport.connect(smtpServer, from, authoCode);
    transport.sendMessage(message,message.getAllRecipients());
    transport.close();

} catch (MessagingException e) {
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
  • 需要使用到的pom依赖

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

Java以邮件附件的方式发送excel文件的更多相关文章

  1. kettle文件以邮件附件的形式发送报告

    将从表中导出的excel文件以邮件附件的形式发送报告 step1: 导出文件file1.xls step2: add filename to result将文件添加到结果 step3: 发送邮件

  2. 【转载】WPS通过设置密码的方式对Excel文件加密

    有时候Excel文件中可能包含一些敏感数据,此时希望对Excel文件进行加入密码的形式进行加密保护,在WPS软件和Office Excel软件中都支持对Excel文件进行密码保护,设置了密码保护的Ex ...

  3. Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

  4. C# Aspose.Cells方式导入Excel文件

    读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...

  5. 利用freemarker+SAX解析xml的方式对excel文件字段校验

    利用freemarker对参数进行校验这篇文章主要用到的技术点: 自定义注解的使用反射机制SAX解析xmlFreemarker的运用我们在工作中经常需要上传excel文件,然后在对文件中的字段进行校验 ...

  6. oledb方式读取excel文件

    进入博客园后台发现12年11月份写的草稿没发,时隔1年,把它拉出来晒晒太阳. 前言 第一次做Excel文件导入,采用了oledb,不足之处,还请各位大牛指出,谨以此文对导入Excel做个总结. 一般步 ...

  7. Java实现将任何编码方式的txt文件以UTF-8编码方式转存

    本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...

  8. 在Delphi中通过OLE方式写Excel文件

    报表的打印是每个项目都会遇到的问题.由于报表格式要求五花八门,往往又同时要求打印格式可方便调整.作为一种替代方法,可以将需要打印的报表导出到Excel/Word,打印交给Office去吧.由于Offi ...

  9. java poi 读取有密码加密的Excel文件

    String excelPath = "Excel文件路徑"; String password = "Excel文件密碼"; Workbook workbook ...

随机推荐

  1. python开发模块基础:异常处理&hashlib&logging&configparser

    一,异常处理 # 异常处理代码 try: f = open('file', 'w') except ValueError: print('请输入一个数字') except Exception as e ...

  2. Dynamics CRM early binding and late binding

    The key advantage of late bound entity classes is that customer entities and attributes not avaliabl ...

  3. PCB打样前的注意事项

    0.画板前,在制定规则的时候,一定要查看生产厂家的生产工艺.  (厂家能打几层板.最小间距.焊盘最小和最大尺寸等等) 1.查看焊盘的孔径是否合适.  (检查能否插进去) 2.仔细检查购买的三端器件的引 ...

  4. MMU段式映射(VA -> PA)过程分析

    MMU:内存管理单元. CPU寻址的方式: 未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx). 使用MMU  :CPU发出地址(VA) MMU接收CPU发来的地址 经过 ...

  5. StringBuilder与StringBuffer的区别

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  6. Py修行路 python基础 (九)作用域 函数嵌套 闭包

    名称空间与作用域 变量,函数 分成三种 #内置名称空间  内置函数, 系统函数内部自定义的. python查看内置函数,命令: import builtins dir(builtins) #全局名称空 ...

  7. Maven的安装及配置、Maven在Eclipse中的配置

    一.需要准备的东西 1. JDK 2. Eclipse 3. Maven程序包 二.检查JAVA安装 三.安装Maven 下载apache-maven-3.5.3-bin.zip解压即可. 四.配置M ...

  8. python与桶排序

    问题提出: 将以下数据: 6, 8, 2, 3, 4, 0, 9, 1, 5,1 按从小到达排列. 桶排序原理: 桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现 ...

  9. 前端学习---html基础知识

    HTML基本知识 学习html首先我们先看看HTML本质: web框架本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端, ...

  10. Command对象