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. PHP命名空间带来的干扰

    有时候,不想受命名空间约束,就可以整一个全局类. protected function sendDayuSms($tel,$code,$template_type,$product = "[ ...

  2. python开发调用基础:模块的调用&制作包&软件开发规范

    一,包的调用 #!/usr/bin/env python #_*_coding:utf-8_*_ #调用 glance[1..4]\api\policy.py 路径 # policy.py 内容 # ...

  3. AOP(面向切面编程概念,本文为翻译)

    AOP是什么 AOP为Aspect Oriented Programming的缩写.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用 ...

  4. C# IP地址去掉端口号

    string Ip1 = "192.168.0.199:7777"; string Ip2 = Ip1.Remove(Ip1.IndexOf(':'));

  5. python学习——练习题(3)

    """ 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? """ import math d ...

  6. $().each和$.each()

    $().each 在dom处理上面用的较多.如果页面有多个input标签类型为checkbox,对于这时用$().each来处理多个checkbook,例如: $(“input[name=’ch’]” ...

  7. Spring使用标签注解来简化xml书写

    一.步骤 在配置文件中,引入context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xm ...

  8. OSCache-缓存过滤器CacheFilter

    用CashFilter实现页面级缓存. 在OSCache组件中提供了一个CacheFilter用于实现页面级的缓存,主要用于对web应用中的某些动态页面进行缓存,尤其是那些需要生成pdf格式文件/报表 ...

  9. 【转】在SharePoint Server 2010中更改“我的网站”

    在安装SharePoint Server 2010的时候,创建的第一个站点是一个"NetBIOS名称"的网站,而这个时候,"我的网站"(或称"个人网站 ...

  10. How To Create SharePoint 2010 Site Collection In Its Own DB

    在SharePoint 2010中可以使用Management Shell 为新建的Site Collection 创建自己的DB. 在 Shell中执行如下命令: 1. $w = get-spweb ...