java发送邮件-获取包含表格的html内容

1 依赖

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.4</version>
</dependency>

2 工具类

/**
 * 获取包含表格的html内容
 * @param titleMap 表头
 * @param propsMap 字段属性
 * @param attachList 表格数据
 * @return
 */
public static String getHtmlContent(Map<String, String[]> titleMap, Map<String, String[]> propsMap, Map<String, List> attachList) {
    if (titleMap.isEmpty() || propsMap.isEmpty() || attachList.isEmpty()) {
        return null;
    }

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("\r\n");

    stringBuilder.append("<html><head></head><body>");
    for (Map.Entry<String, List> entry : attachList.entrySet()) {
        String tableName = entry.getKey();

        stringBuilder.append("<h3>" + tableName + "</h3>");
        stringBuilder.append("<table border=\"1\" cellspacing=\"0\" style=\"font-family:微软雅黑\">");

        String[] titles = titleMap.get(tableName);
        if (titles == null) {
            log.warn("表头为空。sheetName:{}", tableName);
            stringBuilder.append("表头为空");
            stringBuilder.append("\r\n");
            continue;
        }

        String[] props = propsMap.get(tableName);
        if (props == null) {
            log.warn("属性名称为空。tableName:{}", tableName);
            stringBuilder.append("属性名称为空");
            stringBuilder.append("\r\n");
            continue;
        }

        List list = entry.getValue();
        if (CollectionUtils.isEmpty(list)) {
            log.warn("暂无数据。tableName:{}", tableName);
            stringBuilder.append("暂无数据");
            stringBuilder.append("\r\n");
            continue;
        }

        // 设置表格表头
        stringBuilder.append("<tr style=\"background-color: #428BCA; color:#ffffff\">");
        for (String title : titles) {
            stringBuilder.append("<th width=\"100px\">" + title + "</th>");
        }
        stringBuilder.append("</tr>");

        // 设置表格内容
        for (Object obj : list) {
            stringBuilder.append("</tr>");
            for (String prop : props) {
                try {
                    Object fieldValue = PropertyUtils.getProperty(obj, prop);
                    if (fieldValue == null) {
                        fieldValue = "";
                    }
                    stringBuilder.append("<td style=\"text-align:center\">" + fieldValue + "</td>");
                } catch (Exception e) {
                    log.error("填充列表失败", e);
                }
            }
            stringBuilder.append("</tr>");
        }
        stringBuilder.append("</table>");
        stringBuilder.append("\r\n");
    }

    stringBuilder.append("</body></html>");
    return stringBuilder.toString();
}

3 测试

public static void main(String[] args) {
    List<VerifyResultDto> list4VerifyOverview = new ArrayList<>();
    List<VerifyResultDto> list4Warehouse = new ArrayList<>();

    String[] titles4VerifyOverview = new String[]{"", "总审核次数", "审核通过次数", "审核不通过次数", "审核不通过率"};
    String[] titles4WarehouseVerify = new String[]{"商家", "总审核次数", "审核通过次数", "审核不通过次数", "审核不通过率"};
    String[] props4VerifyNum = new String[]{"desc", "totalVerifyNum", "verifyPassNum", "verifyRefuseNum", "verifyRefuseRatio"};

    // 表头
    Map<String, String[]> titleMap = new HashMap<>();
    titleMap.put("审核数量概览", titles4VerifyOverview);
    titleMap.put("各仓审核数量统计", titles4WarehouseVerify);

    // 字段属性
    Map<String, String[]> propsMap = new HashMap<>();
    propsMap.put("审核数量概览", props4VerifyNum);
    propsMap.put("各仓审核数量统计", props4VerifyNum);

    // 表格数据
    Map<String, List> dataMap = new LinkedHashMap<>();
    dataMap.put("审核数量概览", list4VerifyOverview);
    dataMap.put("各仓审核数量统计", list4Warehouse);

    String htmlContent = getHtmlContent(titleMap, propsMap, dataMap);
}

VerifyResultDto

@Data
public class VerifyResultDto implements Serializable {
    private static final long serialVersionUID = -2391266072403916849L;

    /**
     * 描述
     */
    private String desc;
    /**
     * 总审核次数
     */
    private Long totalVerifyNum;
    /**
     * 审核通过次数
     */
    private Long verifyPassNum;
    /**
     * 审核不通过次数
     */
    private Long verifyRefuseNum;
    /**
     * 审核不通过率
     */
    private String verifyRefuseRatio;

}

4 备注

包含表格的html页面的基本结构

<html><head></head><body>
    <h3>定义标题</h3>
    <table>
     <tr>
      <th>定义表头</th>
     </tr>
    
     <tr>
      <td>定义单元格</td>
     </tr>
    </table>
</body></html>

5 参考

(1)Java使用html样式发送带表格的邮件_岁月静静好的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,你可以使用JavaMail API来发送包含HTML格式(包括表格)的电子邮件。以下是一个简单的示例,展示了如何创建一个HTML表格的邮件: ```java import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class EmailSender { public static void main(String[] args) { // 设置邮件属性 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); // 获取Session对象并进行验证 Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-password"); } }); try { // 创建MimeMessage对象 Message message = new MimeMessage(session); // 设置发件人和收件人 message.setFrom(new InternetAddress("your-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com")); // 设置邮件主题和内容 message.setSubject("HTML Table Email"); String htmlContent = "<html><body>" + "<h1>Hello, World!</h1>" + "<table border=\"1\"><tr><th>Column 1</th><th>Column 2</th></tr>" + "<tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr>" + "</table>" + "</body></html>"; message.setContent(htmlContent, "text/html; charset=UTF-8"); // 发送邮件 Transport.send(message); System.out.println("Email sent successfully."); } catch (MessagingException e) { e.printStackTrace(); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值