# Send emails with Mailcoach

> Add PostShiba as a Mailcoach SMTP mailer.

## What you'll build

A Mailcoach mailer that delivers your campaigns and automation emails through PostShiba over SMTP. Mailcoach keeps your lists, campaigns, and unsubscribe links. PostShiba delivers the mail and suppresses addresses that hard bounce or report spam.

This page covers Mailcoach Cloud, which accepts your own SMTP provider. Mailcoach does not track opens, clicks, bounces, or complaints for mail sent over SMTP.

## Before you start

- A **Marketing** cluster. Newsletters belong on a bulk cluster, not a transactional one, and the type is locked after create. See [Clusters](/docs/dashboard/clusters/introduction).
- An SMTP username and password. Open your cluster in the dashboard, go to its SMTP credentials, and choose **Create SMTP credential**. Copy the password right away, because it is shown once. You can also use the [SMTP credentials API](/docs/api-reference/smtp-credentials).
- A verified sending domain. See [Add and verify a domain](/docs/add-a-domain). Each list's **From email** must be on it.
- A cluster that is ready to send (`sending_ready` is `true`).
- A Mailcoach Cloud account.

## Install

Nothing to install. Mailcoach has SMTP support built in.

## Pick a plan for your largest list

PostShiba caps each cluster per hour and per rolling 24 hours. The 24-hour cap must cover your largest list plus anything else the cluster sends that day.

| Plan | Emails per hour | Emails per 24 hours | Mailcoach throttling (mails every 1 second) |
| --- | --- | --- | --- |
| Nano | 100 | 600 | Test sends only |
| Micro | 4,000 | 24,000 | 1 |
| Small | 40,000 | 240,000 | 11 |
| Medium | 100,000 | 600,000 | 27 |
| Large | 200,000 | 1,200,000 | 55 |

When a cap is full, SMTP answers `451 4.7.0 hourly send limit reached` or `451 4.7.0 daily send limit reached` and does not keep the message. Select **Resize** on the cluster page before a campaign that would go over. See [What happens at your cap](/docs/dashboard/clusters/what-happens-at-your-cap).

## Send your first email

1. In Mailcoach, go to **Configuration** → **Mailers**. Enter a **Name**, choose `SMTP` as the **Email service**, and select **Create new mailer**.
2. On the **SMTP settings** step, enter these values and select **Verify**. The username starts with `smtp_`. Choose `TLS` for **Encryption**. With port 587 it upgrades the connection with STARTTLS.

```text mailcoach-smtp.txt
Host:        smtp.postshiba.com
Port:        587
Username:    smtp_9
Password:    YOUR_PASSWORD
Encryption:  TLS
```

3. On the throttling step, set **Send** to the value for your plan from the table above and **every** to `1` second. Select **Save**.
4. In the mailers list, select **Make default**, or pick the mailer as the **Campaign mailer** in your list's settings.
5. In your list's settings, set **From email** to an address on your verified domain, such as `hello@mail.example.com`.
6. Open a campaign's content and select **Save and send test** to send it to your own address. The message shows under Events in the PostShiba dashboard.

Every SMTP setting is on [Send emails with SMTP](/docs/send-with-smtp).

## Bounces, complaints, and unsubscribes

Mailcoach learns about bounces and complaints from its email provider's feedback. Over SMTP it gets none, and PostShiba bounce messages come back to PostShiba, because the return-path points at PostShiba.

| Event | What happens |
| --- | --- |
| Hard bounce | PostShiba suppresses the address. Later sends to it are refused with `550 suppressed`. |
| Spam report | PostShiba suppresses the address the same way. |
| Soft bounce | PostShiba retries delivery. Nothing is suppressed. |
| Unsubscribe | Mailcoach adds its own `List-Unsubscribe` and `List-Unsubscribe-Post` headers, so PostShiba leaves them alone. Mailcoach marks the subscriber as unsubscribed. |

Suppressed addresses still look active in Mailcoach. PostShiba refuses them, so they never reach a mailbox, but they stay in your subscriber counts. Copy suppressions into Mailcoach now and then.

## Copy suppressions into Mailcoach

Mailcoach adds suppressions one at a time under **Configuration** → **Suppressions**, or through its API. For more than a few addresses, use the API.

1. Export every suppressed address to `postshiba-suppressions.csv`. Follow [How do I export my suppression list?](/docs/knowledge-base/how-do-i-export-my-suppression-list). It takes a read-only Support key and one script. The file has one address per line.
2. Create an API token in your Mailcoach account.
3. Run this script with your Mailcoach address and token. It stays under the Mailcoach API limit of 5 requests per second.

```sh mailcoach-suppressions.sh
MAILCOACH_URL=https://YOUR_MAILCOACH_DOMAIN
MAILCOACH_TOKEN=YOUR_MAILCOACH_TOKEN

while read -r email; do
  curl -s -X POST "$MAILCOACH_URL/api/suppressions" \
    -H "Authorization: Bearer $MAILCOACH_TOKEN" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"email\": \"$email\"}"
  sleep 0.25
done < postshiba-suppressions.csv
```

Run it again after each large campaign. Mailcoach then skips those addresses in every list.

## Troubleshooting

| What you see | What to do |
| --- | --- |
| **Verify** fails | Check **Host**, **Port**, **Username**, and **Password**. Use port `587` with `TLS`. Port 465 is not offered. PostShiba accepts `AUTH PLAIN` only. |
| `550 unverified domain` or `550 from header not aligned with verified domain` | Set the list's **From email** to an address on your verified domain. |
| `550 kyc_required` | Your team is pending production approval. Until then, send only to team members, live inbox addresses, and inbox forward-to addresses. See [Does PostShiba require production approval?](/docs/knowledge-base/does-capsule-require-production-approval). |
| `550 suppressed` | The subscriber hard bounced or reported spam. Copy suppressions into Mailcoach as shown above. |
| `451 4.7.0 hourly send limit reached` or `451 4.7.0 daily send limit reached` | The cluster is at its cap and did not keep the message. Lower the mailer's throttling, or resize the cluster before the next campaign. |
| `451 4.4.5 too many sessions, slow down` | Mailcoach opened too many SMTP connections on one username in 10 seconds. Lower the mailer's throttling. |
| `421 4.3.2 ... idle too long` | The connection sat idle for 30 seconds and PostShiba closed it. This is not throttling. See [421 4.3.2 idle too long](/docs/knowledge-base/smtp-421-idle-too-long). |
| No opens or clicks in Mailcoach | Mailcoach does not track opens and clicks for mail sent over SMTP. |

## Next steps

- [What happens at your cap](/docs/dashboard/clusters/what-happens-at-your-cap)
- [How to manage suppressions](/docs/dashboard/emails/email-suppressions)
- [How do recipients unsubscribe?](/docs/knowledge-base/how-do-recipients-unsubscribe)
- [Send emails with SMTP](/docs/send-with-smtp) for every setting and reply.
