Email functionality is essential in modern web applications. Whether you're sending confirmation emails, password resets, or notifications, Node.js with Nodemailer makes this simple. In this blog, we'll walk through setting up email sending using Node.js, Express, and Ethereal Email for testing.
๐งพ Prerequisites
- Node.js installed
- Basic knowledge of Express.js
- Internet connection
๐ Project Structure
project-folder/ ├── index.js ├── .env ├── package.json └── app/ └── controller/ └── emailSendController.js
๐ฆ Step 1: Install Dependencies
npm init -y
npm install express nodemailer dotenv
npm install --save-dev nodemon
๐ Configure nodemon (Optional but Recommended)
Update your package.json
with a custom start script:
"scripts": {
"start": "nodemon index.js"
}
๐ Step 2: Create a .env File
Create a .env
file at the root of your project to store sensitive info:
EMAIL_USER=mina.kshlerin89@ethereal.email
EMAIL_PASS=abffrpynHPC8RGarFW
PORT=3000
๐จ Step 3: Build the Mail Controller
Create app/controller/emailSendController.js
:
const nodemailer = require("nodemailer");
require('dotenv').config();
const sendMail = async (req, res) => {
try {
let transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS
}
});
let info = await transporter.sendMail({
from: `"Rana Saha ๐ป" <${process.env.EMAIL_USER}>`,
to: "abcd@gmail.com, xyz@gmail.com",
subject: "Node.js Email Test",
text: "Hello! This is a test email.",
html: "<b>This is a test email from a Node.js tutorial</b>"
});
console.log("Message sent: %s", info.messageId);
res.status(200).json({
success: true,
message: "Email sent successfully",
messageId: info.messageId,
previewURL: nodemailer.getTestMessageUrl(info)
});
} catch (error) {
console.error("Error sending email:", error);
res.status(500).json({ success: false, message: "Failed to send email", error });
}
};
module.exports = sendMail;
⚙️ Step 4: Create the Express Server
Create index.js
:
const express = require("express");
const app = express();
require('dotenv').config();
const sendMail = require('./app/controller/emailSendController');
app.get("/", (req, res) => {
res.send("Email Sending using Node.js");
});
app.get("/send-email", sendMail);
const PORT = process.env.PORT || 3000;
const Start = async () => {
try {
app.listen(PORT, () => {
console.log(`๐ Server is running on http://localhost:${PORT}`);
});
} catch (err) {
console.error("Error starting server:", err);
}
};
Start();
๐จ๐ป Step 5: Run the Server
To start the server with nodemon:
npm start
Now visit http://localhost:3000/send-email
to send a test email. If using Ethereal, you'll get a preview URL in the JSON response to view the fake email.
๐ GitHub Source Code
You can find the full working code in this GitHub repository:
https://github.com/RanaGithub30/Node-Email-Send
✅ Final Notes
- Use Ethereal for testing only. For production, use Gmail, Mailgun, SendGrid, etc.
- Keep your credentials secure using
.env
files and never commit them to version control. - For sending attachments or templated emails, you can expand this controller further.
๐ That's It!
You now have a fully functional Node.js email sending setup. Happy coding!
Comments
Post a Comment