> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lekalao.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> A campaign that will not leave, e-mails in spam, a failed import, a webhook that never comes, a transactional e-mail stuck in pending, an address that receives nothing any more.

Each problem starts with its most frequent cause. The link at the end of each answer goes to the page that settles it.

## A campaign will not leave

The **Delivery** tab lists what blocks it, each line with the link that settles it.

| You see | Most often |
| - | - |
| "Configure a mailer in the settings." / "Send a test e-mail from the mailer settings first." | No mailer, or one that never passed its test: **Settings → Mailers**, then **Send a test e-mail**. See [Mailers](https://docs.lekalao.com/deliverability/mailers.md#testing). |
| "Add a visible unsubscribe link to the content…" / "Add your postal address to the content…" | The footer was deleted from the content: **Add the footer** writes it back. |
| "Set the postal address of your organisation in the general settings." | **Settings → General**, under Organisation. See [General settings](https://docs.lekalao.com/account/maintenance.md#organisation). |
| "This campaign has no recipient." | The list or the segment is empty, or everybody in it has unsubscribed. |
| "… is not one of your sending domains." / "… is not verified yet." | The sender's domain is missing or its records are not found yet. See [Sending domains](https://docs.lekalao.com/deliverability/domains.md). |
| "Sending is paused: this team has no valid subscription." / "This campaign needs … e-mails and only … are left this month." | The plan. See [Billing](https://docs.lekalao.com/account/billing.md). |
| "This team asks for a second pair of eyes…" | Another member has to approve it. See [A second pair of eyes](https://docs.lekalao.com/campaigns/sending.md#a-second-pair-of-eyes). |
| **Send now** greyed out | Your role is **Writer**: an **Owner** or an **Editor** sends. See [Who may send](https://docs.lekalao.com/campaigns/sending.md#who-may-send). |

The whole list, with what each line asks, is in [Ready or not](https://docs.lekalao.com/campaigns/sending.md#ready-or-not). Through the API, the same lines come back in `problems`, with a `422`.

A campaign that stopped in the middle, with a reason in red, **paused itself**: too many bounces or complaints. Read [Paused on its own](https://docs.lekalao.com/campaigns/sending.md#paused-on-its-own) before you start it again.

## E-mails land in spam

Filters judge who you are, what you send, and to whom. In that order:

1. **Who you are.** SPF, DKIM and DMARC published and found for the domain of the sender. **Deliverability** shows each record's state. A sender on a domain without them is the first cause, by far. See [Sending domains](https://docs.lekalao.com/deliverability/domains.md).
2. **Your links.** Click tracking sends every link through Lekalao's address. A [tracking host](https://docs.lekalao.com/deliverability/domains.md#the-tracking-host) on your own domain keeps them under your name.
3. **What you send.** The check before sending names what filters punish: a subject in capitals, shortened links, a link that shows one address and goes to another. See [What a spam filter would hold against it](https://docs.lekalao.com/content/checks.md#what-a-spam-filter-would-hold-against-it).
4. **To whom.** Bounces and complaints weigh more than anything else. The rates of the last thirty days are on **Deliverability**: mailboxes react above 2 % bounces and 0.1 % complaints. Old addresses and people who stopped reading are dealt with in [List hygiene](https://docs.lekalao.com/deliverability/list-hygiene.md).
5. **A new sender.** A domain nobody knows that sends its whole list on day one looks like a spammer. See [Warming up a new sender](https://docs.lekalao.com/deliverability/mailers.md#warming-up-a-new-sender).

Give transactional e-mails a mailer of their own: a campaign that goes wrong then never drags your invoices into spam. See [A provider per kind of sending](https://docs.lekalao.com/deliverability/mailers.md#a-provider-per-kind-of-sending).

## An import failed

The list's **Imports** tab shows each import, **Failed** or **Completed** with its rows in error.

* **Refused at once**: the file has no header row ("This file has no header row."), no column holds the address ("One column must hold the e-mail address."), or it is not a CSV, TXT or XLSX file of 20 MB at most.
* **Failed** part-way: most often the plan's subscriber allowance ran out. The rows already handled stay imported. Make room or move up a plan, then import the rest. See [Billing](https://docs.lekalao.com/account/billing.md).
* **Completed**, with rows in error: each row says why. An invalid address; an address on the suppression list; someone who unsubscribed earlier ("Skipped: … unsubscribed earlier."), who comes back only when **Subscribe again people who unsubscribed** is ticked and they asked for it; a throwaway mailbox, or a domain with no mail server. See [List hygiene](https://docs.lekalao.com/deliverability/list-hygiene.md#addresses-looked-at-on-the-way-in).
* **Imported, and nothing was sent to them**: that is the default. No welcome e-mail and no automation start for imported people, unless **Welcome them as new subscribers** was ticked.

Everything an import does is in [Import and export](https://docs.lekalao.com/contacts/import-export.md).

## A webhook does not arrive

Start with **Settings → Outgoing webhooks**, and the endpoint's **Calls we made**: every call is there, with your server's answer.

* **No call at all.** The endpoint does not listen to that event; or it is limited to one list, and the event belongs to no list (transactional e-mails, their bounces and complaints); or it is **Switched off**, by hand or after 3 days of failures, in which case its owners received an e-mail. Switch **Call this endpoint** back on.
* **Calls that failed.** Your server must answer a `2xx` within 15 seconds, without a redirect: redirects are not followed. Lekalao tries each call again for about 21 hours (**Trying again**); once your server answers, the next attempt goes through. A call **Failed** after its seventh attempt is sent again only with **Send again**.
* **An address Lekalao refuses.** It must be public: `localhost` and private networks are refused. To test on your machine, go through a tunnel.
* **Calls that arrive and that your code rejects.** The signature is computed on the time of the call, a dot and the raw body, with this endpoint's own secret; a server whose clock is more than five minutes off refuses every call. See [Check the signature](https://docs.lekalao.com/developers/webhooks.md#check-the-signature).
* **The same event twice.** A retry or a **Send again** carries the same `Lekalao-Event-Id`: ignore an id you already handled.
* **No `mail.bounced` or `mail.complaint`.** They come from your provider first. If the provider does not report to Lekalao, there is nothing to pass on: **Settings → Provider feedback** lists what it received. See [Provider feedback](https://docs.lekalao.com/deliverability/feedback.md).

See [Outgoing webhooks](https://docs.lekalao.com/account/integrations.md#outgoing-webhooks) and, for the code, [Webhooks](https://docs.lekalao.com/developers/webhooks.md).

## A transactional e-mail stays pending

For a few seconds, `pending` is normal: the e-mail leaves from a queue, after the answer.

For minutes:

* **The provider fails, and Lekalao tries again**, after 5 seconds, 30 seconds, 2 minutes, 10 minutes and 30 minutes. After the sixth failure, and six hours after the call at the latest, the e-mail becomes `failed`, with the provider's last error in `failure_reason`.
* **The mailer's rate limit** holds e-mails back when many leave at once. It is set on the mailer.
* **On an installation of your own, the workers may be stopped.** **Settings → Maintenance** shows the queues and the failed jobs. On Lekalao's service, tell the support.
* **The queue lost it.** After a restore, or a Redis that restarted without its data, an e-mail may have no job left to send it. Seven hours after the call, it becomes `failed` with `failure_code: lost`. Send it again.

Once it is `failed`: read `failure_code` and `failure_reason`, test the mailer with **Send a test e-mail**, then send the e-mail again, with **Send again** in the log or `POST /v1/transactional-mails/{id}/resend`. See [Then, on the queue](https://docs.lekalao.com/developers/transactional.md#then-on-the-queue).

## An address receives nothing any more

Most often it is on the **suppression list**: it bounced for good (**Hard bounce**), its owner reported an e-mail as spam (**Spam complaint**), or somebody blocked it (**Added manually**). Look it up in **Contacts → Suppression list**.

* Nothing is sent to it any more: no campaign, no automation, no confirmation, and no transactional e-mail either. A transactional e-mail leaves it out of its recipients; with nobody left in `to`, the call answers `422` `recipients_suppressed` and `failure_reason` names it.
* Through the API, subscribing it again answers `422` `address_suppressed` ("This address is blocked."), and a batch marks its line `failed`.
* A hard bounce or a complaint also unsubscribed the person from every list.

Take it off only when the person asks you to, with the bin on its row: an address that bounced will bounce again, and someone who complained will complain again. See [Suppression list](https://docs.lekalao.com/contacts/suppression-list.md) and [Provider feedback](https://docs.lekalao.com/deliverability/feedback.md).

## Still stuck

* Every error code of the API, and when to try again: [Errors](https://docs.lekalao.com/errors.md).
* What changed lately: [Changelog](https://docs.lekalao.com/help/changelog.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.