package com.kmi.mail.action;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import com.kmi.mail.dao.ModelDao;
import com.kmi.mail.entity.Model;
import com.kmi.mail.util.JavaReader2DOM;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* 把促销员信息写入excel通过附件发送邮件
*
* @author Administrator
*
*/
public class Mail {
String resourceFile = "email"; // 资源文件名
ResourceBundle resource = ResourceBundle.getBundle(resourceFile);
private static String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath().substring(1);
// private String mail_subject = "";// 主题、标题
private String mail_body = "";// 正文 body
/**
* 发送邮件
*/
public void sendMail(List<Model> list,String mail_subject) throws SendFailedException {
String host = resource.getString("host");
String mail_from = resource.getString("mail_from");
try {
Properties props = new Properties();// 获取系统环境
Authenticator auth = new Email_Authenticator();// 进行邮件服务用户认证
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
System.out.println("start..." + props);
Session session = Session.getDefaultInstance(props, auth);
// 设置session,和邮件服务器进行通讯
MimeMessage message = new MimeMessage(session);
message.setSentDate(new Date());// 设置邮件发送时期
Address address = new InternetAddress(mail_from);
message.setFrom(address);// 设置邮件发送者的地址
String filePath = path + "excel/" + mail_subject + ".xls";
mail_body = getMail_body("");
writeExcel(filePath,list);
message.setSubject(mail_subject);// 设置邮件主题
String[] mail_tos = resource.getString("mail_tos").split(",");// 接受者邮箱地址集合
Address[] toaddress = new InternetAddress[mail_tos.length];// 设置邮件接收者的地址
for (int i = 0; i < mail_tos.length; i++) {
String mail_to = mail_tos[i];// 接受者邮箱地址
toaddress[i] = new InternetAddress(mail_to);
}
message.addRecipients(Message.RecipientType.TO, toaddress);
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(mail_body, "text/html;charset=GB2312"); // 正文
FileDataSource fds = new FileDataSource(filePath);// 添加附件
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312",
null));
mp.addBodyPart(mbp);
mp.addBodyPart(mbp2);
message.setContent(mp);
message.saveChanges();
Transport.send(message);
System.out.println("Send Mail Ok!");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成一个Excel文件
*
* @param fileName
* 要生成的Excel文件名
*/
public void writeExcel(String fileName,List<Model> list) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
WritableWorkbook wwb = null;
try {
// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if (wwb != null) {
for (int k = 0; k < list.size(); k++) {
Model m = list.get(k);
// 创建一个可写入的工作表
// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet(m.getSheet_name(), k);
try {
ws.setRowView(0, 400);// 设置第一行的高度
} catch (RowsExceededException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
WritableCellFormat wcf = getWritableCellFormat();
ModelDao dao = new ModelDao();
//获取单元格显示数据
List dlist = null;
if (m.getSql_type().equals("1")) {
dlist = dao.getModelList(m.getSql(),Integer.parseInt(m.getColumn()));
}else if(m.getSql_type().equals("2")){
dlist = dao.executeSprocInParams(m.getSql(), Integer.parseInt(m.getColumn()), "");
}else{
System.out.println("xml配置出错。");
return;
}
// 生成表头
String excel_top = m.getExcel_top();
String[] arr = excel_top.split(",");
String[] excel_column_type = new String[arr.length];//excel字段的类型
for (int i = 0; i < arr.length; i++) {
String[] ar = arr[i].split(":");
String topName = ar[0];//表头名称
String topWidth = ar[1];//表头宽度
String labelType = null;//类型
if (ar.length > 2) {
labelType = ar[2];
}
excel_column_type[i] = labelType;
Label l = new Label(i, 0, topName, wcf);
ws.setColumnView(i, Integer.parseInt(topWidth)); // 设置列的宽度
try {
ws.addCell(l);
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 下面开始添加单元格
for (int i = 1; i < dlist.size() + 1; i++) {
List<Object> mlist = (List<Object>) dlist.get(i-1);
for (int j = 0; j < mlist.size(); j++) {
String s = (String) mlist.get(j);
// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = null;
if (excel_column_type[j] == null) {
labelC = new Label(j, i, s);
try {
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e1) {
e1.printStackTrace();
} catch (WriteException e1) {
e1.printStackTrace();
}
}else{
if (excel_column_type[j].equals("1")) {//文本格式
labelC = new Label(j, i, s);
try {
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e1) {
e1.printStackTrace();
} catch (WriteException e1) {
e1.printStackTrace();
}
}else if(excel_column_type[j].equals("2")){//数字格式
jxl.write.Number ln = new jxl.write.Number(j, i, Integer.parseInt(s));
try {
// 将生成的单元格添加到工作表中
ws.addCell(ln);
} catch (RowsExceededException e1) {
e1.printStackTrace();
} catch (WriteException e1) {
e1.printStackTrace();
}
}else if(excel_column_type[j].equals("3")){//日期格式
Date date = null;
try {
date = sdf.parse(s);
} catch (ParseException e) {
System.out.println("日期格式不正确");
e.printStackTrace();
}
jxl.write.DateTime ld = new jxl.write.DateTime(j, i, date);
try {
// 将生成的单元格添加到工作表中
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
java配置文件动态配置excel导出动态数据并发送email (145个子文件)
send.bat 242B
Mail.class 12KB
ModelDao.class 4KB
JavaReader2DOM.class 3KB
DBManager.class 2KB
Model.class 2KB
Email_Authenticator.class 1KB
Test.class 395B
.classpath 971B
entries 2KB
entries 619B
entries 605B
entries 603B
entries 599B
entries 475B
entries 468B
entries 468B
entries 353B
entries 352B
entries 348B
entries 345B
entries 343B
entries 341B
entries 337B
entries 335B
entries 258B
entries 258B
entries 217B
entries 217B
entries 212B
entries 212B
entries 205B
entries 157B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
format 2B
mailBody.html 76B
mailBody.html 76B
jxl.jar 708KB
sqljdbc.jar 512KB
msbase.jar 280KB
mail.jar 274KB
xml-apis-2.6.2.jar 122KB
mssqlserver.jar 66KB
msutil.jar 58KB
activation.jar 53KB
jaxrpc.jar 30KB
saaj.jar 19KB
Mail.java 11KB
Mail.java 9KB
JavaReader2DOM.java 6KB
JavaReader2DOM.java 6KB
ModelDao.java 3KB
ModelDao.java 3KB
DBManager.java 2KB
DBManager.java 2KB
Model.java 1KB
Model.java 1KB
Email_Authenticator.java 744B
Email_Authenticator.java 744B
Test.java 321B
Test.java 321B
index.jsp 834B
MANIFEST.MF 39B
.mymetadata 291B
org.eclipse.jdt.core.prefs 330B
.project 1008B
email.properties 419B
email.properties 419B
jxl.jar.svn-base 708KB
sqljdbc.jar.svn-base 512KB
msbase.jar.svn-base 280KB
mail.jar.svn-base 274KB
xml-apis-2.6.2.jar.svn-base 122KB
mssqlserver.jar.svn-base 66KB
msutil.jar.svn-base 58KB
activation.jar.svn-base 53KB
jaxrpc.jar.svn-base 30KB
saaj.jar.svn-base 19KB
共 145 条
- 1
- 2
yn00
- 粉丝: 124
- 资源: 61
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页