【邮件发送】将list数据以html格式的形式展示到邮件正文

本文介绍了如何将不满足团购商品利润和库存条件的数据从列表转换为HTML表格,然后在邮件正文中展示,以提高邮件的可读性和美观性。通过创建HTML结构,遍历列表数据,限制展示条数,最终调用邮件服务发送带有HTML内容的邮件。
摘要由CSDN通过智能技术生成

签名:但行好事,莫问前程。


前言

公司产品提出了一个新需求,要求把不满足团购商品利润和库存的Excel里面的数据展示到邮件正文,(之前本来是Excel作为附件发送到邮箱)。要求:正文展示的数据要美观。


一、需求分析

  • 已经可以获取的数据:不满足团购商品利润和库存的list数据、需要发送邮件的人邮箱的数组,以及发送邮件的工具类。
  • 需要优化的部分:把list数据展示到邮件正文。
  • 解决思路:将list数据抽取成table表格,然后以html的形式展示到邮件正文(ps:邮件是支持解析html内容的)

二、代码编写

if(profitVOList != null && profitVOList.size() > 0){
                String subject = "团购商品利润和库存预警";
                //Step3:创建临时表格文件
                String fileName =  new String(subject.getBytes("utf-8"));
                File sheetFile = new File(fileName + ".xlsx");
                ExcelUtil.writeExcel(sheetFile, EmallGoodsStockAndProfitVO.class, profitVOList);

                if (notifyEmail != null) {
                    logger.info("邮件通知人[{}],[{}]", sendTo,sendTo2);
                    logger.info("邮件通知内容[{}]", profitVOList);

                    // Excel内容在邮件正文显示
                    StringBuilder htmlText = new StringBuilder();
                    String htmlStar = "<html><body><table border=\"1px\" cellpadding=\"10px\">";
                    String htmlEnd = "</table></body></html>";
                    // 表头
                    String th = "<tr>" +
                            "<th>营销活动ID</th>" +
                            "<th>营销活动</th>" +
                            "<th>场次ID</th>" +
                            "<th>场次名称</th>" +
                            "<th>场次开始时间</th>" +
                            "<th>场次结束时间</th>" +
                            "<th>商品ID</th>" +
                            "<th>商品名称</th>" +
                            "<th>利润率</th>" +
                            "<th>库存</th></tr>";
                    // 行数据
                    StringBuilder tr = new StringBuilder();
                    // for循坏table的行数据
                    for (int i = 0; i < profitVOList.size(); i++) {
                        // 只展示前20条数据
                        if (i == 20) {
                            tr.append("更多数据请打开Excel附件查看详情O(∩_∩)O~");
                            break;
                        }
                        // 依次获取表头对应的字段值
                        tr.append(
                                "<tr>" +
                                        "<td>" + profitVOList.get(i).getProjectId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getProjectName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionStartTime() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionEndTime() + "</td>" +
                                        "<td>" + profitVOList.get(i).getGoodsId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getGoodsName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getProfit() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSurplusNum() + "</td>" +
                                        "</tr>");
                    }
                    // 拼接HTML页面
                    htmlText.append(htmlStar);
                    htmlText.append(th);
                    htmlText.append(tr);
                    htmlText.append(htmlEnd);
                    notifyService.notifyMailWithAttachmentAndHtmlText(emailStr.split(","), fileName, sheetFile, String.valueOf(htmlText), false);
                }
            } else {
                logger.info("团购商品活动利润正常,无需预警, [{}]");
            }

三、解决思路

  1. 定义html、body、table 头和尾
 String htmlStar = "<html><body><table border=\"1px\" cellpadding=\"10px\">";
 String htmlEnd = "</table></body></html>";
  1. 定义table的表头
// 表头
                    String th = "<tr>" +
                            "<th>营销活动ID</th>" +
                            "<th>营销活动</th>" +
                            "<th>场次ID</th>" +
                            "<th>场次名称</th>" +
                            "<th>场次开始时间</th>" +
                            "<th>场次结束时间</th>" +
                            "<th>商品ID</th>" +
                            "<th>商品名称</th>" +
                            "<th>利润率</th>" +
                            "<th>库存</th></tr>";
  1. for循坏遍历list生成行数据
// 行数据
                    StringBuilder tr = new StringBuilder();
                    // for循坏table的行数据
                    for (int i = 0; i < profitVOList.size(); i++) {
                        // 只展示前20条数据
                        if (i == 20) {
                            tr.append("更多数据请打开Excel附件查看详情O(∩_∩)O~");
                            break;
                        }
                        // 依次获取表头对应的字段值
                        tr.append(
                                "<tr>" +
                                        "<td>" + profitVOList.get(i).getProjectId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getProjectName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionStartTime() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSessionEndTime() + "</td>" +
                                        "<td>" + profitVOList.get(i).getGoodsId() + "</td>" +
                                        "<td>" + profitVOList.get(i).getGoodsName() + "</td>" +
                                        "<td>" + profitVOList.get(i).getProfit() + "</td>" +
                                        "<td>" + profitVOList.get(i).getSurplusNum() + "</td>" +
                                        "</tr>");
                    }
  1. 拼接HTML页面
// 拼接HTML页面
                    htmlText.append(htmlStar);
                    htmlText.append(th);
                    htmlText.append(tr);
                    htmlText.append(htmlEnd);
  1. 调用邮件发送方法
notifyService.notifyMailWithAttachmentAndHtmlText(emailStr.split(","), fileName, sheetFile, String.valueOf(htmlText), false);

四、最终效果

将list数据以html格式的形式展示到邮件正文

在这里插入图片描述


总结

博客主要记录了工作中将list数据以html格式的形式展示到邮件正文的问题,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值