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

该文章提供了一个Java工具类,用于根据给定的表头、字段属性和表格数据生成HTML内容。它依赖于commons-beanutils库来处理对象属性,创建的HTML包括表格结构,支持多表格展示,并在数据缺失时给出相应警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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样式发送带表格的邮件_岁月静静好的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值