<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ndegwa Vivian</title>
    <description>The latest articles on DEV Community by Ndegwa Vivian (@ndegwa_vivian_3593fac3daa).</description>
    <link>https://dev.to/ndegwa_vivian_3593fac3daa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2315490%2F6333d38f-b750-40b5-a665-f47abe7e0a02.jpg</url>
      <title>DEV Community: Ndegwa Vivian</title>
      <link>https://dev.to/ndegwa_vivian_3593fac3daa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ndegwa_vivian_3593fac3daa"/>
    <language>en</language>
    <item>
      <title>Connecting Nodemailer to your NextJs Project.</title>
      <dc:creator>Ndegwa Vivian</dc:creator>
      <pubDate>Thu, 05 Mar 2026 11:59:43 +0000</pubDate>
      <link>https://dev.to/ndegwa_vivian_3593fac3daa/connecting-nodemailer-to-your-nextjs-project-39e2</link>
      <guid>https://dev.to/ndegwa_vivian_3593fac3daa/connecting-nodemailer-to-your-nextjs-project-39e2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Imagine this...&lt;/strong&gt;&lt;br&gt;
You have built a beautiful website or portfolio using NextJs,&lt;br&gt;
Your contact form looks perfect,&lt;br&gt;
The end-users can interact with the form, they can enter their names, emails and the message...&lt;/p&gt;

&lt;p&gt;But when they click "Submit", nothing happens.&lt;br&gt;
There's no email, no notification and definitely no way for you to receive the message. &lt;/p&gt;

&lt;p&gt;In this article, I will show you how to connect Nodemailer to your NextJs contact form so that you can start receiving real emails directly from your website. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we will build&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A working contact form that will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Send email directly to your inbox.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses Nodemailer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses a secure API route in Next.js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handles success and error responses.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Basic knowledge of React or Next.js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A next.js project set-up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node.js installed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Gmail account or SMTP Provider.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Setting up a Next.js project.
&lt;/h2&gt;

&lt;p&gt;On the terminal, run the following command to create a new Next.js project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you run the command, you will get a prompt to add the name of your project. &lt;br&gt;
I named mine &lt;em&gt;nodemailer-tutorial.&lt;/em&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8l27b3hi3sqn7fj214r.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8l27b3hi3sqn7fj214r.JPG" alt="Project Initialization" width="710" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can choose to proceed with the recommended defaults or customize the settings for your project. &lt;br&gt;
Once you are done with the settings, navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/page.js 
app/layout.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clear the page.js file and edit the layout.js to add the title and description of your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the necessary dependencies.
&lt;/h2&gt;

&lt;p&gt;For this project, I am using React icons and nodemailer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nodemailer&lt;/strong&gt; is a Node.js module that allows you to send emails from your backend.&lt;br&gt;
Use the following command to install nodemailer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install nodemailer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;React-icons&lt;/strong&gt; is a popular Javascript library that provides an easy way to incorporate icons from various icon sets into your React applications. &lt;br&gt;
Use the following command to install React-icons:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install react-icons --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create an API Route in Next.js
&lt;/h2&gt;

&lt;p&gt;For security reasons, we don't send emails directly from the front-end, we instead create an API route that handles the email logic from the server side. &lt;/p&gt;

&lt;p&gt;The following is the file structure for creating an API route in Next.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/api/contact/route.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqp71qx5s1gnp4xygb6yy.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqp71qx5s1gnp4xygb6yy.JPG" alt="route.js Directory" width="216" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;route.js code&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import nodemailer from "nodemailer";
import { NextResponse } from "next/server";

