邮件发送功能在一个大型应用中是必不可少的功能,比如流程到某个节点自动发送邮件给相关人提示进行处理,或者某个业务系统出现异常,进行邮件预警。如何简单快速的实现发送一个邮件带表格的数据呢?最好的方案就是Email内嵌html页面就可以实现。具体实现见如下代码:
① 定义一个Java版的html模板
public class HtmlTableTemplate {
/**
* 生成html内容
* @param contentList 写入表格的内容,第一行作为表头
* @return
*/
public String generateHtml(List<String[]> contentList) {
StringBuilder stb = new StringBuilder();
stb.append("<!DOCTYPE html>\n")
.append("<html lang=\"zh\">\n")
.append(this.generateHtmlHead())
.append(this.generateHtmlBody(contentList))
.append("</html>");
return stb.toString();
}
/**
* 生成html head标签里面的内容
* @return
*/
public String generateHtmlHead() {
return "<head>\n"
+ " <meta charset=\"UTF-8\">\n"
+ " <title>title</title>\n"
+ " <meta name=\"description\" content=\"html table\">\n"
+ "</head>";
}
/**
* 生成body标签里面的内容
* @param contentList 第一行数据默认作为表头字段
* @return
*/
public String generateHtmlBody(List<String[]> contentList) {
StringBuilder stb = new StringBuilder();
stb.append("<body>\n")
// 指定样式
.append("<table style=\"border-width: 1px;border-collapse: collapse;margin: 0 auto;width: 100%;\">\n");
for (int i = 0; i < contentList.size(); i++) {
if (i == 0) {
// 生成表头
stb.append(" <tr>\n");
String[] tableHead = contentList.get(0);
for (int j = 0; j < tableHead.length; j++) {
stb.append(" <th style=\"border-width:1px;padding:8px;border-style:solid;background-color:#dedede;\">").append(tableHead[j]).append("</th>\n");
}
stb.append(" </tr>\n");
} else {
// 生成数据
stb.append(" <tr>\n");
String[] tableData = contentList.get(i);
for (int j = 0; j < tableData.length; j++) {
stb.append(" <td style=\"border-width:1px;padding:8px;border-style:solid;\">").append(tableData[j]).append("</td>\n");
}
stb.append(" </tr>\n");
}
}
stb.append("</table>\n")
.append("</body>");
return stb.toString();
}
}
② 调用Java邮件api的功能发送邮件
// mailSender是通过spring注入的JavaMailSender实例
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom("sender@email.com");
messageHelper.setTo("receiver@email.com");
messageHelper.setSubject("邮件主题");
// htmlContent为上面生成的html内容字符串
messageHelper.setText(htmlContent, true);
mailSender.send(mimeMessage);
③ SpringBoot中邮件通用配置项
spring.mail.default-encoding=UTF-8
## host为邮件服务器域名,如smtp.qq.com
spring.mail-host=smtp.domain.com
## 发件人邮箱账号
spring.mail.username=xxx@domain.com
## 发件人邮箱密码,此处为邮件第三方授权码
spring.mail.password=zzzzzz
通过以上步骤即可成功实现邮件发送带表格的功能。
探索不以困难而止,学习不以艰苦而终