将生成的Excel表发送到邮箱
本文接上一篇,将得到的Excel表发送到邮箱。、
在上一篇中,本人使用的是直接从数据库中获取数据,然后包装成Excel表。现在将该Excel表发送到目的邮箱,如果需要跟上篇一样,定时每天某时刻发送,就需要定时清理数据库。如果直接从客户端获取数据然后直接包装发送,可使用流的思想,不需要保存数据库中。首先使用一个Excel模板保存客户端数据,然后再发送到邮箱。
代码:
{
HSSFWorkbook wb = new HSSFWorkbook();
//将表数据保存在输出流中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
wb.write(baos);
baos.flush();
byte[] bytes = baos.toByteArray();
//将数据保存在输入流中,将作为邮箱发送的附件对象
InputStream iStream = new ByteArrayInputStream(bytes, 0,
bytes.length);
baos.close();
String content = "这个一个java发送邮箱的测试!"; // 正文内容
String email = "2570316162@qq.com"; // 发送邮箱
String subject = "客户信息"; //文件主题
//本文中实现发送主要为sendMail()方法体
sendMail(subject,email,content,iStream)
}
private boolean sendMail(String subject, String email,String content,InputStream iStream) {
boolean isFlag = false;
try {
String smtpFromMail = "447123463@qq.com"; //账号
String pwd = "arzpwxgtvisxbhce"; //密码,该密码为服务授权码
//此处为认证机制对象
/*Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("smtpFromMail ", "pwd ");//注意此处password为smtp服务授权码,不是qq密码
}
};*/
//配置属性
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//当出现 "smtp.exmail.qq.com" port 465, isSSL false" 错误时,可以配置这个
//properties.put("mail.smtp.socketFactory.port", 465);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.host","smtp.qq.com");
//发送协议论证,选中了就要有相应的论证机制。
//如果有Authenticator 对象,需要使用properties.put("mail.smtp.auth",auth)论证
//本文中由transport.connect(smtpFromMail,pwd)进行论证
properties.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(properties);
session.setDebug(true); //可以从控制台中看一下服务器的响应信息
//用MIME协议能生成一封有文字、图片和附件的复杂邮件
MimeMessage mimeMessage = new MimeMessage(session);
try {
//设置基本信息
mimeMessage.setFrom(new InternetAddress(smtpFromMail)); //设置发送邮箱
mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(email));//设置接收邮箱。
mimeMessage.setSubject(subject);
mimeMessage.addHeader("charset", "UTF-8");
//Multipart添加正文内容
Multipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(content);
contentPart.setHeader("Content-Type","text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);
//Multipart添加附件
MimeBodyPart fileBodyPart = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(iStream, "application/msexcel"); //Excel样式的附件
//DataSource source = new ByteArrayDataSource(is, "application/octet-stream");
fileBodyPart.setDataHandler(new DataHandler(source));
String fileName = "用户信息列表.xls";
fileBodyPart.setFileName(MimeUtility.encodeText(fileName,"UTF-8",null));//中文乱码问题
multipart.addBodyPart(fileBodyPart);
mimeMessage.setContent(multipart);
mimeMessage .setSentDate(new Date());
mimeMessage.saveChanges();
//传送
//Transport transport = session.getTransport("smtp");
Transport transport = session.getTransport();
transport.connect(smtpFromMail,pwd); // 有进行协议论证
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
transport.close();
isFlag = true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
isFlag = false;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return isFlag;
}
发送邮箱主要有邮箱的基本信息设置,数据源设置,协议端口,认证等设置。关于协议端口,发送方一般为“smtp”与“465”,host有“smtp.qq.com”与“smtp.exmail.qq.com”,“smtp.136.com”等的区别。
另外,对于设置接收邮箱,如果有多个接收方,可在发送邮件时Transport的sendMessage()方法指定收件人时使用数组来指定收件人,也可使用Message对象来添加收件人时使用InternetAddress对象的parse(String string)方法,如:InternetAddress.parse(“2577336655@qq.com”,”2578895667@qq.com”,...);
将生成的Excel表发送到邮箱的更多相关文章
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
今天,一朋友问我使用JAVA有没有什么办法导出百万级的数据到Excel工作表. 当时我的第一个念头就是这真的是一个好疯狂的念头.然后就想假如真的有这样类似的需求,我自己应该怎么做呢? ps: 首先科普 ...
- WebService--导出excel并将excel发送到邮箱
1.利用NPOI生成EXCEL 2.导出excel之后发送邮件 //导出excel //path :保存路径 //dt:要导出的数据 public static bool DataTableToExc ...
- unity 读取excel表 生成asset资源文件
做unity 项目也有一段时间了,从unity项目开发和学习中也遇到了很多坑,并且也从中学习到了很多曾经未接触的领域.项目中的很多功能模块,从今天开始把自己的思路和代码奉上给学渣们作为一份学习的资料. ...
- Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,
测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...
- python查询mysql并生成excel表
需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...
- C#/Net定时导出Excel并定时发送到邮箱
一.定时导出Excel并定时发送到邮箱 首先我们先分析一下该功能有多少个小的任务点:1.Windows计划服务 2.定时导出Excel定指定路径 3.定时发送邮件包含附件 接下来我们一个个解决 ...
- 后端队列生成pdf,发送到邮箱
最开始可以先将你想要的pdf模板写好先,如testPage <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...
- BI之路学习笔记2--SSIS/ETL设计练习三:《DB->定期生成excel表》
上次笔记记到,用sql任务给参数赋值,映射到变量,然后把数据流任务放到序列容器中进行执行,可以定期生成excel, 现在的问题是: 在EXCEL目标编辑过程中,必须选定某一个特定的excel目标,这样 ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
随机推荐
- NLTK vs SKLearn vs Gensim vs TextBlob vs spaCy
Generally, NLTK is used primarily for general NLP tasks (tokenization, POS tagging, parsing, etc.) S ...
- [转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
#include "stdafx.h" class A { public: A(){ax = ;}; A(int a){ax = a;}; int ax; }; class B { ...
- log4j的学习和log4j在程序中使用的加载作用过程
昨天进行代码评审的时候,大家都纠结在了日志信息应该如何输出上,其实我想大家应该一直都在使用log4j来对日志信息进行输出,但是未想应该有很大一部分人对log4j是不了解的,我遇到这个问题的时候也到网上 ...
- (转)data Table的用法大全
jqyery dataTable 基本用法 一:官方网站:[http://www.datatables.net/] 二:基本使用:[http://www.guoxk.com/node/jquery-d ...
- HDU-2616
Kill the monster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Asset Catalog Help (八)---Customizing Image Sets for Devices
Customizing Image Sets for Devices Add images to a set that are customized for display on the device ...
- 第三篇:SpringBoot用JdbcTemplates访问Mysql
本文介绍springboot通过jdbc访问关系型mysql,通过spring的JdbcTemplate去访问. 准备工作 jdk 1.8 maven 3.0 idea mysql 初始化mysql: ...
- android调试之adb
ADB 其实大部分的PC开发机与Android设备的操作都是通过adb(android debug bridge)技术完成的,这是一个C/S架构的命令行工具,主要由三个部分组成 运行在PC开发机上的命 ...
- Makefile研究(二)—— 完整可移植性模板
转自:http://blog.csdn.net/jundic/article/details/17676461 一直想写一个很全很好移植的Makefile模板,我觉得一个完整makefile 应该包含 ...
- LeetCode: 485 Max Consecutive Ones(easy)
题目: Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: ...