У меня есть приложение 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 / тест с транспортным средством.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>'
})
Письмо отформатировано правильно, без видимых тегов. Почему это так?
Что я пробовал:
backticks. В моем оригинальном postData, который я не знаю, как отобразить здесь, но заменил одинарные кавычки вокруг html на backticks. Тот же результат. Создание 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)
},
Тело электронной почты: [объект]. Пытаясь сделать то же самое с stringify в test.js, тело письма - "[объектный объект]". Я попытался JSON.parse строку из моей страницы, и она выдает ошибку для неожиданное '<' и различные другие комбинации некоторых или всех этих вещей, все из которых приводят к строке с тегами html, [объектному объекту], пустому объекту {} или ошибке перед отправкой. </p>
Так что любой совет будет супер.