# Why was my email not sent?

Source: https://help.meisa.io/articles/why-was-my-email-not-sent

Meisa skips an email on purpose when sending it would fail or hurt your sender reputation: your sender or domain is not ready, your account cannot send yet, or the contact should not get it (unsubscribed, bounced, invalid address, or over a sending limit). Find the reason, then use the fix for it below.

## Find the reason

- **One contact**: open **Contacts**, click the person and open the **Emails** tab. A failed email shows its reason in red under the subject.
- **A broadcast**: open the broadcast and scroll to **Didn't arrive**. The **Couldn't be sent** row counts who was skipped, and each person in the list below shows the reason. If the whole broadcast failed, the reason is shown at the top of its report.
- **Your app (API)**: a call to `/api/v1/emails/trigger/` that was skipped on purpose returns HTTP 200 with `"status": "skipped"` and a `reason`. Do not retry these. Setup problems return an `error` with a 4xx status instead.

![A contact's profile with the Emails tab](https://cdn.kamaan.io/kamaan/sites/6ae9f671d5ea373710b2366f/images/meisa-contact-detail-ddbe8b9b.webp)
## Your setup

| What you see | What it means | Fix |
|---|---|---|
| No sender configured | No sender is set on the email, and the product has no default sender. | [Add a sender](/articles/add-a-sender-address) and make it the default. |
| Sender has no active provider configured | The provider behind the sender is switched off or missing. | In **Email setup**, turn the provider back on or point the sender at an active one. |
| Sender is not verified | The sender's domain has not passed verification with your provider. | [Finish domain verification](/articles/domain-verification-pending). |
| Trigger not found, or trigger is inactive | Your app called a transactional email key that does not exist or is switched off. | Check the key in **Transactional emails** and turn the email on. |
| Variations still need your OK (broadcasts) | The broadcast has text variations you have not approved yet. | [Approve the variations](/articles/approve-email-variations), then send again. |

## Your account

| What you see | What it means | Fix |
|---|---|---|
| Your Meisa account needs an active trial or plan | New accounts cannot send until the 7-day free trial (card required) or a plan is active. | Start your trial or plan in **Settings**, **Plan and billing**. See [Manage your plan, card and invoices](/articles/manage-your-plan-and-billing). |
| Trial limit reached | During the free trial there is a daily and a total send limit. The daily one resets at midnight UTC. | Wait for the reset, or start your plan. |

## The contact

These are skips, not errors. Meisa protects the person and your reputation.

| Reason | What it means | Fix |
|---|---|---|
| Contact is unsubscribed, bounced or marked as spam | The person can no longer get this kind of email. Through the API, this one returns a 422 error instead of a skip. | Nothing to fix. Only receipts and security emails set to **Send even if the person unsubscribed** still reach them. |
| `category_unsubscribed` | The person opted out of this type of email (for example promotions) but still gets others. | Respect it. They can opt back in from their email preferences. |
| `hard_bounce`, `repeated_soft_bounce`, `inactive_mailbox`, `ses_account_suppression`, `no_mx` | The address is on Meisa's suppression list because it bounced, is dead, or its domain has no mail server. This applies across all your products. | Ask the person for a working address. If you are sure the address now works, email hi@meisa.io to lift it. |
| `complaint` | The person marked one of your emails as spam. This blocks the address in all your products. | Do not email them again. |
| `invalid_syntax` | The address is not a valid email address. | Fix the address on the contact. |
| `invalid_reserved` | The domain cannot receive mail (for example example.com or a `.test` domain). | Use a real address. |
| `invalid_typo` | The domain looks like a typo, such as gmial.com. | Correct the address. |
| `invalid_no_mx` | The domain has no mail server. Meisa also unsubscribes the contact. | Ask for another address. |
| `invalid_disposable` | A throwaway inbox. Blocked for marketing email only; transactional email still goes. | Ask for a permanent address if you need to market to them. |
| `soft_bounce_cooldown` | The person's mailbox bounced temporarily in the last 24 hours, so marketing-style email pauses for 24 hours. | Nothing to do. Sequence emails wait and go out after the pause. |
| `frequency_capped` | The person already got your maximum number of marketing-style emails this hour or day. | Sequence emails wait for the next free slot. Change the limit in [How the frequency cap protects your contacts](/articles/frequency-cap). |
| `conditions_not_met` | The transactional email has send conditions, and this contact did not match them. | Check the conditions on the email, or the contact's fields. |
| `held_for_course` | The person is taking an email course, and this email waits until the course ends. | Nothing to do. It is sent after the course. |

## Safety limits

| What you see | What it means | Fix |
|---|---|---|
| Received 10 emails in the last 24h | No contact gets more than 10 emails a day from one product. This stops runaway loops. | For high-volume transactional email, open the email in **Transactional emails**, then **Advanced**, **Show advanced options**, and tick **Skip the limit of 10 emails per person a day**. |
| Template already sent within the last 60 minutes, or a send is already in progress | The same email went to the same person in the last hour, usually because your app called Meisa twice. | Fix the double call in your app, or tick **Allow the same email twice within an hour** for codes that people request again. |

Newsletter issues go only to confirmed subscribers, so people who never confirmed are left out quietly. In a sequence, an email step with no template is skipped, and a step that fails 3 times is skipped so the sequence can move on.

If a transactional email has a delay, the API answers `scheduled` and these checks run again when it is due, so it can still be skipped at that moment.

## Related articles

- [How the frequency cap protects your contacts](/articles/frequency-cap)
- [Handle bounces and spam complaints](/articles/bounces-and-complaints)
- [Unsubscribes and suppressed addresses](/articles/unsubscribes-and-suppressed-addresses)
- [Send transactional emails with triggers](/articles/send-transactional-email)
