我有一个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],空对象{}的字符串或发送前发生错误。
所以任何建议都是超级建议。