Title: MailNest
Author: Stanley Okonkwo
Published: <strong>June 22, 2026</strong>
Last modified: June 22, 2026

---

Search plugins

![](https://ps.w.org/mailnest/assets/banner-772x250.png?rev=3582450)

![](https://ps.w.org/mailnest/assets/icon-256x256.png?rev=3582438)

# MailNest

 By [Stanley Okonkwo](https://profiles.wordpress.org/stanley24/)

[Download](https://downloads.wordpress.org/plugin/mailnest.1.0.5.zip)

 * [Details](https://wordpress.org/plugins/mailnest/#description)
 * [Reviews](https://wordpress.org/plugins/mailnest/#reviews)
 *  [Installation](https://wordpress.org/plugins/mailnest/#installation)
 * [Development](https://wordpress.org/plugins/mailnest/#developers)

 [Support](https://wordpress.org/support/plugin/mailnest/)

## Description

MailNest is a fully-featured newsletter and email automation plugin built for WordPress.
Send campaigns, automate sequences, track opens and clicks, and manage your subscribers—
all without monthly fees or subscriber limits.

**Why MailNest?**

Most newsletter plugins either charge per subscriber, cap your monthly sends, or
hold your data hostage. MailNest is 100% free and open source, runs on your own 
server, and gives you complete control.

#### Core Features

**Email Sending**
 * SMTP support (any provider — Hostinger, Gmail, SendGrid, etc.)*
Amazon SES integration (raw API, no SDK required) * Automatic wp_mail() fallback*
Real PHPMailer error reporting

**Subscriber Management**
 * Double opt-in with confirmation emails * Single opt-
in mode (optional) * Bulk confirm, delete, and resend confirmation * CSV import 
and export * Inactive subscriber detection and removal * Bounced email detection

**Campaign Builder**
 * Full WordPress rich-text editor * Merge tags: {{first_name}},{{
last_name}}, {{email}} * Schedule campaigns or send immediately * Insert Post modal—
embed your posts as formatted email blocks * Auto unsubscribe link in every email

**Automation**
 * Auto daily digest — fetches and sends your latest posts automatically*
Welcome email sequence (day 0, 3, 7 — fully customisable) * Re-engagement emails
for inactive subscribers * Auto-unsubscribe cold subscribers after X days * Duplicate
send protection (race condition safe)

**Analytics**
 * Open tracking (pixel-based) * Click tracking (redirect-based) *
Subscriber growth charts * Campaign performance table with open and click rates *
Top clicked links leaderboard * Cumulative KPI dashboard

**Forms**
 * Inline subscription form via [mailnest_subscribe] shortcode * Popup
form (exit intent / scroll / time delay) * Visual form builder * Honeypot spam protection*
Auto-append form after posts (optional)

**Access Control**
 * Role-based permissions (editor, author, contributor) * Settings
locked to admin only

#### No Limits

 * Unlimited subscribers
 * Unlimited campaigns
 * Unlimited monthly sends (limited only by your SMTP provider)
 * No upgrade walls
 * No tracking or telemetry

### External Services

#### Amazon Simple Email Service (SES)

This plugin optionally connects to Amazon SES to send emails. This feature is only
active if you enter your AWS Access Key and Secret Key in the plugin settings. No
data is sent by default.

**What is sent:** recipient email address, sender name, email subject, and HTML 
email body.
 **When it is sent:** only when a campaign, confirmation, or automated
email is triggered. **Data processor:** Amazon Web Services, Inc. **Terms of Service:**
https://aws.amazon.com/service-terms/ **Privacy Policy:** https://aws.amazon.com/
privacy/

#### Chart.js (bundled)

This plugin bundles Chart.js locally to render analytics charts in the WordPress
admin. No data is sent to any external server.

**Amazon SES**
 * What it does: Sends newsletter emails on your behalf * Data sent:
Email address of recipient, email subject and body * When: Only when a campaign 
or automated email is triggered * Terms of Service: https://aws.amazon.com/service-
terms/ * Privacy Policy: https://aws.amazon.com/privacy/

This plugin does NOT collect any user data, phone home, or send any analytics to
external servers.

## Screenshots

[⌊Dashboard — at-a-glance KPI summary with subscriber growth, opens, and clicks.⌉⌊
Dashboard — at-a-glance KPI summary with subscriber growth, opens, and clicks.⌉[

Dashboard — at-a-glance KPI summary with subscriber growth, opens, and clicks.

[⌊Subscriber management with bulk confirm, delete, and CSV export.⌉⌊Subscriber management
with bulk confirm, delete, and CSV export.⌉[

Subscriber management with bulk confirm, delete, and CSV export.

[⌊Campaign builder with rich-text editor, merge tags, and Insert Post modal.⌉⌊Campaign
builder with rich-text editor, merge tags, and Insert Post modal.⌉[

Campaign builder with rich-text editor, merge tags, and Insert Post modal.

[⌊Analytics dashboard showing open rates, click rates, and top clicked links.⌉⌊Analytics
dashboard showing open rates, click rates, and top clicked links.⌉[

Analytics dashboard showing open rates, click rates, and top clicked links.

[⌊Settings page — SMTP, Amazon SES, double opt-in, and branding options.⌉⌊Settings
page — SMTP, Amazon SES, double opt-in, and branding options.⌉[

Settings page — SMTP, Amazon SES, double opt-in, and branding options.

[[

## Installation

 1. Upload the `mailnest` folder to `/wp-content/plugins/`
 2. Activate the plugin through the Plugins menu in WordPress
 3. Go to MailNest  Settings to configure your SMTP credentials
 4. Add `[mailnest_subscribe]` to any page or post to show a subscribe form

## FAQ

### Does this plugin charge per subscriber?

No. MailNest is 100% free with no subscriber limits.

### What SMTP provider should I use?

Any provider works — Hostinger, Gmail (500/day free), Brevo (300/day free), or Amazon
SES (~$0.10 per 1,000 emails).

### How do I set up the automated daily digest?

Go to MailNest  Settings  Auto Daily Digest. Enable it, set the send time, and configure
your logo and accent color.

### Does it support double opt-in?

Yes. Double opt-in is enabled by default and strongly recommended for deliverability.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“MailNest” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ Stanley Okonkwo ](https://profiles.wordpress.org/stanley24/)

[Translate “MailNest” into your language.](https://translate.wordpress.org/projects/wp-plugins/mailnest)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/mailnest/), check out
the [SVN repository](https://plugins.svn.wordpress.org/mailnest/), or subscribe 
to the [development log](https://plugins.trac.wordpress.org/log/mailnest/) by [RSS](https://plugins.trac.wordpress.org/log/mailnest/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.5

 * Fixed every remaining instance where a table name from mailnest_table() was interpolated
   directly into a SQL string passed to $wpdb->prepare() (rather than passed as 
   a %i argument). This pattern is unsafe regardless of whether the other variables
   in the same query use real placeholders, and affected 17+ call sites across class-
   campaign.php, class-subscriber.php, class-cron.php, class-tracker.php, and the
   admin subscribers list (inactive/bounced filters)
 * Rewrote the admin subscribers list “inactive” and “bounced” filter queries to
   use %i for all table names and $wpdb->esc_like() for search terms (previously
   raw string concatenation, which could also mishandle a % or _ character typed
   into the search box)

#### 1.0.4

 * Open/click tracking now requires a signed per-recipient token (tt) generated 
   from campaign_id + subscriber_id, so analytics can no longer be forged by guessing
   sequential IDs; existing confirm/unsubscribe links already used a token and are
   unaffected. Click redirects still work even without a valid token — only the 
   analytics record is gated.
 * Removed the unprefixed `[mn_subscribe]` shortcode alias (kept `[mailnest_subscribe]`)
   to avoid naming collisions with other plugins
 * All remaining direct SQL queries now go through $wpdb->prepare(), using the %
   i identifier placeholder (WP 6.2+) for internal table names
 * Two bulk admin actions (confirm, resend) rewritten from a dynamic IN(…) placeholder
   pattern to a per-ID prepared-query loop, for full Plugin Check compliance
 * Minimum WordPress version raised to 6.2 (required for %i placeholder support)

#### 1.0.3

 * Fixed broken unsubscribe links: the subscriber token is now retained after confirmation(
   it doubles as the unsubscribe token), and a token is auto-generated at send time
   for any legacy rows where it was previously cleared
 * Popup form refactored: static layout styles moved to the enqueued stylesheet 
   and user-configured colors delivered via wp_add_inline_style(), so styling no
   longer depends on inline attributes
 * Fixed AJAX form-settings save writing to mn_form_* option keys while the form
   builder and frontend read mailnest_form_* — saved settings now apply correctly
 * Replaced non-atomic set_transient() duplicate-send lock with an atomic add_option()
   lock (single INSERT against the unique option_name index), with automatic cleanup
   of the previous day’s lock
 * Escaped all dynamic values in the auto-newsletter email builder (site name, tagline,
   accent color, post titles, excerpts, permalinks, thumbnails, categories, Twitter
   handle/URL) and sanitized the accent color with sanitize_hex_color()
 * Popup form HTML is now output through wp_kses() with an explicit tag/attribute
   whitelist instead of a phpcs:ignore
 * Moved remaining attribute escaping to output time (escape late) in the inline
   and popup form builders
 * Escaped role label output on the Settings permissions table
 * Debug logging is now gated behind WP_DEBUG

#### 1.0.2

 * Fixed fatal PHP error (gmgmdate typo) in auto-newsletter daily lock
 * Fixed admin_url() not wrapped with esc_url() in Pro upgrade notice
 * Moved wp_localize_script chart data out of view file into proper admin page callback
 * Fixed unescaped output in forms.php color label, analytics.php rate columns, 
   upgrade.php feature table
 * Fixed data-id attributes missing esc_attr() in subscribers and campaign-edit 
   views

#### 1.0.1

 * Security and compatibility improvements for WordPress.org submission
 * Bundled Chart.js locally (removed CDN dependency)
 * Improved input sanitization and output escaping throughout
 * Fixed email sending to fall back gracefully when SMTP is not fully configured

#### 1.0.0

 * Initial release

## Meta

 *  Version **1.0.5**
 *  Last updated **18 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [automation](https://wordpress.org/plugins/tags/automation/)[campaigns](https://wordpress.org/plugins/tags/campaigns/)
   [email](https://wordpress.org/plugins/tags/email/)[newsletter](https://wordpress.org/plugins/tags/newsletter/)
   [subscribers](https://wordpress.org/plugins/tags/subscribers/)
 *  [Advanced View](https://wordpress.org/plugins/mailnest/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/mailnest/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/mailnest/reviews/)

## Contributors

 *   [ Stanley Okonkwo ](https://profiles.wordpress.org/stanley24/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/mailnest/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://mailnest.io)