nextjs-14-mail-form

Next.js contact form with Server Actions, Nodemailer, React Hook Form, Zod, Tailwind CSS, reCAPTCHA, Handlebars with TypeScript

Stars
4
Committers
1

Next.js 14 Contact Form with Server Actions, Nodemailer, React Hook Form, Zod, Tailwind CSS, reCAPTCHA, and TypeScript

This is a template for a contact form with Next.js. It uses a custom server to send the email and validate the form. It also uses reCAPTCHA to prevent spam. Handlebars is used to create the email template.

For pages router visit https://github.com/ozcancelik/nextjs-mail-form repository.

Demo

https://nextjs-14-mail-form-ozcancelik.vercel.app/

Features

How to use

### Prerequisites

  • Clone the repository and install the dependencies.
  • Create a .env file or change the name of .env.example to .env and fill the variables.
SERVER_PORT=
CONTACT_FORM_SEND_EMAIL=
CONTACT_FORM_RECEIVE_EMAIL=
CONTACT_FORM_PASS=
CONTACT_FORM_HOST=
NEXT_PUBLIC_RECAPTCHA_SITE_KEY=
RECAPTCHA_SECRET_KEY=

Install dependencies

npm install
# or
yarn

### Run the development server:

npm run dev
# or
yarn dev

### Build the app

npm run build
# or
yarn build

### Run the production server:

npm run start
# or
yarn start

Notes

  • You can change the server port in .env file. If empty, it will use the default port 3000.
  • If you have problems with Nodemailer, you can try to change the port or other settings. You can find more info in the Nodemailer documentation. More info: https://nodemailer.com/smtp/
  • Gmail requires you to enable "Less secure app access" in your account settings. More info: https://nodemailer.com/usage/using-gmail/
  • For the reCAPTCHA to work, you need to add the domain to the reCAPTCHA admin panel.

Tested with Node.js v18.12.1.

Using Server Actions

Server Actions is a new feature introduced in Next.js 13 that allows you to handle form submissions on the server-side without the need for a separate API route or server.

You can find the server actions in the @/app/actions file. The sendContactForm function is used to send the email.