# Sending replies (outbound email)

> EmailConnect receives email but does not send it. How to reply to the emails you receive, threaded, with an EU sender such as Scaleway Transactional Email

Source: https://emailconnect.eu/help/sending-replies/

EmailConnect is inbound only: it receives email and delivers it to your webhook as JSON. It does not send email on your behalf, and that is a deliberate choice rather than a missing feature. Sending well is its own job (IP reputation, bounces, complaints), and a dedicated sender does it better.

To reply to the emails you receive, pair EmailConnect with a transactional email provider. We recommend **Scaleway Transactional Email (TEM)**: a French, EU-hosted sender. Any sender that lets you set custom headers works the same way.

**Full walkthrough:** [Reply to inbound email with Scaleway Transactional Email](https://emailconnect.eu/learn/guides/reply-with-scaleway-tem/) — domain layout, DNS records, code for sending and matching replies.

## What you need from EmailConnect

Every webhook payload carries the fields a threaded reply needs, on every plan, even when "Include envelope" is off:

- `envelope.messageId` — the Message-ID of the email you received. Put it in the `In-Reply-To` header of your reply.
- `envelope.references` — the conversation so far. Send it, plus the `messageId`, as the `References` header.
- `envelope.inReplyTo` — set when the customer replies to you, so you can match the reply to your conversation.

Store the Message-IDs of each conversation in your own app, including the ones of the replies you send: EmailConnect keeps an email only for your [retention window](https://emailconnect.eu/help/data-retention/).

## Tag your reply address

Set a `Reply-To` with a plus tag naming the conversation, for example `support+c_4821@in.yourdomain.com`. When the customer replies, the tag arrives as `message.recipient.tag`, so you know the thread without parsing headers. Tags are free-form, so check that the conversation exists and belongs to the sender. See [plus addressing](https://emailconnect.eu/help/webhook-payload-reference/).

## Don't lose replies to a blackhole MX

Scaleway's TEM setup recommends an MX record on your sending domain and, if you have no mail server, suggests its blackhole MX (`blackhole.tem.scaleway.com`). Mail sent there is lost. Your sending domain already has an MX — your mailbox provider, or EmailConnect if you send from your `in.` subdomain — so keep it as it is.

## Common questions

**Can EmailConnect send the reply for me?** No. Your app sends replies through your own sender account, from your own domain.

**Which sender should I use?** Any sender that lets you set `In-Reply-To`, `References` and `Reply-To` on what you send. Already sending your app's transactional mail somewhere? Use the same sender for replies if it supports these. Senders whose APIs accept them:

- **Scaleway Transactional Email** (France): any header as a key-value pair in `additional_headers`, `Reply-To` included. Our [guide](https://emailconnect.eu/learn/guides/reply-with-scaleway-tem/) uses it.
- **Lettermint** (Netherlands): custom headers through `headers`, a `reply_to` field, and an option to keep a Message-ID you set yourself.
- **AhaSend** (Netherlands): a conversational-message endpoint meant for reply-style mail, with custom headers through `headers` and a `reply_to` field. It always generates the Message-ID itself and returns it in the response, so store that one.

Check before you choose: some APIs accept only non-standard (`X-`) headers, Brevo's for example, which rules out `In-Reply-To` and `References` there. Sending over SMTP instead of an API usually avoids this, because you build the whole message yourself.

**Will replies show up in the same thread?** Yes, when `In-Reply-To`, `References` and a `Re:` subject are set. Send a test reply to a Gmail or Outlook address and check the original message before going live.

## Related

- [Reply to inbound email with Scaleway Transactional Email](https://emailconnect.eu/learn/guides/reply-with-scaleway-tem/) — the full guide
- [Using subdomains for email processing](https://emailconnect.eu/help/subdomain-strategy/) — receive on `in.yourdomain.com`
- [What's in your webhook payload](https://emailconnect.eu/help/webhook-payload-reference/) — every field, including the threading fields
- [Webhook signing](https://emailconnect.eu/help/webhook-signing/) — verify a delivery before your app replies to it
