根据xlsx模板生成excel数据文件发送邮件代码
package mail; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map; import javax.mail.internet.MimeUtility; import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
* @comments
* @author xxx
* @version 创建时间:2014年6月15日
* 将该类从单实例,变成了 Spring 管理的类
*/
public class EmailService { private final static String EMAIL_APP_TYPE = "email";
// private static final String INSURANCE_EMAIL_TYPE="insurance_email";
private final static String HOST_NAME_ITEM_NAME = "server_host";
private final static String FROM_ADDR_ITEM_NAME = "from_addr";
private final static String FROM_NAME_ITEM_NAME = "from_name";
private final static String PASSWORD_ITEM_NAME = "password";
// private final static String TO_EMAIL_ITEM_NAME = "to_email"; //发送对象。 private static final String CPIC_TEMPLET_FILE = "C:\\hzCoupon2.xlsx"; //模板文件 public static String getHostName() {
return "smtp.***.***.com";
} public static String getPassword() {
return "pwd**";
} public static String getFromAddr() {
return "service@****.com";
} public static String getFromName() {
return "****Service";
} /**
* 入口
* @param list
* @throws Exception
*/
public static boolean sendPolicyEmail(String toEmail,List<HzCouponModel> list) throws Exception{
boolean result = false;
// String currTime = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());//System.currentTimeMillis();
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -1); //往前一天
String yesterday = "-test-"; //xxxx年xx月xx日 String cpicFileName = "hzCoupon" + yesterday + ".xls";
try {
String fileNames = createHzCouponXLS(list, cpicFileName);
if(fileNames != null && !"".equals(fileNames)){
sendEmailWithAttch(toEmail,fileNames);
result = true;
}
} catch (Exception e) {
result = false;
e.printStackTrace();
throw e;
}
return result;
} private static void sendEmailWithAttch(String toEmail, String cpicNamePath) throws Exception{
String yesterday = "-test-";
EmailAttachment insurAttach = getAttachment("***保数据"+yesterday+".xlsx", cpicNamePath, "***保数据(**提供)");
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -1); //往前一天
// String yesterday = CommonConstants.DATE_YEAR_MONTH_DAY_CN_FORMAT(c.getTime()); //xxxx年xx月xx日 String res1 = sendAttchEmail(toEmail, "***保数据"+yesterday+"明细", "你好,附件是"+yesterday+"***保数据表格,请查收。", insurAttach);
System.out.println("发送“***资格数据” email res:{}"+ res1); } private static EmailAttachment getAttachment(String attachName, String fileNamePath, String desc) throws Exception{
EmailAttachment attachment = new EmailAttachment();
attachment.setPath(fileNamePath);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setName(MimeUtility.encodeText(attachName));
attachment.setDescription(desc);
return attachment;
} private static String sendAttchEmail(String to, String subject, String content, EmailAttachment attachment) throws Exception{
MultiPartEmail email = new MultiPartEmail();
email.setHostName(getHostName());
email.setAuthentication(getFromAddr(), getPassword());
email.setFrom(getFromAddr(), getFromName());
email.addTo(to);
email.setSubject(subject);
email.setMsg(content);
email.attach(attachment);
email.addHeader("Disposition-Notification-To", getFromAddr());//邮件回执
return email.send();
} /**
* 获取模板文件流
* @return
*/
private static InputStream getCpicTemplet(){
// return CpicCouponEmailService.class.getResourceAsStream(CPIC_TEMPLET_FILE); //文件流
InputStream in = null;
File f = new File(CPIC_TEMPLET_FILE);
try {
in = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
} @SuppressWarnings("unchecked")
private static String createHzCouponXLS(Object data, String cpicFileName) throws Exception{
InputStream assIn = null;
FileOutputStream assOut = null;
try {
//------------------------------------------------------------------------------------------------------------
assIn = getCpicTemplet();//InsuranceUtils.class.getResourceAsStream("/conf/resource/Roadside-Assistance.xlsx"); XSSFWorkbook assWb = new XSSFWorkbook(assIn);//XSSFWorkbook assWb = (XSSFWorkbook) WorkbookFactory.create(assIn);
XSSFSheet assSheet = assWb.getSheetAt(0); // String currDate = new SimpleDateFormat("yyyy/MM/dd").format(new Date()); if(data instanceof List){
List<HzCouponModel> list = (List<HzCouponModel>) data;
for (int i = 0; i < list.size() ; i++) {
HzCouponModel model = list.get(i);
setData(i, model, assWb, assSheet);
}
}else if(data instanceof Map){
HzCouponModel model = (HzCouponModel) data;
setData(0, model, assWb, assSheet);
}else{
return null;
} // String insurPolicyNamePath = File.createTempFile(cpicFileName,".xlsx").getPath(); //临时文件
String insurPolicyNamePath = "C:/save/"+cpicFileName;
assOut = new FileOutputStream(insurPolicyNamePath);
assWb.write(assOut);//写入Excel文件,这才是关键。
System.out.println("创建“***保数据”Excel文件:{}" + insurPolicyNamePath);
return insurPolicyNamePath; } catch (Exception e) {
e.printStackTrace();
throw e;
}finally{
if(assOut != null){
assOut.close();
}
if(assIn != null){
assIn.close();
}
}
} /**
* 数据填充
* @param idx
* @param currDate
* @param map
* @param insruWb
* @param insurSheet
* @param assWb
* @param assSheet
* @throws Exception
*/
private static void setData(int idx, HzCouponModel model, XSSFWorkbook assWb, XSSFSheet assSheet) throws Exception{
XSSFRow assRow = createRowAndCel(assWb, assSheet, idx+1, 12);//assSheet.getRow(i+1);//可能为null
assRow.getCell(0).setCellValue(model.getCreateTime());//
assRow.getCell(1).setCellValue(model.getPartner());//
assRow.getCell(2).setCellValue(model.getStartPolicyDate());//
assRow.getCell(3).setCellValue(model.getFiliale());//
assRow.getCell(4).setCellValue(model.getBranch());//
assRow.getCell(5).setCellValue(model.getPolicyMobile());//
assRow.getCell(6).setCellValue(model.getInsuredMobile());//
assRow.getCell(7).setCellValue(model.getBrandType());//
assRow.getCell(8).setCellValue(model.getPlateNum());//
assRow.getCell(9).setCellValue(model.getFrameNo());//
assRow.getCell(10).setCellValue(model.getCouponType());//
assRow.getCell(11).setCellValue(model.getInsuredNumber());//
} /**
* 创建Excel的行(row)和列(cel)
* @param sheet
* @param rowIdx
* @param cellNum
*/
private static XSSFRow createRowAndCel(XSSFWorkbook wb, XSSFSheet sheet, int rowIdx, int cellNum){
XSSFCellStyle cellStyle = wb.createCellStyle();//创建cell样式
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置下边框
sheet.createRow(rowIdx);
XSSFRow row = sheet.getRow(rowIdx);
for (int i = 0; i < cellNum; i++) {
XSSFCell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
}
return row;
} //错误: 找不到或无法加载主类 testJava2.email.CpicCouponEmailService
public static void main(String[] args) throws Exception{
List<HzCouponModel> list = new ArrayList<HzCouponModel>();
HzCouponModel model = new HzCouponModel("2017-06-04", "*保", "2017-06-06", "sz分公司", "电子商务部门", "137****1198", "137****1199", "奥迪A8", "沪A***78", "WFSFJFKSJFa7844", "经济型套餐", "3100245456");
list.add(model);
model = new HzCouponModel("2017-06-04", "*安", "2017-06-08", "sz分公司", "电子商务部门", "137****2298", "137****2299", "奥迪A8", "沪A**78", "WFSFJFKSJFa7844", "豪华型套餐", "3100245456");
list.add(model);
sendPolicyEmail("jhuang.sjtu@qq.com", list);
}
}
1.异常处理
Exception in thread "main" org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)
原因是:
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
2.NoClassDefFoundError: org/openxmlformats/schemas/drawingml/x2006/main/ThemeDocument
解决方法:添加poi-ooxml-schemas-3.12-20150511.jar
3. javax.mail.NoSuchProviderException: smtp 报错
下了最新的mailapi 1.4.7 版本, 把原来的那两个jar(activation-1.1.1.jar 和 mailapi-1.4.3 jar)从classpath中去掉, 把1.4.7 中lib全部加到classpath, 然后就发送成功了。
根据xlsx模板生成excel数据文件发送邮件代码的更多相关文章
- java通过FreeMarker模板生成Excel文件之.ftl模板制作
关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...
- 用MyGeneration模板生成NHibernate映射文件和关系
用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many) MyGeneration的几个NHibernate模 ...
- Jmeter—生成excel结果文件
相信很多用jmeter进行接口测试的童鞋都会有这样的苦恼:同时执行上百条测试案例,如何能轻松加愉快地检查案例输出结果?仅仅靠jmeter的断言.debug sampler.察看结果树等是无法满足我们要 ...
- mock的使用二(根据数据模板生成模拟数据)
Mock.mock( rurl?, rtype?, template|function( options ) ) 根据数据模板生成模拟数据. Mock.mock( template ) 根据数据模板生 ...
- 使用Aspose.Cells 根据模板生成excel里面的 line chart
目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...
- java生成excel报表文件
此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库 首先建立数据库的连接池: package jdbc; import java.io.FileInputStream; ...
- MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
MyGeneration的几个NHibernate模板功能已经很强,但还是存在些问题.例如:Guid主键支持不佳,代码不易修改,不支持中文注释等等.所以我决定自己来改写此模版.我把一部分通用的函数提取 ...
- PHP生成excel表格文件并下载
本文引自网络,仅供自己学习之用. 利用php导出excel我们大多会直接生成.xls文件,这种方便快捷. function createtable($list,$filename){ header(& ...
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...
随机推荐
- JavaWeb之 JSP:自定义标签的创建和使用
当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写一个普通的java类, ...
- python 3.5 连接mysql数据库
python 3.5 要连接mysql数据库,必须先安装pymysql模块,该模块可以操作mysql数据. 1.安装pymysql模块:使用pip进行安装 cmd打开运行模式,切换目录到pip的scr ...
- Vue(二)vue-devtools插件
安装vue-devtools插件,便于在chrome中调试vue https://github.com/vuejs/vue-devtools 因为chrome要FQ,打不开,所以不能直接进去安装拓展程 ...
- Updating and Publishing a NuGet Package - Plus making NuGet packages smarter and avoiding source edits with WebActivator
I wrote a post a few days ago called "Creating a NuGet Package in 7 easy steps - Plus using NuG ...
- 使用MiniProfiler调试ASP.NET web api项目性能
本质上,集成Miniprofiler可以分解为三个问题: 怎样监测一个WebApi项目的性能. 将性能分析监测信息从后端发送到UI. 在UI显示分析监测结果. 首先安装Miniprofiler,Min ...
- 让rpc支持双向通信
rpc采用了C/S模型,不支持双向通信:client只能远程调用server端的RPC接口,但client端则没有RPC供server端调用,这意味着,client端能够主动与server端通信,但s ...
- system generator学习笔记【02】
作者:桂. 时间:2018-05-20 23:28:04 链接:https://www.cnblogs.com/xingshansi/p/9059668.html 前言 继续学习sysgen.接触s ...
- atitit 各分公司ceo cao行政经理职责.docx
1.1. 人员招募--分公司高层人员招募(每月招募四五人吧,每周一人平均) 1 1.2. 组织架构优化 1 1.3. 制度建设 健全并完善分公司内部管理机构设置,优化分公司业务管理流程: 1 1.4 ...
- 【转载 Hadoop&Spark 动手实践 2】Hadoop2.7.3 HDFS理论与动手实践
简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Go ...
- Elasticsearch 性能监控基础【转】
https://blog.csdn.net/yangwenbo214/article/details/74000458