Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 21, 2022 11:34 pm GMT

Sending Custom emails with NodeJS from scratch and for no cost whatsoever

In this tutorial, I'm going to show you how you can send custom emails with just NodeJS, two sweet npm packages, and a single email address.

The best part? No email hosting is required, you can do this for no cost at all, and all in under 50 lines of code!

Let's get started!

In this example, I'll be using gmail to get an email. You may do this anywhere else, but I would prefer google due to how easy it is to get an alternate email account.

After signing up for google, go to https://myaccount.google.com/, go to the Security section and scroll to the Signing in to Google section.

Signing into Google

To be able to send emails, you'll need an app password from your google account. You can obtain this after setting up two-step verification. If you are not using google, use the password for that email account and keep it somewhere safe since we'll need it again.

Click on App Passwords

After turning on two-step verification, click on App Passwords and create a new one for Mail. As for the device, click on Other (custom name) and name it anything you want.

Setting up the password

After that, copy the 16-digit app password, save it, and we're ready to start getting into the code.

First, install two packages from npm - nodemailer and nodemailer-juice

const nodemailer = require('nodemailer');const inLineCss = require('nodemailer-juice');

Why do we need nodemailer-juice? Emails typically only accept inline styles and not any styling from CSS. If you don't want to sweat your brain to pieces, it's a good option to use nodemailer juice - it automatically converts css within <style></style> tags into inline CSS for you.

Now for the emailing function. I've already made it, so all you have to do is call it to send an email.

function sendEmail(to, subject, message) {  let transporter = nodemailer.createTransport({    service: 'gmail', //change if not using gmail    host: 'smtp.gmail.com', // also change if not using gmail    port: 465,    secure: true,    auth: {      user: "<[email protected]>",      pass: "<your-app-password>"    }  });  transporter.use('compile', inLineCss()); //makes your email nice and full of css  let mailDetails = {    from: "<[email protected]>",    to: to,    subject: subject,    html: message,  };  transporter.sendMail(mailDetails, function (err, data) {    if (err) console.error(err)  });}

For the sendEmail function, you will have to pass in an html document for the parameter message. Just to let you know, hover states, css listeners, and literally anything that won't run in inline styles will not run.

Unfortunately, I'm too lazy to write an entire document here for you. I do have a template email at https://replit.com/@IroncladDev/Noseletter in case you wanted to use it.

To make things a bit easier, I would store the html document in a function (as a template string) and have some parameters in which I could pass title, body, and some other options.

const emailTemplate = (title, body) => `<!DOCTYPE html><html lang="en">  <head>    ...    <style>      ...    </style>  </head>  <body>    <h1>${title}</h1>    <p>${body}</p>  </body></html>`;

To pass the email template function into the sendEmail function, simply do like so:

sendEmail("[email protected]", "Email Title", emailTemplate("Email Title", "This is the body of the email"));

That, my friend, is all it takes to send emails in NodeJS.

Liked this post?
Don't forget to subscribe to my newsletter (located on my website footer) for new posts, new projects, recaps, and more!

Join my discord to get in touch and hang out!

Also, be sure to support this post with a couple reactions!


Original Link: https://dev.to/ironcladdev/sending-custom-emails-with-nodejs-from-scratch-and-for-no-cost-whatsoever-1i2n

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To