export async function POST(request) {
  try {
    const { name, email, message } = await request.json();

   if (!name || !email || !message) {
      return NextResponse.json(
        { message: "All fields are required" },
        { status: 400 }
      );
    }

    const transporter = nodemailer.createTransport({
      host: "smtp.gmail.com",
      port: 587,
      secure: false,
      auth: {
        user: process.env.GMAIL_USERNAME,
        pass: process.env.GMAIL_PASSWORD,
      },
    });

    await transporter.sendMail({
      from: process.env.GMAIL_USERNAME,
      to: process.env.GMAIL_USERNAME,
      subject: `New message from ${name}`,
      text: message,
      replyTo: email,
    });

    return Response.json(
      { message: "Email sent successfully" },
      { status: 200 }
    );

  } catch (error) {
    console.error(error);
    return Response.json(
      { message: "Failed to send email" },
      { status: 500 }
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Receives form data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checks that all fields are filled. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logs into Gmail securely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send's you an email with the User's message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Returns a success or error response. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configure Nodemailer Transporter.
&lt;/h2&gt;

&lt;p&gt;The transporter is what connects our application, in this case, the contact form to an email service like Gmail and allows us to send emails. &lt;/p&gt;

&lt;p&gt;On the root directory, create a &lt;code&gt;.env.local&lt;/code&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should look something like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bv4pa0cibft436hw3gw.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bv4pa0cibft436hw3gw.JPG" alt=".env.local directory" width="210" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your code should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GMAIL_USERNAME=your-email@gmail.com
GMAIL_PASSWORD=your-app-password
GMAIL_TO=your-email@gmail.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensure that there are no spaces and that your gmail account has Two-step verification enabled. (This is necessary, I will explain the reason in the following step.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure that you add the correct credentials in the &lt;code&gt;.env.local&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens is that, the transporter will connect our application to Gmail's SMTP (Simple Mail Transfer Protocol). Nodemailer will then used that connection such that the Gmail is delivered to your inbox. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is as a result of the configuration we made on our route.js code:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const transporter = nodemailer.createTransport({
      host: "smtp.gmail.com",
      port: 587,
      secure: false,
      auth: {
        user: process.env.GMAIL_USERNAME,
        pass: process.env.GMAIL_PASSWORD,
      },
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The environment variable names in your &lt;code&gt;.env.local&lt;/code&gt; file must match exactly what you use in your &lt;code&gt;route.js&lt;/code&gt; file. If you reference &lt;code&gt;process.env.GMAIL_USERNAME&lt;/code&gt; in your code, then your &lt;code&gt;.env.local&lt;/code&gt; file must define &lt;code&gt;GMAIL_USERNAME&lt;/code&gt; as well. &lt;/p&gt;

&lt;h2&gt;
  
  
  Create an APP Password for your Gmail Account.
&lt;/h2&gt;

&lt;p&gt;Gmail allows you to create app passwords for your applications, provided you have enabled Two-Step verification for your account. &lt;/p&gt;

&lt;p&gt;This app password is essential as it will be the one you will add on your &lt;code&gt;.env.local&lt;/code&gt; file as the gmail password. (&lt;em&gt;You are not supposed to add your literal gmail password.&lt;/em&gt;)&lt;br&gt;
Under the security tab, open the App passwords option to create one:&lt;/p&gt;

&lt;p&gt;It should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvez2ica79q4uxp7cxa3.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvez2ica79q4uxp7cxa3.JPG" alt="App Password" width="598" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google will give you a 16 letter password which you will use in the &lt;code&gt;.env.local&lt;/code&gt; file.&lt;br&gt;
&lt;strong&gt;Note:&lt;/strong&gt; When entering the password in your &lt;code&gt;.env.local&lt;/code&gt; file, &lt;strong&gt;DO NOT&lt;/strong&gt; leave any whitespaces. &lt;/p&gt;
&lt;h2&gt;
  
  
  Connect the Front-end Contact Form
&lt;/h2&gt;

&lt;p&gt;So far, our backend knows how to send emails and we our front-end collects the user information through the Contact Me Form. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;contact.jsx&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client";

import { FaPaperPlane } from "react-icons/fa";
import { FaPhone } from "react-icons/fa6";

export default function Contact (){

    const handleSubmit = async (event) =&amp;gt; {
        event.preventDefault ();
        const formData = new FormData (event.target);
        const data = Object.fromEntries(formData);

        try{
            const response = await fetch('/api/contact', {
                 method: 'POST',
                headers: { 'Content-Type': 'application/json'},
                body: JSON.stringify(data),
            });
            if (response.ok){
                alert('Email sent successfully!');
            } else{
                alert('Failed to send email.');
            }
        } catch (error){
            console.error('Error:', error);
        }
    };


    return(
        &amp;lt;section
            className="pt-20 pb-10"
            id="contact"
        &amp;gt;
            &amp;lt;div className="max-w-7xl mx-auto px-5 md:px-20"&amp;gt;
               &amp;lt;h2 className="text-4xl md:text-5xl font-bold text-center text-[var(--text-color)]"&amp;gt;
                    CONTACT ME
                &amp;lt;/h2&amp;gt;
                &amp;lt;div className="pt-20 flex flex-col md:flex-row gap-8"&amp;gt;
                    &amp;lt;div className="flex-1"&amp;gt;
                        &amp;lt;div className="space-y-6"&amp;gt;
                            &amp;lt;p className=" flex gap-5 text-lg md:text-xl font-bold text-[var(--text-color)]"&amp;gt;
                               &amp;lt;FaPaperPlane /&amp;gt;
                                test@gmail.com
                            &amp;lt;/p&amp;gt;
                            &amp;lt;p className="flex gap-5 text-lg md:text-xl font-bold text-[var(--text-color)]"&amp;gt;
                                &amp;lt;FaPhone /&amp;gt;
                                0712345678
                            &amp;lt;/p&amp;gt;
                        &amp;lt;/div&amp;gt;
                        &amp;lt;div className=" pt-10 flex-1"&amp;gt;
                            &amp;lt;form onSubmit={handleSubmit}
                                className="space-y-4 mb-8"
                                id="contact-form"
                            &amp;gt;
                                &amp;lt;input
                                    type="text"
                                    name="name"
                                    placeholder="Enter your name"
                                    required
                                    className="w-full border-0 outline-none bg-[var(--snd-bg-color)] px-4 py-4 text-[var(--text-color)] text-lg rounded-[6px]"
                                /&amp;gt; 
                                &amp;lt;input
                                    type="email"
                                    name="email"
                                    placeholder="Enter your email"
                                    required
                                    className="w-full border-0 outline-none bg-[var(--snd-bg-color)] px-4 py-4 text-[var(--text-color)] text-lg rounded-[6px]"
                                /&amp;gt;
                                &amp;lt;textarea
                                    name="message"
                                    rows="6"
                                    placeholder="Add your message"
                                    className="w-full border-0 outline-none bg-[var(--snd-bg-color)] px-4 py-4 text-[var(--text-color)] text-lg rounded-[6px] resize-none"
                                &amp;gt;&amp;lt;/textarea&amp;gt;
                                &amp;lt;button
                                    type="submit"
                                    className="inline-block px-7 py-4 bg-[var(--main-color)] rounded-full shadow-lg font-semibold text-base md:text-xl text-[var(--bg-color)] tracking-wide hover:shadow-none transition"
                                &amp;gt;
                                    SUBMIT
                                &amp;lt;/button&amp;gt;
                            &amp;lt;/form&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/section&amp;gt;
    )
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to connect the two, we use the handleSubmit function. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;handleSubmit&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const handleSubmit = async (event) =&amp;gt; {
        event.preventDefault ();
        const formData = new FormData (event.target);
        const data = Object.fromEntries(formData);

        try{
            const response = await fetch('/api/contact', {
                 method: 'POST',
                headers: { 'Content-Type': 'application/json'},
                body: JSON.stringify(data),
            });
            if (response.ok){
                alert('Email sent successfully!');
            } else{
                alert('Failed to send email.');
            }
        } catch (error){
            console.error('Error:', error);
        }
    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code segment performs the following tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;By default, forms reload the page when submitted. We use the &lt;code&gt;event.preventDefault ();&lt;/code&gt; to prevent this so that the submission can be handled by &lt;code&gt;JavaScript&lt;/code&gt; instead. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;const formData = new FormData (event.target);&lt;/code&gt; &lt;code&gt;const data = Object.fromEntries(formData);&lt;/code&gt; takes all the input from the form in this case (Name, Email and Message) and converts them to JavaScript objects. This gives the data structure so that it can be sent to the backend. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A request is then sent to &lt;code&gt;api/contact&lt;/code&gt; which matches the &lt;code&gt;route.js&lt;/code&gt; we had created earlier on. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We use the &lt;strong&gt;POST&lt;/strong&gt; Method mainly because we are sending the data to the server and POST is used to submit data securely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We use &lt;code&gt;body: JSON.stringify(data),&lt;/code&gt; to stringify JSON because when sending data through &lt;code&gt;fetch&lt;/code&gt; the body must be a string. This helps the server to understand the data. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Success and Error handling
&lt;/h2&gt;

&lt;p&gt;Success and Error handling is important mainly because it is the way our backend will communicate to the user. The user will be able to know if their email was sent or not based on the notification after submitting the form details. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;code segment&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; if (response.ok){
                alert('Email sent successfully!');
            } else{
                alert('Failed to send email.');
            }
        } catch (error){
            console.error('Error:', error);
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the backend successfully sends the email, the user gets a confirmation message saying &lt;code&gt;Email sent successfully&lt;/code&gt; and if something fails they are notified by a notification saying &lt;code&gt;Failed to send email.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The following images show the different outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the instance the email is not sent, you will receive the following error message:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02dxsm07yyc6zn4mdq0v.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02dxsm07yyc6zn4mdq0v.JPG" alt="Error Message" width="604" height="230"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the instance the email is sent, you will receive the following success message:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzk9katy2vu2zttnmk3f.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzk9katy2vu2zttnmk3f.JPG" alt="Success Message" width="606" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the end of this blog, you will be able to connect Nodemailer to your Next.js project. &lt;br&gt;
&lt;strong&gt;See you on the blog!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;~CodesbyAbby&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>nodemailer</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
