Description
Prime9AI Campaign Sender is a self-hosted campaign sender. It solves one specific problem: sending a large list all at once is the fastest way to hit your mail provider’s rate limits and get your domain blacklisted.
Instead, the plugin paces delivery. You choose a batch size and an interval, and a WP-Cron job releases small groups of messages over minutes, hours or days, staying under the limits your provider enforces.
Nothing is routed through a third-party sending service. Your list stays in your database, and your mail goes out over your own SMTP credentials.
Everything in this plugin is free and fully functional, with no limits on subscribers or campaigns.
Features
- Campaign management — create, edit, duplicate and delete campaigns with a full WordPress rich text editor.
- Two sending modes — Send Now, or Schedule for a specific date and time (timezone-aware).
- Slow sending engine — configurable batch size, sending interval, and maximum execution time per cron run, with a processing lock so runs never overlap.
- SMTP profiles — store several mail servers and switch the active one, with passwords encrypted at rest using AES-256-CBC.
- Test connection — send a real test message before you trust a server with a campaign.
- CSV / TSV list import — automatic email validation, de-duplication, and suppression filtering on import. Large lists are split into batches automatically.
- Open and click tracking — signed tracking links, so analytics cannot be forged and the redirect cannot be abused.
- One-click unsubscribe — token-verified, adds the address to the suppression list and immediately drops any queued messages for it.
- Suppression list — manual entries, CSV import, automatic unsubscribes, and optional auto-suppression on bounce.
- Rate limiting — an hourly cap per recipient domain and a daily ceiling, both set by you. Emails over a limit wait in the queue and go out when it allows.
- Retries and bounces — temporary failures are retried five minutes apart, up to the number of attempts you set. A recipient the mail server refuses outright is logged as a bounce and can be suppressed automatically.
- Validation before sending — optional MX record checks and optional disposable-address blocking.
- GDPR controls — a daily cleanup deletes analytics, bounce records, failed emails and debug logs older than your retention period, and an unsubscribe footer is added to any email without an unsubscribe link.
- Debug log viewer — colour-coded, filterable, downloadable, and off by default.
A separate Pro plugin, sold at https://prime9ai.com/prime9ai-campaign-sender/, adds recurring send windows, a campaign analytics screen and integration with other SMTP plugins. The Pro Features screen shows what it adds, and panels on the relevant screens can be hidden. None of that code is included here.
A note on deliverability
This plugin gives you controls; the sending policy is yours. Warm up new sending domains, respect per-domain limits, honour unsubscribes promptly, and only mail people who asked to hear from you.
External services
This plugin does not connect to any service run by its author.
Your SMTP server
Campaign content, subject lines and recipient addresses are transmitted to whichever SMTP server you configure in the plugin’s settings. That server is chosen and controlled by you; the plugin has no default and contacts no mail server until you supply credentials. Review your mail provider’s own terms and privacy policy.
Privacy
Prime9AI Campaign Sender stores subscriber email addresses, unsubscribe records, and open/click events in your site’s database. It does not send this data anywhere.
Open and click tracking records the recipient’s email address, the campaign, and the clicked URL. Tracking can be disabled entirely under Campaign Sender Settings. A configurable data retention setting (90 days by default) deletes old analytics, bounce records, failed emails and debug logs automatically once a day. Emails still waiting to be sent and suppression entries are kept, so an unsubscribe is never forgotten.
Screenshots






Installation
- In your WordPress admin, go to Plugins Add New, search for Prime9AI Campaign Sender, then install and activate it.
- Go to Campaign Sender SMTP Settings and add your mail server as a profile. Use Test Connection to confirm it works.
- Go to Campaign Sender Email Lists and upload a CSV or TSV file of addresses.
- Go to Campaign Sender Campaigns Add New, write your message, assign one or more lists, and pick a send mode.
- Check Campaign Sender Settings to set your batch size and interval before starting the campaign.
FAQ
-
Does this send email through a third-party service?
-
No. Campaigns go out over the SMTP server you configure. Prime9AI Campaign Sender never routes your messages or your list through anyone else’s infrastructure.
-
Does WP-Cron need to be enabled?
-
Yes. The sending queue is driven by WP-Cron. If you have set
DISABLE_WP_CRONto true, configure a real system cron that hitswp-cron.phpat least once a minute, otherwise campaigns will stall. Sites with little traffic should use a system cron regardless, because WP-Cron only fires when someone visits the site. -
How many subscribers and campaigns can I have?
-
There is no limit in the plugin. The practical ceiling is your mail provider’s sending limits and your server’s ability to run the cron job. Lists larger than 10,000 addresses are automatically split into batches, and you can change that threshold in Settings.
-
How do I avoid being marked as spam?
-
Set a conservative batch size and a generous interval, keep the per-domain cap low, publish SPF, DKIM and DMARC records for your sending domain, and never import a list the recipients did not opt in to. New domains should start at a very low volume and increase over days.
-
Where are my uploaded lists stored?
-
As CSV files under
wp-content/uploads/prime9ai-campaign-sender/lists/, with unguessable filenames and server-level deny rules where the server supports them. They are never exposed through a public URL. -
What happens when someone unsubscribes?
-
The address is added to the suppression list, and any messages still queued for that address are deleted immediately, so they will not receive the rest of the campaign. Future imports skip suppressed addresses automatically.
-
Is the plugin translation-ready?
-
Yes. All user-facing strings use the
prime9ai-campaign-sendertext domain, and a POT file ships inlanguages/for translators. -
What happens when a sending limit is reached?
-
Nothing is lost. When the daily limit is reached, sending stops until midnight in your site’s timezone. When a domain reaches its hourly limit, emails to that domain wait for the next hour while other domains carry on. Set either limit to 0 to turn it off.
-
What counts as a bounce?
-
A recipient the mail server refuses with a permanent (5xx) error while the email is being sent. Bounces reported later by email are not read. Sender problems, such as a wrong SMTP password, are never counted as bounces.
-
How is this different from an SMTP plugin?
-
SMTP plugins change how WordPress sends its own mail. This plugin is a campaign sender: it holds your lists, builds campaigns, and releases them gradually through a queue so a large send does not hit your provider’s rate limits or damage your domain’s reputation.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Prime9AI Campaign Sender” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Prime9AI Campaign Sender” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.0.0
- First release on wordpress.org.
