Skip to main content
Inbound enables you to receive emails with Resend. This guide demonstrates how to forward received emails using NextJS, although you can use any framework you prefer.
1

Verify a domain with Inbound

Verify a domain and enable receiving emails for that domain. We strongly recommend verifying a subdomain (subdomain.example.com) instead of the root domain (example.com).Verify a domain with InboundAdd the records in your DNS provider and wait for verification to finish in Resend. Learn more about adding Domains in Resend.
When you enable Inbound on a domain, Resend receives all emails sent to that specific domain depending on the priority of the MX record. For this reason, we strongly recommend verifying a subdomain (subdomain.example.com) instead of the root domain (example.com). Learn more about avoiding conflicts with your existing MX records.
2

Create a POST route

Resend can send a webhook to your application’s endpoint every time you receive an email.Add a new POST route to your application’s endpoint.
app/api/inbound-webhook/route.ts
3

Create a webhook in Resend

Go to the Webhooks page and click Add Webhook.
  1. Add your publicly accessible HTTPS URL.
  2. Select all events you want to observe (e.g., email.received).
  3. Click Add.
Create a webhook in Resend
For development, you can create a tunnel to your localhost server using a tool like ngrok or VS Code Port Forwarding. These tools serve your local dev environment at a public URL you can use to test your local webhook endpoint.Example: https://example123.ngrok.io/api/webhook
4

Add Resend to your project

Add the Resend Node.js SDK to your project using your preferred package manager.
Create an API key with “Full access” permission in Resend and add it to your project’s .env file.
.env
5

Verify the webhook request

Webhook signing secrets are used to validate the payload data sent to your application from Resend.Update your POST route to verify the webhook request using the webhook secret. First, copy the webhook secret from the webhook details page.Webhook SecretThen, add it to your project’s .env file.
.env
Update the POST route to verify the webhook request using the webhook secret.
Make sure that you’re using the raw request body when verifying webhooks. The cryptographic signature is sensitive to even the slightest change. Some frameworks parse the request as JSON and then stringify it, and this will also break the signature verification.
app/api/inbound-webhook/route.ts
6

Process incoming emails

Once you verify the webhook, it returns the webhook payload as a JSON object. You can use this payload to forward the email to another email address. Note the following steps:
  1. Add a guard clause to ensure the event type is email.received.
  2. Get the incoming email’s content
  3. Download and encode any attachments
  4. Forward the email (remember to update the from and to addresses below)
Webhooks do not include the email body, headers, or attachments, only their metadata. You must call the Received emails API or the Attachments API to retrieve them. This design choice supports large attachments in serverless environments that have limited request body sizes.
app/api/inbound-webhook/route.ts
7

Test the endpoint

You can test the endpoint by sending an email to the domain you verified.For example, if you verified marketing.example.com, send an email to test@marketing.example.com.
  • Try a simple HTML email with a subject and a body.
  • Try an email with an attachment or multiple attachments.
You can view the received email in the Emails page and see the webhook payload in the Webhooks page.
8

Go to Production

Once you’ve tested the endpoint:
  1. Publish your application to your production environment.
  2. Add your production POST endpoint as a new webhook in Resend.