Send emails with MailWizz
Add PostShiba as a MailWizz SMTP delivery server.
What you'll build
A MailWizz delivery server that sends your campaigns, list emails, and test emails through PostShiba over SMTP. MailWizz keeps your lists, campaigns, and unsubscribe links. PostShiba delivers the mail and suppresses addresses that hard bounce or report spam.
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.
- 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.
- A verified sending domain. See Add and verify a domain. The delivery server's From email and every list's from address must be on it.
- A cluster that is ready to send (
sending_readyistrue). - Access to the MailWizz backend as an admin.
Install
Nothing to install. MailWizz 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 |
|---|---|---|
| Nano | 100 | 600 |
| Micro | 4,000 | 24,000 |
| Small | 40,000 | 240,000 |
| Medium | 100,000 | 600,000 |
| Large | 200,000 | 1,200,000 |
MailWizz enforces its own quotas on each delivery server. Set Hourly quota and Daily quota to the two numbers for your plan, and lower them if other apps send on the same cluster. MailWizz counts the daily quota per calendar day, so a campaign that runs across midnight can still reach PostShiba's rolling 24-hour cap. Nano is for test sends only.
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.
Send your first email
- In the MailWizz backend, go to Servers → Delivery servers and select Create new server.
- Choose Smtp, the plain SMTP type, not one of the provider-specific ones.
- Enter these values. The username starts with
smtp_.
- Set Hourly quota and Daily quota to the values for your plan in the table above.
- Set Max. connection messages to
100. The default of1opens a new SMTP connection for every message. - Leave Bounce server empty. PostShiba handles bounces, as explained below.
- Select Save changes.
- Under Validate this server, enter your own address and select Validate server. MailWizz sends a confirmation email through PostShiba. Open the link in it to activate the server. The message shows under Events in the PostShiba dashboard.
Every SMTP setting is on Send emails with SMTP.
Bounces, complaints, and unsubscribes
MailWizz reads bounces from a bounce server, an IMAP or POP3 mailbox. PostShiba mail never reaches that mailbox, because the return-path points at PostShiba and bounce messages come back to PostShiba. Leave Bounce server empty on this delivery server. With one attached, MailWizz uses the mailbox address as the envelope sender, and PostShiba refuses the message with 550 unverified domain unless that address is on your verified domain.
| 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 | MailWizz adds its own List-Unsubscribe and List-Unsubscribe-Post headers to campaigns, so PostShiba leaves them alone. MailWizz marks the subscriber as unsubscribed. |
Suppressed addresses still look active in MailWizz. PostShiba refuses them, so they never reach a mailbox, but they stay in your subscriber counts. Copy them into MailWizz now and then to keep your lists clean.
Copy suppressions into MailWizz
- Export every suppressed address to
postshiba-suppressions.csv. Follow How do I export my suppression list?. It takes a read-only Support key and one script. - MailWizz needs a header row named
email. Add it:
- In the MailWizz backend, go to Email blacklist → Email blacklist, select Import, choose
mailwizz-blacklist.csv, and select Import file. MailWizz then skips those addresses for every customer and list.
Run it again after each large campaign. Importing an address that is already on the blacklist does no harm.
Troubleshooting
| What you see | What to do |
|---|---|
| Authentication fails | Check the username and password. Use port 587 with Protocol set to TLS. Port 465 with SSL is not offered. PostShiba accepts AUTH PLAIN only. |
The connection times out or fails with Protocol set to TLS |
Check Default system mailer under Settings → Common. SymfonyMailer treats TLS as implicit TLS, which port 587 does not speak. With SymfonyMailer, set Protocol to STARTTLS. The default SwiftMailer needs TLS. |
| The confirmation email never arrives | The server is not sending through PostShiba. Open the delivery server and check the saved values. |
550 unverified domain or 550 from header not aligned with verified domain |
Remove the Bounce server, and use a from address on your verified domain for the list. To use the server's From email for every message, set Force FROM email to Always. |
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?. |
550 suppressed |
The subscriber hard bounced or reported spam. Copy suppressions into MailWizz 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 Hourly quota and Daily quota, or resize the cluster before the next campaign. |
451 4.4.5 too many sessions, slow down |
MailWizz opened too many SMTP connections on one username in 10 seconds. Raise Max. connection messages so each connection carries more messages. |
421 4.3.2 ... idle too long |
PostShiba closed a connection that sat idle for 30 seconds. This is not throttling. If it repeats, lower Max. connection messages. See 421 4.3.2 idle too long. |
Next steps
- What happens at your cap
- How to manage suppressions
- How do recipients unsubscribe?
- Send emails with SMTP for every setting and reply.