Why was my email not sent?
Meisa skips an email when your setup, account or the contact blocks it. Find the reason on the contact, broadcast report or API response, then apply the fix.
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 areason. Do not retry these. Setup problems return anerrorwith a 4xx status instead.

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 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. |
| 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, 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. |
| 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 [email protected] 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. |
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
Did this answer your question?
Thanks for letting us know.Thanks, we will improve this article. Want a hand right now?
Still need help?
Chat with us and get an answer in a few minutes.