Description
Moos Skov Bounce Manager for MailPoet is an independent add-on for MailPoet for sites that do not use MailPoet Sending Service for delivery and therefore receive bounce messages through their own host, mailbox, or third-party SMTP provider.
Bounce handling is more complicated than simply deciding whether an email address “works”. A delivery can fail because the address is invalid, because a mailbox is temporarily unavailable, because it is full, because a message is too large, or because the receiving provider rejects a message according to local policy.
This plugin keeps those situations separate instead of treating every SMTP error as a dead address.
It can:
- detect supported permanent recipient failures and mark matching MailPoet subscribers as Bounced;
- import
.eml,.mbox,.txt, and.zipfiles containing bounce messages; - process every message in an MBOX batch and report the complete result instead of only counting changed subscribers;
- recognise MailPoet-style soft-bounce categories such as mailbox-full/quota, temporary delivery failures, and message-too-large failures;
- keep soft bounces in a persistent manual-review queue by default;
- keep SMTP policy rejections in the same review workflow while clearly labelling them as Policy rejection;
- count unique bounce occurrences without inflating the count when the same bounce message is imported again;
- show first-seen and last-seen dates for review entries;
- let an administrator mark selected review entries Bounced, Unsubscribe them through MailPoet, or dismiss them;
- ignore common automatic replies and out-of-office messages;
- protect configured sender addresses or complete domains from accidental bounce marking;
- inspect known MailPoet error storage on a scheduled basis;
- optionally inspect WP Mail SMTP Debug Events when that plugin/table is present;
- automatically resume a paused MailPoet sending job after an affected subscriber was successfully handled;
- keep a local diagnostic log of the most recent 400 events.
The plugin is not developed by, endorsed by, or affiliated with MailPoet. The MailPoet name is used only to identify the product this independent add-on integrates with.
Why there is a review queue
MailPoet distinguishes between hard and soft bounces.
A hard bounce normally means the recipient address is permanently invalid, for example a non-existent user or domain. Moos Skov Bounce Manager therefore marks supported hard-bounce cases as Bounced immediately.
A soft bounce means that delivery failed for a reason that may be temporary. The plugin currently separates these into:
- Mailbox full / quota
- Temporary delivery failure
- Message too large
By default these are not automatically converted into Bounced subscribers. They are stored under Bounces awaiting review, where you can decide what to do.
MailPoet documents that its own Sending Service counts repeated soft bounces by category and may eventually treat an address as hard bounced after repeated failures over time. Moos Skov Bounce Manager follows the same general idea by tracking occurrences, but it does not claim to reproduce MailPoet Sending Service’s private bounce-scoring system.
When an address has three or more unique review events, the Occurrences value is highlighted as a useful human-review signal. No automatic status change is made merely because the count reaches three.
Duplicate protection
Re-importing the same MBOX or EML file must not make a single bounce look like several separate events.
Moos Skov Bounce Manager creates a fingerprint for each detected review event. If the exact same bounce message for the same recipient and category is imported again, it is still counted as a reviewed message in the batch summary, but the subscriber’s Occurrences value is not increased.
A genuinely new bounce message for the same address receives a new fingerprint and increases Occurrences.
Policy rejections
SMTP responses such as 5.7.x, 550, and 554 can mean that a receiving mail provider rejected the message according to spam, reputation, authentication, transport, or other local policies. They do not necessarily prove that the recipient address does not exist.
For that reason, automatic policy-rejection handling is off by default.
Instead, policy failures are placed in Bounces awaiting review and labelled Policy rejection. You can then:
- leave the subscriber unchanged;
- mark the subscriber Bounced;
- explicitly Unsubscribe the subscriber;
- dismiss the review entry.
If your own workflow intentionally treats policy rejections as suppressible, you can enable automatic policy handling under Tools > Moos Skov Bounce Manager.
Automatic resume
Automatically resume MailPoet sending after a bounce was successfully handled is enabled by default and is located under Advanced.
This is a core reason for the plugin to exist. On a large list, a sending job that repeatedly pauses because of individual delivery errors can otherwise require repeated manual intervention.
Moos Skov Bounce Manager only attempts an automatic resume after it has matched the event to an existing MailPoet subscriber and successfully suppressed that subscriber, or after an administrator has handled an entry from the review queue.
You can disable automatic resume if you prefer to resume campaigns manually or if a future MailPoet release causes a compatibility problem.
MailPoet integration and compatibility
Where MailPoet provides a public integration API, Moos Skov Bounce Manager uses it.
In particular:
- subscriber lookup uses MailPoet’s public API;
- the manual Unsubscribe action uses MailPoet’s public global unsubscribe API so MailPoet records the unsubscribe through its normal subscriber-management path.
MailPoet’s public API currently does not expose a method that allows an integration to set a subscriber’s global status to Bounced. MailPoet also does not expose all of the internal operations needed to clear an already-paused sending job.
For these specific operations, Moos Skov Bounce Manager contains a deliberately small compatibility layer against known MailPoet structures. This layer is also used for optional read-only scanning of stored MailPoet error data because no public bounce-log API is available. For sending resume, the plugin first uses MailPoet’s own resume helper when available and only uses the compatibility fallback when necessary.
MailPoet explicitly warns integrators that internal classes and structures are not guaranteed to remain backward compatible. A future MailPoet release may therefore occasionally require an update to Moos Skov Bounce Manager. The Advanced automatic-resume option can be disabled independently if needed.
Bounce address
When using MailPoet with an “Other” sending method, configure a mailbox that actually receives the bounce messages from your sending provider.
MailPoet recommends using a bounce address on the same domain as the website/sending address when possible. For example, if your sending address is newsletter@example.com, a bounce address such as bounces@example.com is a sensible setup.
Protected addresses
You can enter addresses or domains that must never be marked as bounced, one per line. For example:
sender@example.com
@example.com
These are examples only. Replace them with addresses or domains appropriate for your site.
The WordPress administrator email is protected automatically. When possible, the plugin also protects obvious delivery and return-path addresses found inside imported messages.
Scheduled scanning
The plugin schedules a scan approximately every five minutes using WP-Cron. WP-Cron is traffic driven, so the exact timing depends on visits to the site and the site’s cron configuration.
The scheduled scan is intentionally not run on every page request.
Privacy / local data
Moos Skov Bounce Manager for MailPoet does not send bounce data, subscriber addresses, or diagnostic data to the plugin author or another external service.
Its local log can contain subscriber email addresses and short excerpts of mail-server errors. The log is stored in the site’s own WordPress database, is limited to the most recent 400 entries, can be cleared from the plugin screen, and is removed when the plugin is uninstalled.
The review queue stores email addresses, categories, occurrence counts, dates, short error reasons, and event fingerprints locally in the WordPress database. These records are also removed on uninstall.
The plugin integrates with WordPress Tools > Export Personal Data and Tools > Erase Personal Data for its own log and review-queue records. MailPoet subscriber data itself remains MailPoet’s responsibility and is not erased by Moos Skov Bounce Manager.
Installation
- Install and activate MailPoet.
- Install and activate Moos Skov Bounce Manager for MailPoet.
- Go to Tools > Moos Skov Bounce Manager.
- Add any sender addresses or domains you want to protect.
- Leave automatic soft-bounce handling disabled if you want to review temporary failures before suppressing subscribers.
- Leave automatic policy-rejection handling disabled if you want policy failures queued for manual review.
- Under Advanced, automatic MailPoet resume is enabled by default. Disable it only if you prefer manual resume or are troubleshooting compatibility.
- Configure MailPoet/your sending provider so bounce messages reach a mailbox you can import or otherwise expose to the plugin’s supported error sources.
This plugin declares mailpoet as a required plugin. WordPress 7.0 was released in May 2026, and the current MailPoet release requires WordPress 7.0 or higher, so this add-on uses the same minimum WordPress version.
FAQ
-
Is this an official MailPoet plugin?
-
No. It is an independent add-on for MailPoet.
-
Why would I need this if MailPoet already has bounce management?
-
MailPoet provides automatic bounce management when using MailPoet Sending Service. If you use your own host or another SMTP provider, bounce messages may instead arrive in a mailbox that you need to handle yourself. MailPoet’s own documentation instructs users of “Other” sending methods to find those bounced subscribers and manually mark them Bounced or Unsubscribed. This plugin is intended to automate and organise that workflow.
-
What happens to a hard bounce?
-
When the plugin confidently matches a supported permanent-recipient failure to an existing MailPoet subscriber, it marks that subscriber Bounced. Existing Unsubscribed subscribers remain Unsubscribed.
-
What happens to a soft bounce?
-
By default it is added to Bounces awaiting review. You can later mark it Bounced, Unsubscribe it, or dismiss it. You may enable automatic soft-bounce handling if your own workflow intentionally treats a single supported soft bounce as permanent.
-
Why does the review queue have Occurrences, First seen, and Last seen?
-
A single temporary failure is different from a subscriber who repeatedly fails over several campaigns. These fields help you make that distinction without pretending that the plugin has access to MailPoet Sending Service’s complete bounce history or scoring system.
-
Does importing the same file twice increase Occurrences?
-
No. The plugin fingerprints each review event. An exact duplicate is recognised and reported as a duplicate event without increasing the subscriber’s Occurrences value.
-
Why is a 550 or 554 sometimes shown as Policy rejection instead of Hard bounce?
-
The numeric response alone is not enough to prove that an address is invalid. Providers also use these responses for spam, authentication, sender reputation, and local-policy blocks. More specific recipient-invalid signals such as “user unknown”, “no such user”, or
5.1.1take precedence and are treated as hard bounces. -
Why is automatic MailPoet resume enabled by default?
-
It prevents a large campaign from requiring repeated manual resume actions after individual delivery failures. The plugin only attempts a resume after a matching subscriber has actually been handled. The option can be disabled under Advanced.
-
Does the plugin use MailPoet’s API?
-
Yes, wherever the public API supports the required operation. Subscriber lookup and manual global Unsubscribe use MailPoet’s supported public API. Setting the global Bounced status and some in-progress sending cleanup require a small compatibility layer because MailPoet currently exposes no equivalent public integration methods.
-
What file types can I import?
-
You can upload
.eml,.mbox,.txt, or a.zipcontaining those file types. Each uploaded file is limited to 20 MB. -
Why can “Messages reviewed” be higher than “Marked Bounced”?
-
The importer reviews every message in the batch. Some messages may already belong to Bounced or Unsubscribed subscribers, some may be soft bounces or policy rejections awaiting a manual decision, some may be duplicate bounce events, and some may be automatic replies. The summary reports these categories separately.
-
Does it require WP Mail SMTP?
-
No. WP Mail SMTP is optional. If its Debug Events table exists, the plugin can use it as an additional read-only source of bounce/error text.
-
What does the automatic stored-error scan inspect?
-
The scheduled scan is deliberately narrow. It checks known MailPoet error storage and, when WP Mail SMTP is present, its supported debug-event storage. The broader fallback search through MailPoet-related WordPress options runs only when an administrator explicitly clicks Scan now.
-
Are ZIP imports limited?
-
Yes. An uploaded file is limited to 20 MB. ZIP archives are additionally limited to 250 entries and 50 MB total uncompressed content, and only
.eml,.mbox, and.txtentries are processed. ZIP contents are read in memory rather than extracted to arbitrary filesystem paths. -
No. There is no telemetry or author-operated external API used by this plugin.
-
Where are the settings?
-
Go to Tools > Moos Skov Bounce Manager in WordPress admin.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Moos Skov Bounce Manager for MailPoet” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Moos Skov Bounce Manager for MailPoet” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.7
- Reworks stored-error scanning to use bounded, fixed-shape prepared queries and perform bounce-pattern matching in PHP.
- Removes dynamically assembled SQL WHERE/SELECT fragments that caused WordPress Plugin Check prepared-SQL errors.
- Keeps bounce classification, review-queue behaviour, MailPoet API integration, and automatic resume behaviour unchanged.
1.0.6
- Renames the plugin to Moos Skov Bounce Manager for MailPoet for a more distinctive WordPress.org directory identity.
- Uses the new WordPress.org text domain/slug
moos-skov-bounce-manager-for-mailpoet. - Sanitizes the protected-address setting before storage without triggering Plugin Check input warnings.
- Reworks compatibility SQL to use WordPress
%iidentifier placeholders and prepared statements for dynamic table and column names. - Keeps the functional bounce-processing behaviour from 1.0.5 unchanged.
1.0.5
- Release-candidate cleanup for WordPress.org submission.
- Adds WordPress Privacy Policy Guide text describing locally stored bounce data.
- Adds WordPress personal-data exporter support for the plugin’s diagnostic log and manual-review queue.
- Adds WordPress personal-data eraser support for the plugin’s own log and review records without altering MailPoet subscriber data.
- Restricts the broad WordPress-options fallback scan to explicit administrator-triggered scans; scheduled scans remain focused on known MailPoet and optional WP Mail SMTP stores.
- Escapes the protected-address textarea at the final output point.
- Adds validation and a 20 MB limit for manually pasted raw RFC/MIME error text while preserving message structure required by the parser.
- Hardens ZIP imports with limits of 250 archive entries and 50 MB total uncompressed content in addition to the existing 20 MB per-entry/upload limit.
- Expands privacy and scanner documentation for directory review.
1.0.4
- Aligns the review model more closely with MailPoet’s documented hard/soft bounce terminology.
- Expands soft-bounce detection to include mailbox-full/quota, temporary delivery failures, and message-too-large failures.
- Keeps policy rejections as a separate category inside the same manual-review queue.
- Adds First seen and Last seen fields to review entries.
- Adds unique-event fingerprinting so re-importing the same bounce does not inflate Occurrences.
- Highlights review entries with three or more unique occurrences as a human-review signal without automatically reproducing MailPoet Sending Service scoring.
- Uses MailPoet’s supported public API for subscriber lookup.
- Uses MailPoet’s supported global
unsubscribe()API for manual Unsubscribe actions. - Limits direct MailPoet compatibility/database code to operations for which MailPoet currently exposes no equivalent public API, including setting Bounced, optional stored-error scanning, and in-progress queue/resume cleanup.
- Moves automatic sending resume under Advanced and keeps it enabled by default.
- Expands the readme with detailed explanations of hard, soft, policy, duplicate handling, API usage, compatibility, and MailPoet’s recommended bounce-address setup.
1.0.3
- Adds SMTP policy rejections to the same persistent manual-review workflow used for soft bounces when automatic policy handling is disabled.
- Adds a Category column so mailbox-full/quota failures and policy rejections remain clearly distinguishable.
- Allows policy-rejection recipients to be marked Bounced, explicitly Unsubscribed, or dismissed from the review queue.
- Reports pending soft bounces and pending policy rejections separately in batch-import summaries.
- Improves short diagnostic reasons for common
550/554 5.7.xpolicy failures.
1.0.2
- Reworks batch-import reporting so every
.mboxmessage is counted as reviewed, independently of whether a MailPoet status changed. - Adds separate counts for newly marked Bounced, already Bounced, already Unsubscribed, pending soft bounces, skipped policy rejections, automatic replies, and unmatched messages.
- Adds a persistent manual-review queue for mailbox-full/quota soft bounces when automatic soft-bounce handling is disabled.
- Adds administrator actions to mark selected/all pending soft bounces as Bounced, explicitly Unsubscribe them, or dismiss them.
- Leaves existing MailPoet Unsubscribed subscribers Unsubscribed instead of overwriting that status with Bounced.
- Tightens automatic-reply detection so headers in quoted/original message content do not cause normal human replies to be misclassified.
1.0.1
- Keeps full MBOX batch processing and adds a visible end-of-import summary.
- Logs messages that were reviewed but did not match an enabled bounce rule.
- Adds an opt-in setting for permanent SMTP policy rejections such as 550/554 and 5.7.x responses.
1.0.0
- First public release.
- English, translation-ready admin interface.
- Declares MailPoet as a WordPress plugin dependency.
- Removes site-specific default addresses and domains.
- Adds configurable protected addresses/domains.
- Makes soft/quota bounce handling opt-in and disabled by default.
- Tightens hard-bounce detection to avoid treating generic 550/554 responses as permanent recipient failures on their own.
- Changes automatic scans from per-request scanning to a five-minute WP-Cron schedule.
- Only attempts to resume MailPoet after an existing subscriber was successfully matched and handled.
- Adds safer in-memory ZIP handling and an upload size limit.
- Adds local-data/privacy documentation and uninstall cleanup.