This task can be performed using Inbound
The easiest way to send & receive emails via code.
Best product for this task
Inbound
cloud
Inbound makes it possible to send transactional & marketing emails, + receive and process the emails via webhooks, and use simple-to-use SDKs.

If your application needs to send a confirmation and handle the user's reply, you can use one unified email API instead of stitching together separate services. This guide shows how to send email via API, route replies to a webhook, and verify the complete flow with Inbound.
Choose the unified approach
A support-ticket application is a useful example. When a user submits a ticket, the application sends a confirmation email. If the user replies, the application receives the message, extracts the content, and attaches it to the ticket. The deciding factor among cloud products is whether they support this exact workflow.
Before building, confirm that your provider supports:
- Outbound transactional email
- Optional marketing email use cases
- Inbound addresses or routing
- Webhook delivery for incoming messages
- SDKs or straightforward HTTP requests
- Authentication and event verification
A separate transactional email API and inbound mailbox can work, but they create more configuration and more failure points. A send and receive email API keeps the application flow in one place. Inbound is designed for sending and processing email through code, including SDK-based workflows. You can also compare related email products when selecting an implementation.

Step 1: Configure sending and receiving
Create an Inbound project and obtain the API credentials for your application. Keep the secret key on your server, never in browser code.
Then configure two addresses:
- A verified sender address for outbound messages.
- An inbound address that users can reply to.
Your application also needs a public webhook endpoint, such as:
POST https://app.example.com/webhooks/inbound-email
Use HTTPS and store the webhook secret in an environment variable. If you are comparing implementation options, webhooks products can help you evaluate tools built around event delivery.
Step 2: Send the confirmation
After a ticket is created, call the API from your server. The exact SDK method depends on your setup, but the request should contain a recipient, sender, subject, and message body:
await emailApi.send({
from: "[email protected]",
to: ticket.customerEmail,
subject: `Ticket ${ticket.id} received`,
text: `We received your request. Reply to this email to add information.`,
headers: {
"Reply-To": `tickets+${ticket.id}@inbound.example`
}
});
Store the provider message ID with the ticket. That ID helps you trace delivery and correlate later events. For a TypeScript implementation, TypeScript products may be useful when choosing compatible tooling.
Keep marketing messages separate from operational confirmations. A marketing email API may require different consent, templates, or unsubscribe handling. Do not add promotional content to a necessary service email unless your requirements allow it.
Step 3: Receive and process the reply
When the customer replies, the incoming email webhook API sends an event to your endpoint. Your handler should:
- Verify the webhook signature.
- Confirm the event type.
- Read the sender, recipients, subject, text, HTML, and attachments.
- Extract the ticket ID from the inbound address or message metadata.
- Save the reply to the correct ticket.
- Return a successful response quickly.
Conceptually:
app.post("/webhooks/inbound-email", async (req, res) => {
verifySignature(req);
const email = req.body;
const ticketId = extractTicketId(email.to);
await tickets.addReply(ticketId, {
from: email.from,
subject: email.subject,
text: email.text
});
res.sendStatus(200);
});
This is the core of processing incoming email programmatically. If your app handles attachments, store them separately and validate file types before processing. For SDK-based development, review available sdk products if you want a simpler client layer.
Step 4: Test and fix common mistakes
Run a real test:
- Create a ticket with a test address.
- Confirm the outbound message arrives.
- Reply from the test mailbox.
- Check that the webhook receives the event.
- Verify the reply appears on the correct ticket.
- Send the same webhook twice and confirm your handler does not duplicate the reply.
