Title: Moos Skov Bounce Manager for MailPoet
Author: villyskov
Published: <strong>September 27, 2026</strong>
Last modified: September 28, 2026

---

Search plugins

![](https://ps.w.org/moos-skov-bounce-manager-for-mailpoet/assets/icon-256x256.png?
rev=3715718)

# Moos Skov Bounce Manager for MailPoet

 By [villyskov](https://profiles.wordpress.org/villyskovgmailcom/)

[Download](https://downloads.wordpress.org/plugin/moos-skov-bounce-manager-for-mailpoet.1.0.7.zip)

 * [Details](https://wordpress.org/plugins/moos-skov-bounce-manager-for-mailpoet/#description)
 * [Reviews](https://wordpress.org/plugins/moos-skov-bounce-manager-for-mailpoet/#reviews)
 *  [Installation](https://wordpress.org/plugins/moos-skov-bounce-manager-for-mailpoet/#installation)
 * [Development](https://wordpress.org/plugins/moos-skov-bounce-manager-for-mailpoet/#developers)

 [Support](https://wordpress.org/support/plugin/moos-skov-bounce-manager-for-mailpoet/)

## 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 `.zip` files 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

 1. Install and activate MailPoet.
 2. Install and activate Moos Skov Bounce Manager for MailPoet.
 3. Go to **Tools > Moos Skov Bounce Manager**.
 4. Add any sender addresses or domains you want to protect.
 5. Leave automatic soft-bounce handling disabled if you want to review temporary failures
    before suppressing subscribers.
 6. Leave automatic policy-rejection handling disabled if you want policy failures 
    queued for manual review.
 7. Under **Advanced**, automatic MailPoet resume is enabled by default. Disable it
    only if you prefer manual resume or are troubleshooting compatibility.
 8. 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.1` take 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 `.zip` containing 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`.
txt` entries are processed. ZIP contents are read in memory rather than extracted
to arbitrary filesystem paths.

### Does it send any data to the plugin author?

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.

Contributors

 *   [ villyskov ](https://profiles.wordpress.org/villyskovgmailcom/)

[Translate “Moos Skov Bounce Manager for MailPoet” into your language.](https://translate.wordpress.org/projects/wp-plugins/moos-skov-bounce-manager-for-mailpoet)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/moos-skov-bounce-manager-for-mailpoet/),
check out the [SVN repository](https://plugins.svn.wordpress.org/moos-skov-bounce-manager-for-mailpoet/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/moos-skov-bounce-manager-for-mailpoet/)
by [RSS](https://plugins.trac.wordpress.org/log/moos-skov-bounce-manager-for-mailpoet/?limit=100&mode=stop_on_copy&format=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 `%i` identifier 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.x` policy failures.

#### 1.0.2

 * Reworks batch-import reporting so every `.mbox` message 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.

## Meta

 *  Version **1.0.7**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 7.0 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [bounce](https://wordpress.org/plugins/tags/bounce/)[email](https://wordpress.org/plugins/tags/email/)
   [mailpoet](https://wordpress.org/plugins/tags/mailpoet/)[newsletter](https://wordpress.org/plugins/tags/newsletter/)
   [smtp](https://wordpress.org/plugins/tags/smtp/)
 *  [Advanced View](https://wordpress.org/plugins/moos-skov-bounce-manager-for-mailpoet/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/moos-skov-bounce-manager-for-mailpoet/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/moos-skov-bounce-manager-for-mailpoet/reviews/)

## Contributors

 *   [ villyskov ](https://profiles.wordpress.org/villyskovgmailcom/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/moos-skov-bounce-manager-for-mailpoet/)