zoukankan      html  css  js  c++  java
  • 根据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, 然后就发送成功了。 

  • 相关阅读:
    HDU-1875-畅通工程再续(最小生成树)
    HDU-1325-Is It A Tree?(并查集+有向树)
    HDU-2473-Junk-Mail Filter(并查集删除)
    HDU-1233-还是畅通工程(最小生成树)
    POJ-2492-A Bug's Life(并查集分类)
    asp.net core 中KindEditor的使用
    使用FormsAuthenticationTicket进行登陆验证
    c#生成随机字符串
    string.Format对C#字符串格式化
    在Ubuntu上使用noip动态域名的方法(ddns)
  • 原文地址:https://www.cnblogs.com/simpledev/p/6942127.html
Copyright © 2011-2022 走看看