Java实现邮件发送功能(邮件内容含表格)

  邮件发送功能在一个大型应用中是必不可少的功能,比如流程到某个节点自动发送邮件给相关人提示进行处理,或者某个业务系统出现异常,进行邮件预警。如何简单快速的实现发送一个邮件带表格的数据呢?最好的方案就是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

通过以上步骤即可成功实现邮件发送带表格的功能。

posted @ 2022-08-11 13:25  今夕是何年?  阅读(6277)  评论(0编辑  收藏  举报