发送给nodemailer的HTML在电子邮件中显示为字符串

时间:2018-11-19 08:24:56

标签: javascript express nuxt.js nodemailer

我有一个nuxt.js应用程序,其中设置了电子邮件发送功能。电子邮件数据将在页面中生成,并通过商店发送到serverMiddleware并表达。除此问题外,其他所有功能都非常有效。我发送的内容字符串在电子邮件正文中呈现为字符串,html标记以及所有内容。但是,如果我将相同的字符串直接放入transporter.sendMail中,它将在电子邮件中正确呈现。以下是一些代码来说明:

//page.vue - where the email data is first send from
tryMail() {
            let postData = {
                name: 'nameo',
                email: 'noreply@address.com',
                msg: '<h2>Test message and stuff</h2><p>And this would be the lovely body</p>'
            }
            this.$store.dispatch('send_mail', postData)
        },

在我的商店中

//index.js
send_mail(vuexContext, data) {
                    var axiosInstance = axios.create({
                        baseURL: 'http://127.0.0.1:3000/',
                        /* this is just to escape my actual backend baseURL */
                    });
                    axiosInstance.post('api/test', data)
                    .then(res => {
                        alert('sent mail')
                        return res
                    })
                    .catch(error => {
                        return error
                      })
              },

和我的api / test与transporter.sendMail。

//test.js
const sendMail = (name, email, msg) => {
    const transporter = nodemailer.createTransport({
        sendmail: true,
        newline: 'unix',
        path: '/usr/sbin/sendmail'
    })
    transporter.sendMail({
        from: email,
        to: 'andrew@domain.com',
        subject: name+' you have a new message from nuxt',
        html: msg
    })
}

正如我所说,这一切正常,将电子邮件发送到正确的地址,该地址中包含主题和名称以及发件人电子邮件。问题是正文包含<h2>Test message and stuff</h2><p>And this would be the lovely body</p>。从字面上看。现在,如果我将sendMail更改为此:

transporter.sendMail({
            from: email,
            to: 'andrew@domain.com',
            subject: name+' you have a new message from nuxt',
            html: '<h2>Test message and stuff</h2><p>And this would be the lovely body</p>'
        })

电子邮件格式正确,没有可见的标签。为什么会这样?

我尝试过的方法: 反引号。在我的原始postData中,我不知道如何在此处显示,而是用反引号替换html周围的单引号。结果相同。 制作html对象,如下所示:

tryMail() {
            var s = '<h2>Test message and stuff</h2><p>And this would be the lovely body</p>'
            var htmlObject = document.createElement('html')
            htmlObject.innerHTML = s
            let postData = {
                name: 'nameo',
                email: 'noreply@address.com',
                msg: htmlObject
            }
            this.$store.dispatch('send_mail', postData)
        },

电子邮件正文是[object Object]。在test.js中尝试使用 stringify 进行相同的操作,电子邮件正文为“ [object Object]”。我尝试从页面中 JSON.parse 字符串,并抛出一个错误导致意外的<<,以及某些或所有这些事物的各种其他组合,所有这些都会导致带有html标签,[object Object],空对象{}的字符串或发送前发生错误。

所以任何建议都是超级建议。

0 个答案:

没有答案