根据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/ ...
随机推荐
- 考前停课集训 Day6 垒
Day 6 今天在家里的 家里蹲 其实是day7的时候想到要写day6了 草率补充一下 NOIP考前棕名退不掉咯 你觉得我还会打洛谷的题目吗? 依然退步 没用心 T1 分火腿 数论题 我感觉挺难的 T ...
- JS 私有变量
严格来讲,JS之中没有私有成员的概念:所以对象属性都是公有的.不过,倒是有一个私有变量的概念. 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量. 私有变量包括函数的参数 ...
- 词向量保存为txt
model.wv.save_word2vec_format('w2v_mod.txt',binary=False)
- 多重背包--java
多重背包 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值 是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大母函数的思想也 ...
- 小甲鱼Python第七讲课后习题
0.if not(money < 100):上边这行代码相当于? if money>=100 1.assert 的作用是什么? assert “断言”,当这个关键字后边的条件为假的时候,程 ...
- Redis开启AOF导致的删库事件
事件背景 Redis主从开启AOF,错误操作导致数据被清空. Redis主要作用:缓存.队列. 事故过程 Redis搭建了主从,持久化方式为RDB,RDB没有定时备份,且AOF都没有开启. 考虑到开启 ...
- 安装bootcamp时提示“找不到$winpedriver$文件夹,请验证该文件夹是否和bootcamp处于同一文件夹内?”
问题:我苹果系统是10.8.3的 装的win7 64位的! 这个bootcamp是我在别人那里拷贝的,我装的时候就这样了,但是别人装是好好的,还有我在MAC系统下载bootcamp的时候我的U盘格式是 ...
- Scala编程基础
Scala与Java的关系... 4 安装Scala. 4 Scala解释器的使用... 4 声明变量... 5 数据类型与操作符... 5 函数调用与apply()函数... 5 if表达式... ...
- 高斯模糊的Java实现
1.http://jhlabs.com/ip/index.html public static byte[] blur(byte[] data) throws IOException { ByteAr ...
- springMVC4(7)模型视图方法源代码综合分析
在完整web开发中.springMVC主要充当了控制层的角色.它接受视图层的请求.获取视图层请求数据,再对数据进行业务逻辑处理.然后封装成视图层须要的模型数据,再将数据导向到jsp等视图界面. 在前面 ...