使用其他服务发送email
application.yml
--- #email setting spring: mail: protocol: smtp default-encoding: UTF-8 properties: mail: debug: true smtp: auth: true starttls: enable: true required: true timeout: 25000 socketFactory: class: javax.net.ssl.SSLSocketFactory
依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
客户端:
public static HSSFWorkbook getHSSFWorkbook(String name,List<Map<String, Object>> model, String[] headers) { HSSFWorkbook workbook=new HSSFWorkbook(); int rowNum=1; HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(0, name); sheet.createFreezePane(0, rowNum+1); sheet.setColumnWidth(0, 4000); sheet.setColumnWidth(1, 3500); sheet.setColumnWidth(2, 6500); sheet.setColumnWidth(3, 2000); sheet.setColumnWidth(4, 3500); sheet.setColumnWidth(5, 3500); sheet.setColumnWidth(6, 3500); sheet.setColumnWidth(7, 3500); sheet.setColumnWidth(8, 6500); HSSFRow row = sheet.createRow(rowNum); sheet.setColumnWidth(2, 12 * 256); sheet.setColumnWidth(3, 17 * 256); HSSFCellStyle style = workbook.createCellStyle(); HSSFFont font = workbook.createFont(); font.setBold(true); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setFont(font); HSSFRow headRow = sheet.createRow(0); for (short i = 0; i < headers.length; i++) { HSSFCell cell = headRow.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } int dataRow=1; if (model==null||model.size()<=0) { return null; } for (Map<String, Object>map:model) { int cell=0; map.forEach((x,y)->{ HSSFRow row2 = sheet.createRow(rowNum); row2.createCell(cell).setCellValue(y.toString()); }); } return workbook; }
HSSFWorkbook hssfWorkbook=getHSSFWorkbook();
ByteArrayOutputStream baos = new ByteArrayOutputStream(); hssfWorkbook.write(baos); baos.flush(); byte[] bt = baos.toByteArray(); String data= Base64Util.startBase64(bt);
然后把data发送过去
服务端:
接收data,String类型
BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes =decoder.decodeBuffer(data); InputStream is = new ByteArrayInputStream(bytes, 0, bytes.length);
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); /**设置配置信息,我们在application.yml中配置*/ Properties properties = new Properties(); properties.setProperty("mail.debug", "true");// 是否显示调试信息(可选) properties.setProperty("mail.smtp.starttls.enable", "true"); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.setProperty("mail.smtp.auth", "true"); properties.put(" mail.smtp.timeout ", " 25000 "); javaMailSender.setJavaMailProperties(properties); javaMailSender.setHost("smtp.163.com"); javaMailSender.setUsername("*****@163.com"); javaMailSender.setPassword("****");//授权码 //javaMailSender.setPort(25); javaMailSender.setDefaultEncoding("UTF-8"); MimeMessage mimeMessage = javaMailSender.createMimeMessage(); mimeMessage.addHeader("charset", "UTF-8"); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom("****@163.com"); String []place=new String[]{"****@qq.com"}; helper.setTo(place); helper.setSubject("主题"); helper.setText("正文"); mimeMessage.saveChanges(); DataSource source = new ByteArrayDataSource(is, "application/msexcel"); // FileSystemResource file1 = new FileSystemResource(new File("D:\\***.xlsx")); // helper.addAttachment("***.xlsx", file1);/**为避免文件名乱码,测试得出当文件名长度大于20时,也会产生乱码*/
String filename = MimeUtility.encodeText(attachName,"GBK","B"); filename = filename.replaceAll(" ","_").replaceAll("\r", "_").replaceAll("\n", "_");helper.addAttachment(filename ,source);
javaMailSender.send(mimeMessage);把附件转成经过BASE64为压缩后通过json串的形式发送过去,然后再解压