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.










share|improve this question


























    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.










    share|improve this question
























      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.










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 19 at 8:24









      Andrew1325

      21328




      21328





























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          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






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Costa Masnaga

          Fotorealismo

          Sidney Franklin