HTML, отправленный на nodemailer, появляется в электронной почте в виде строки - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение 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>

Так что любой совет будет супер.

...