[{"data":1,"prerenderedAt":13},["ShallowReactive",2],{"$fvzIgsfX6gFQZVBtMiKEXL_ajBuXphiRp8z9E7H4uCfQ":3},{"title":4,"slug":5,"excerpt":6,"category":7,"order":8,"screens":9,"html":12},"Sending replies (outbound email)","sending-replies","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","integrations",6,[10,11],"aliases","webhooks","\u003Cp>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.\u003C\u002Fp>\n\u003Cp>To reply to the emails you receive, pair EmailConnect with a transactional email provider. We recommend \u003Cstrong>Scaleway Transactional Email (TEM)\u003C\u002Fstrong>: a French, EU-hosted sender. Any sender that lets you set custom headers works the same way.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Full walkthrough:\u003C\u002Fstrong> \u003Ca href=\"\u002Flearn\u002Fguides\u002Freply-with-scaleway-tem\u002F\">Reply to inbound email with Scaleway Transactional Email\u003C\u002Fa> — domain layout, DNS records, code for sending and matching replies.\u003C\u002Fp>\n\u003Ch2>What you need from EmailConnect\u003C\u002Fh2>\n\u003Cp>Every webhook payload carries the fields a threaded reply needs, on every plan, even when &quot;Include envelope&quot; is off:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>envelope.messageId\u003C\u002Fcode> — the Message-ID of the email you received. Put it in the \u003Ccode>In-Reply-To\u003C\u002Fcode> header of your reply.\u003C\u002Fli>\n\u003Cli>\u003Ccode>envelope.references\u003C\u002Fcode> — the conversation so far. Send it, plus the \u003Ccode>messageId\u003C\u002Fcode>, as the \u003Ccode>References\u003C\u002Fcode> header.\u003C\u002Fli>\n\u003Cli>\u003Ccode>envelope.inReplyTo\u003C\u002Fcode> — set when the customer replies to you, so you can match the reply to your conversation.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>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 \u003Ca href=\"\u002Fhelp\u002Fdata-retention\u002F\">retention window\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>Tag your reply address\u003C\u002Fh2>\n\u003Cp>Set a \u003Ccode>Reply-To\u003C\u002Fcode> with a plus tag naming the conversation, for example \u003Ccode>support+c_4821@in.yourdomain.com\u003C\u002Fcode>. When the customer replies, the tag arrives as \u003Ccode>message.recipient.tag\u003C\u002Fcode>, so you know the thread without parsing headers. Tags are free-form, so check that the conversation exists and belongs to the sender. See \u003Ca href=\"\u002Fhelp\u002Fwebhook-payload-reference\u002F\">plus addressing\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>Don&#39;t lose replies to a blackhole MX\u003C\u002Fh2>\n\u003Cp>Scaleway&#39;s TEM setup recommends an MX record on your sending domain and, if you have no mail server, suggests its blackhole MX (\u003Ccode>blackhole.tem.scaleway.com\u003C\u002Fcode>). Mail sent there is lost. Your sending domain already has an MX — your mailbox provider, or EmailConnect if you send from your \u003Ccode>in.\u003C\u002Fcode> subdomain — so keep it as it is.\u003C\u002Fp>\n\u003Ch2>Common questions\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Can EmailConnect send the reply for me?\u003C\u002Fstrong> No. Your app sends replies through your own sender account, from your own domain.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Which sender should I use?\u003C\u002Fstrong> Any sender that lets you set \u003Ccode>In-Reply-To\u003C\u002Fcode>, \u003Ccode>References\u003C\u002Fcode> and \u003Ccode>Reply-To\u003C\u002Fcode> on what you send. Already sending your app&#39;s transactional mail somewhere? Use the same sender for replies if it supports these. Senders whose APIs accept them:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Scaleway Transactional Email\u003C\u002Fstrong> (France): any header as a key-value pair in \u003Ccode>additional_headers\u003C\u002Fcode>, \u003Ccode>Reply-To\u003C\u002Fcode> included. Our \u003Ca href=\"\u002Flearn\u002Fguides\u002Freply-with-scaleway-tem\u002F\">guide\u003C\u002Fa> uses it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Lettermint\u003C\u002Fstrong> (Netherlands): custom headers through \u003Ccode>headers\u003C\u002Fcode>, a \u003Ccode>reply_to\u003C\u002Fcode> field, and an option to keep a Message-ID you set yourself.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>AhaSend\u003C\u002Fstrong> (Netherlands): a conversational-message endpoint meant for reply-style mail, with custom headers through \u003Ccode>headers\u003C\u002Fcode> and a \u003Ccode>reply_to\u003C\u002Fcode> field. It always generates the Message-ID itself and returns it in the response, so store that one.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Check before you choose: some APIs accept only non-standard (\u003Ccode>X-\u003C\u002Fcode>) headers, Brevo&#39;s for example, which rules out \u003Ccode>In-Reply-To\u003C\u002Fcode> and \u003Ccode>References\u003C\u002Fcode> there. Sending over SMTP instead of an API usually avoids this, because you build the whole message yourself.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Will replies show up in the same thread?\u003C\u002Fstrong> Yes, when \u003Ccode>In-Reply-To\u003C\u002Fcode>, \u003Ccode>References\u003C\u002Fcode> and a \u003Ccode>Re:\u003C\u002Fcode> subject are set. Send a test reply to a Gmail or Outlook address and check the original message before going live.\u003C\u002Fp>\n\u003Ch2>Related\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Flearn\u002Fguides\u002Freply-with-scaleway-tem\u002F\">Reply to inbound email with Scaleway Transactional Email\u003C\u002Fa> — the full guide\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fsubdomain-strategy\u002F\">Using subdomains for email processing\u003C\u002Fa> — receive on \u003Ccode>in.yourdomain.com\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fwebhook-payload-reference\u002F\">What&#39;s in your webhook payload\u003C\u002Fa> — every field, including the threading fields\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fwebhook-signing\u002F\">Webhook signing\u003C\u002Fa> — verify a delivery before your app replies to it\u003C\u002Fli>\n\u003C\u002Ful>\n",1793736537813]