58同城佛山網(wǎng)站建設(shè)網(wǎng)站建設(shè)技術(shù)解決方案
需求:從數(shù)據(jù)庫(kù)中抓取需要的數(shù)據(jù),將數(shù)據(jù)生成excel表格,并將此表格以附件的形式放置到郵件中發(fā)送
//發(fā)送帶附件的郵件,同時(shí)附件不會(huì)生成到服務(wù)器中public static String sendFileEmail(String form, String code, String to, String title, String context, Map<String,String> custBO,List<Map<String,String>> MSG) throws AddressException, MessagingException {Properties properties = new Properties();properties.put("mail.transport.protocol", "smtp");// 連接協(xié)議properties.put("mail.smtp.host", "smtp.exmail.qq.com");// 主機(jī)名properties.put("mail.smtp.port", 465);// 端口號(hào)properties.put("mail.smtp.auth", "true");properties.put("mail.smtp.ssl.enable", "true");// 設(shè)置是否使用ssl安全連接 ---一般都使用properties.put("mail.debug", "true");// 設(shè)置是否顯示debug信息 true 會(huì)在控制臺(tái)顯示相關(guān)信息// 得到回話對(duì)象Session session = Session.getInstance(properties);// 獲取郵件對(duì)象Message message = new MimeMessage(session);// 設(shè)置發(fā)件人郵箱地址message.setFrom(new InternetAddress(form));// 設(shè)置收件人郵箱地址message.setRecipients(Message.RecipientType.TO, new InternetAddress[] { new InternetAddress(to) });// message.setRecipient(Message.RecipientType.TO, new// InternetAddress("xxx@qq.com"));//一個(gè)收件人// 設(shè)置郵件標(biāo)題message.setSubject(title);// 設(shè)置附件// 整封郵件的MINE消息體MimeMultipart msgMultipart = new MimeMultipart("mixed");// 混合的組合關(guān)系// 設(shè)置郵件的MINE消息體message.setContent(msgMultipart);BodyPart bp = new MimeBodyPart();bp.setContent(context, "text/html;charset=gbk");msgMultipart.addBodyPart(bp);
//==================================================================================================MimeBodyPart attch = new MimeBodyPart(); // 附件msgMultipart.addBodyPart(attch); // 將附件添加到MIME消息體中ByteArrayDataSource dataSource = null; // 數(shù)據(jù)源ByteArrayOutputStream os = new ByteArrayOutputStream();HSSFWorkbook wb = new HSSFWorkbook();String deliveryNo = custBO.get("deliveryNo");// 發(fā)貨訂單號(hào)HSSFSheet sheet = wb.createSheet("sheet頁(yè)的標(biāo)題" + deliveryNo);// 設(shè)置列名HSSFRow titlerRow = sheet.createRow(0);titlerRow.createCell(0).setCellValue("新編碼");titlerRow.createCell(1).setCellValue("老編碼");titlerRow.createCell(2).setCellValue("數(shù)量");// 添加子表得內(nèi)容for (Map<String,String> bo : MSG) {// 獲取最后一行的行號(hào)int lastRowNum = sheet.getLastRowNum();HSSFRow dataRow = sheet.createRow(lastRowNum + 1);dataRow.createCell(0).setCellValue(bo.get("新編碼"));dataRow.createCell(1).setCellValue(bo.get("老編碼"));dataRow.createCell(2).setCellValue(bo.get("數(shù)量"));}try {wb.write(os);} catch (IOException e) {e.printStackTrace();}ByteArrayInputStream a = new ByteArrayInputStream(os.toByteArray());
//====================================================================================================Transport transport = null;try {dataSource = new ByteArrayDataSource(a, "xlsx/data");attch.setDataHandler(new DataHandler(dataSource));attch.setFileName("文件名" + ".xlsx");// 得到郵差對(duì)象transport = session.getTransport();// 連接自己的郵箱賬戶transport.connect(form, code);// 密碼為QQ郵箱開(kāi)通的stmp服務(wù)后得到的客戶端授權(quán)碼
// // 設(shè)置郵件內(nèi)容
// message.setText(context);// 發(fā)送郵件transport.sendMessage(message, message.getAllRecipients());} catch (IOException e) {e.printStackTrace();} finally {transport.close();}return null;}