You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Mongo存储的HTML邮件模板转为可读文本并替换变量?

如何将Mongo中带占位符的HTML邮件内容转换为纯文本并替换变量

问题描述

我在Mongo中存储了包含变量占位符的HTML格式邮件内容:

<div>Dear Customer,</div><div>An amount of Rs. <a data-value="Payment - Amount to Pay" data-mention="" class="wysiwyg-mention" href="payment_new.amount_to_pay_3xkhkenphf">@Payment - Amount to Pay</a> for your Loan Account Number <a data-value="Payment - Loan Number" data-mention="" class="wysiwyg-mention" href="payment_new.loan_number_rtcivc45ok">@Payment - Loan Number</a> has been received on <a data-value="Payment - Date" data-mention="" class="wysiwyg-mention" href="payment_new.payment_date">@Payment - Date</a> ,vide receipt no <a data-value="Payment - Receipt Number" data-mention="" class="wysiwyg-mention" href="payment_new.receipt_number_5dow863ae">@Payment - Receipt Number</a>.</div>
<div>Payment Mode: <a data-value="Payment - Payment Mode" data-mention="" class="wysiwyg-mention" href="payment_new.payment_mode_chw0gfq6vo">@Payment - Payment Mode</a>.</div>
<div>Please find the receipt attached below.</div>

直接读取Mongo内容通过外部API发送时,邮件正文会显示原始HTML标签和占位符:

<div>Dear Customer,</div>
<div>An amount of Rs. <a data-value="Payment - Amount to Pay" data-mention="" class="wysiwyg-mention" href="payment_new.amount_to_pay_3xkhkenphf">@Payment - Amount to Pay</a> for your Loan Account Number <a data-value="Payment - Loan Number" data-mention="" class="wysiwyg-mention" href="payment_new.loan_number_rtcivc45ok">@Payment - Loan Number</a> has been received on <a data-value="Payment - Date" data-mention="" class="wysiwyg-mention" href="payment_new.payment_date">@Payment - Date</a> ,vide receipt no <a data-value="Payment - Receipt Number" data-mention="" class="wysiwyg-mention" href="payment_new.receipt_number_5dow863ae">@Payment - Receipt Number</a>.</div>
<div>Payment Mode: <a data-value="Payment - Payment Mode" data-mention="" class="wysiwyg-mention" href="payment_new.payment_mode_chw0gfq6vo">@Payment - Payment Mode</a>.</div>
<div>Please find the receipt attached below.</div>

我需要将其转换为无HTML标签、占位符替换为实际值的可读文本,示例如下:

Dear Customer, An amount of Rs. 111 for your Loan Account Number 8204221103679 has been received on 24-Jul-2023 ,vide receipt no 1690195463903291.Payment Mode: Cash. Please find the receipt attached below.

解决方案

核心思路

先提取HTML中的纯文本内容,再将占位符替换为实际业务数据,最后优化文本格式使其连贯可读。

具体实现步骤(以Node.js环境为例)

  • 解析HTML提取纯文本
    使用HTML解析库(如cheerio)去除所有HTML标签,保留包含占位符的文本内容:

    const cheerio = require('cheerio');
    
    // 从Mongo读取的原始HTML内容
    const htmlContent = '<div>Dear Customer,</div><div>An amount of Rs. <a data-value="Payment - Amount to Pay" ...>@Payment - Amount to Pay</a>...</div>';
    const $ = cheerio.load(htmlContent);
    let plainText = $.text(); // 此时plainText包含@开头的占位符,无HTML标签
    
  • 替换占位符为实际值
    准备存储实际数据的对象,通过正则匹配所有@XXX格式的占位符并替换:

    // 实际业务数据,可从数据库或业务接口获取
    const paymentData = {
      '@Payment - Amount to Pay': '111',
      '@Payment - Loan Number': '8204221103679',
      '@Payment - Date': '24-Jul-2023',
      '@Payment - Receipt Number': '1690195463903291',
      '@Payment - Payment Mode': 'Cash'
    };
    
    // 正则匹配所有@开头的占位符,替换为对应数据
    plainText = plainText.replace(/@[\w\s-]+/g, match => paymentData[match] || match);
    
  • 优化文本格式
    清理提取过程中产生的多余换行和连续空格,让内容更连贯:

    // 替换所有连续空白字符为单个空格,去除首尾空格
    plainText = plainText.replace(/\s+/g, ' ').trim();
    
  • 发送纯文本邮件
    将处理后的纯文本传递给邮件API,确保API以纯文本格式发送邮件(而非HTML格式)。

注意事项

  • 若使用Python等其他语言,可选用对应HTML解析库(如BeautifulSoup),替换逻辑一致。
  • 确保占位符名称和业务数据的键完全匹配,避免替换失败。
  • 若有特殊格式需求,可根据实际场景调整文本处理规则。

内容的提问来源于stack exchange,提问作者Aakarshit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:05:54