HTML sent to nodemailer appears in email as a string
up vote
0
down vote
favorite
I have a nuxt.js app in which I am setting up the sending of emails. The email data will be generated in a page and sent via the store to serverMiddleware and express. It all works very well except for this one issue. The string for content I send is rendered in the email body as a string, html tags and all. But if I put the same string directly into my transporter.sendMail
it renders correctly in the email. Heres some code to illustrate:
//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)
},
and in my store:
//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
})
},
and my api/test with the 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
})
}
As I said, this all works fine, the email is sent to the correct address it has a subject with the name in it and a from email. The issue is that the body contains <h2>Test message and stuff</h2><p>And this would be the lovely body</p>
. Literally. Now if I change my sendMail to this:
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>'
})
The email is formatted correctly with no tags visible. Why is this so?
What I have tried:
backticks. In my original postData which I don't know how to display here but replace the single quotes around the html with backticks. Same result. Making an html object like this:
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)
},
email body is [object Object]. Trying the same with stringify in test.js, email body is "[object Object]" I've tried to JSON.parse the string from my page and it throws an error for unexpected'<', and various other combinations of some or all these things all of which result in a string with html tags, [object Object], an empty object {}, or an error before send.
So any advice would be super.
javascript express nuxt.js nodemailer
add a comment |
up vote
0
down vote
favorite
I have a nuxt.js app in which I am setting up the sending of emails. The email data will be generated in a page and sent via the store to serverMiddleware and express. It all works very well except for this one issue. The string for content I send is rendered in the email body as a string, html tags and all. But if I put the same string directly into my transporter.sendMail
it renders correctly in the email. Heres some code to illustrate:
//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)
},
and in my store:
//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
})
},
and my api/test with the 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
})
}
As I said, this all works fine, the email is sent to the correct address it has a subject with the name in it and a from email. The issue is that the body contains <h2>Test message and stuff</h2><p>And this would be the lovely body</p>
. Literally. Now if I change my sendMail to this:
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>'
})
The email is formatted correctly with no tags visible. Why is this so?
What I have tried:
backticks. In my original postData which I don't know how to display here but replace the single quotes around the html with backticks. Same result. Making an html object like this:
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)
},
email body is [object Object]. Trying the same with stringify in test.js, email body is "[object Object]" I've tried to JSON.parse the string from my page and it throws an error for unexpected'<', and various other combinations of some or all these things all of which result in a string with html tags, [object Object], an empty object {}, or an error before send.
So any advice would be super.
javascript express nuxt.js nodemailer
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a nuxt.js app in which I am setting up the sending of emails. The email data will be generated in a page and sent via the store to serverMiddleware and express. It all works very well except for this one issue. The string for content I send is rendered in the email body as a string, html tags and all. But if I put the same string directly into my transporter.sendMail
it renders correctly in the email. Heres some code to illustrate:
//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)
},
and in my store:
//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
})
},
and my api/test with the 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
})
}
As I said, this all works fine, the email is sent to the correct address it has a subject with the name in it and a from email. The issue is that the body contains <h2>Test message and stuff</h2><p>And this would be the lovely body</p>
. Literally. Now if I change my sendMail to this:
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>'
})
The email is formatted correctly with no tags visible. Why is this so?
What I have tried:
backticks. In my original postData which I don't know how to display here but replace the single quotes around the html with backticks. Same result. Making an html object like this:
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)
},
email body is [object Object]. Trying the same with stringify in test.js, email body is "[object Object]" I've tried to JSON.parse the string from my page and it throws an error for unexpected'<', and various other combinations of some or all these things all of which result in a string with html tags, [object Object], an empty object {}, or an error before send.
So any advice would be super.
javascript express nuxt.js nodemailer
I have a nuxt.js app in which I am setting up the sending of emails. The email data will be generated in a page and sent via the store to serverMiddleware and express. It all works very well except for this one issue. The string for content I send is rendered in the email body as a string, html tags and all. But if I put the same string directly into my transporter.sendMail
it renders correctly in the email. Heres some code to illustrate:
//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)
},
and in my store:
//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
})
},
and my api/test with the 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
})
}
As I said, this all works fine, the email is sent to the correct address it has a subject with the name in it and a from email. The issue is that the body contains <h2>Test message and stuff</h2><p>And this would be the lovely body</p>
. Literally. Now if I change my sendMail to this:
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>'
})
The email is formatted correctly with no tags visible. Why is this so?
What I have tried:
backticks. In my original postData which I don't know how to display here but replace the single quotes around the html with backticks. Same result. Making an html object like this:
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)
},
email body is [object Object]. Trying the same with stringify in test.js, email body is "[object Object]" I've tried to JSON.parse the string from my page and it throws an error for unexpected'<', and various other combinations of some or all these things all of which result in a string with html tags, [object Object], an empty object {}, or an error before send.
So any advice would be super.
javascript express nuxt.js nodemailer
javascript express nuxt.js nodemailer
asked Nov 19 at 8:24
Andrew1325
21328
21328
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53370787%2fhtml-sent-to-nodemailer-appears-in-email-as-a-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown