Bounce and complaint feedback
Connect your email provider's webhook so SendLit stops mailing addresses that bounce or complain.
Your email provider learns when a message bounces or a recipient marks it as spam. Connect its webhook to SendLit and SendLit adds those addresses to your suppression list, so it stops mailing them before they hurt your sender reputation.
SendLit suppresses an address after:
- a hard bounce (the mailbox doesn't exist or permanently refuses mail);
- a spam complaint;
- the provider's own suppression of the address;
- three soft bounces in a row on separate messages within 30 days. A delivered message resets the count.
Each ESP has its own webhook URL and secret. Changing the team's default ESP doesn't affect them.
Open the delivery feedback settings
- Team ESPs: go to Settings → Email service providers (ESP) and click the envelope button, Delivery feedback (bounces & complaints), on the ESP's row.
- Shared mailboxes: go to Organizations → Shared mailboxes and click Configure delivery feedback on the mailbox's row.
The button only appears for providers SendLit can read feedback from: Resend, Postmark, SendGrid, Mailgun and Amazon SES. Custom SMTP servers don't report bounces this way.
The dialog shows the webhook URL only after you save a secret. Resend and SendGrid create their secret after you register the URL, so for them save any temporary value first, register the URL with the provider, and then use Rotate secret to replace it with the real one.
Resend
- In SendLit, open the ESP's delivery feedback settings, enter a temporary
value such as
pending, and save. Copy the Webhook URL. - In Resend, open Webhooks and add an endpoint with that URL.
- Select these events:
email.bounced,email.complained,email.suppressedandemail.delivered. SendLit also recordsemail.delivery_delayedandemail.failed, but they don't suppress anyone. - Open the new endpoint in Resend and copy its signing secret. It starts
with
whsec_. - Back in SendLit, paste it into webhook signing secret and click Rotate secret.
SendLit checks the Svix signature Resend sends with every event.
Postmark
Postmark doesn't sign its webhooks, so you choose a shared secret and give it to both sides.
- Create a long random value, for example with
openssl rand -hex 32. - In SendLit, open the ESP's delivery feedback settings, paste the value into webhook secret, and save. Copy the Webhook URL.
- In Postmark, open the message stream you send from and add a webhook with that URL.
- Give Postmark the secret in one of two ways:
- a custom header named
X-SendLit-Webhook-Secretwhose value is the secret; or - HTTP Basic authentication with any username and the secret as the password.
- a custom header named
- Enable the Bounce, Spam complaint and Delivery events. Don't include message content.
Never put the secret in the URL's query string.
SendGrid
- In SendLit, open the ESP's delivery feedback settings, enter a temporary
value such as
pending, and save. Copy the Webhook URL. - In SendGrid, go to Settings → Mail Settings → Event Webhook and create a webhook that posts to that URL.
- Select the Bounced, Spam reports, Delivered, Deferred and Dropped events. Only bounces and spam reports suppress addresses.
- Turn on Signed Event Webhook (signature verification) and copy the verification key. It's a base64 public key.
- Back in SendLit, paste it into verification key and click Rotate secret.
SendLit rejects events whose signature doesn't match, so Signed Event Webhook has to stay on.
Mailgun
- In Mailgun, open Sending → Webhooks and copy the HTTP webhook signing key.
- In SendLit, open the ESP's delivery feedback settings, paste the key into HTTP webhook signing key, and save. Copy the Webhook URL.
- Back in Mailgun, choose the sending domain and add the URL for the Permanent failure, Temporary failure, Spam complaint and Delivered events.
SendLit checks each event's signature and rejects events whose timestamp is more than five minutes off, so the clock on a self-hosted server must be correct.
Amazon SES
SES publishes bounces and complaints to an Amazon SNS topic instead of calling a webhook. Instead of a secret, you enter the topic's ARN. Follow Amazon SES bounces and complaints for the full setup.
Check that it works
Test only checks that SendLit can read the secret you saved. It doesn't contact the provider, so it can't tell whether the provider has the right secret.
To confirm the connection, send a message through the ESP, or trigger a test event from the provider, then reopen the delivery feedback settings:
- Healthy with a recent Last event means events arrive and their signature checks out.
- Waiting for first event means nothing has arrived yet. Check the webhook URL and the selected events at the provider.
- Error with
invalid_signaturemeans events arrive but the secret or key doesn't match. Copy it again from the provider and click Rotate secret.
Rotating a secret
Paste the new value and click Rotate secret. SendLit accepts the previous value for 24 hours, so events already in flight aren't rejected while you update the provider.