如何使用sendgrid api将json对象作为html发送

问题描述

我正在尝试使用 sendgrid API 发送电子邮件。我希望消息的正文包含一个格式为 HTML 的 json 对象。

{
    "glossary": {
        "title": "example glossary","GlossDiv": {
            "title": "S","GlossList": {
                "GlossEntry": {
                    "ID": "SGML","SortAs": "SGML","Glossterm": "Standard Generalized MarkuP Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {
                        "para": "A Meta-markuP Language,used to create markuP Languages such as DocBook.","GlossSeeAlso": ["GML","XML"]
                    },"GlossSee": "markup"
                }
            }
        }
    }
}

但是电子邮件的正文看起来像这样:

{ “词汇表”:{ "title": "示例词汇表",“光泽度”:{ "title": "S",“光泽列表”:{ “光泽条目”:{ "ID": "SGML","Glossterm": "标准通用标记语言","缩写": "SGML","缩写": "ISO 8879:1986",“光泽度”:{ "para": "一种元标记语言,用于创建 DocBook 等标记语言。","XML"] },"GlossSee": "标记" } } } } }

当我将 json 对象字符串化并使用 sendgrid API 作为 HTML 发送时,电子邮件正文只是一个长文本字符串,难以阅读:( 我也尝试过 NPM 包 retty-print-json

所有这些都会产生相同的结果:电子邮件正文只是一个长文本字符串

字符串化

let html = stringify.JSON(getStats);   
        const msg = {
            to: 'foo@foo.com',from: 'foo@foo.com',subject: datasetTitle,html: html
        }

prettyPrintJson

let html = prettyPrintJson.toHtml(getStats);
        const msg = {
            to: 'foo@foo.com',html: html
        }

解决方法

空格包括换行符,默认在 HTML 中折叠。将漂亮打印的 JSON 包裹在 <pre></pre> 中,输出应正确显示。您不需要包来添加换行符,只需在序列化 JSON.stringify(obj,undefined,4)

时指定额外的参数