{"id":363222,"date":"2026-11-11T05:12:22","date_gmt":"2026-11-11T05:12:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flexslowmail\/"},"modified":"2026-11-11T05:11:53","modified_gmt":"2026-11-11T05:11:53","slug":"prime9ai-campaign-sender","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/prime9ai-campaign-sender\/","author":23550899,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Prime9AI Campaign Sender","header_author":"Prime9AI","header_description":"Send bulk email campaigns through your own SMTP server, paced slowly over time to protect deliverability.","last_updated":"2026-11-11 05:11:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/prime9ai.com\/prime9ai-campaign-sender\/","header_author_uri":"https:\/\/prime9ai.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"rinkeshchandra","date":"2026-11-11 05:11:53","revision":3795678}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3795678,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3795678,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3795678,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3795678,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3795678,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3795678,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3795678,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3795678,"resolution":"4","location":"assets","locale":"","width":1280,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3795678,"resolution":"5","location":"assets","locale":"","width":1280,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3795678,"resolution":"6","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"The dashboard: campaign progress, queue depth, average open rate and system status at a glance.","2":"The campaign editor, with list assignment, shortcodes, send-mode options and per-campaign analytics.","3":"SMTP settings, with your saved profiles and a test-connection button before you trust a server with a campaign.","4":"Uploading an email list, showing the accepted formats and the validation applied on import.","5":"The suppression list, with reasons, CSV import and manual entry.","6":"Sending settings: batch size, interval, rate limits, validation and GDPR data retention."}},"plugin_section":[],"plugin_tags":[25224,2501,264,291984,455],"plugin_category":[42,45],"plugin_contributors":[291985],"plugin_business_model":[],"class_list":["post-363222","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-email","plugin_tags-campaign","plugin_tags-email-marketing","plugin_tags-email-throttling","plugin_tags-newsletter","plugin_category-contact-forms","plugin_category-ecommerce","plugin_contributors-rinkeshchandra","plugin_committers-rinkeshchandra"],"banners":{"banner":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/banner-772x250.png?rev=3795678","banner_2x":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/banner-1544x500.png?rev=3795678","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/icon-128x128.png?rev=3795678","icon_2x":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/icon-256x256.png?rev=3795678","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-1.png?rev=3795678","caption":"The dashboard: campaign progress, queue depth, average open rate and system status at a glance."},{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-2.png?rev=3795678","caption":"The campaign editor, with list assignment, shortcodes, send-mode options and per-campaign analytics."},{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-3.png?rev=3795678","caption":"SMTP settings, with your saved profiles and a test-connection button before you trust a server with a campaign."},{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-4.png?rev=3795678","caption":"Uploading an email list, showing the accepted formats and the validation applied on import."},{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-5.png?rev=3795678","caption":"The suppression list, with reasons, CSV import and manual entry."},{"src":"https:\/\/ps.w.org\/prime9ai-campaign-sender\/assets\/screenshot-6.png?rev=3795678","caption":"Sending settings: batch size, interval, rate limits, validation and GDPR data retention."}],"raw_content":"<!--section=description-->\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p>Everything in this plugin is free and fully functional, with no limits on subscribers or campaigns.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Campaign management<\/strong> \u2014 create, edit, duplicate and delete campaigns with a full WordPress rich text editor.<\/li>\n<li><strong>Two sending modes<\/strong> \u2014 Send Now, or Schedule for a specific date and time (timezone-aware).<\/li>\n<li><strong>Slow sending engine<\/strong> \u2014 configurable batch size, sending interval, and maximum execution time per cron run, with a processing lock so runs never overlap.<\/li>\n<li><strong>SMTP profiles<\/strong> \u2014 store several mail servers and switch the active one, with passwords encrypted at rest using AES-256-CBC.<\/li>\n<li><strong>Test connection<\/strong> \u2014 send a real test message before you trust a server with a campaign.<\/li>\n<li><strong>CSV \/ TSV list import<\/strong> \u2014 automatic email validation, de-duplication, and suppression filtering on import. Large lists are split into batches automatically.<\/li>\n<li><strong>Open and click tracking<\/strong> \u2014 signed tracking links, so analytics cannot be forged and the redirect cannot be abused.<\/li>\n<li><strong>One-click unsubscribe<\/strong> \u2014 token-verified, adds the address to the suppression list and immediately drops any queued messages for it.<\/li>\n<li><strong>Suppression list<\/strong> \u2014 manual entries, CSV import, automatic unsubscribes, and optional auto-suppression on bounce.<\/li>\n<li><strong>Rate limiting<\/strong> \u2014 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.<\/li>\n<li><strong>Retries and bounces<\/strong> \u2014 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.<\/li>\n<li><strong>Validation before sending<\/strong> \u2014 optional MX record checks and optional disposable-address blocking.<\/li>\n<li><strong>GDPR controls<\/strong> \u2014 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.<\/li>\n<li><strong>Debug log viewer<\/strong> \u2014 colour-coded, filterable, downloadable, and off by default.<\/li>\n<\/ul>\n\n<p>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.<\/p>\n\n<h4>A note on deliverability<\/h4>\n\n<p>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.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any service run by its author.<\/p>\n\n<p><strong>Your SMTP server<\/strong><\/p>\n\n<p>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.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>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.<\/p>\n\n<p>Open and click tracking records the recipient's email address, the campaign, and the clicked URL. Tracking can be disabled entirely under <strong>Campaign Sender \u2192 Settings<\/strong>. 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.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>, search for Prime9AI Campaign Sender, then install and activate it.<\/li>\n<li>Go to <strong>Campaign Sender \u2192 SMTP Settings<\/strong> and add your mail server as a profile. Use <strong>Test Connection<\/strong> to confirm it works.<\/li>\n<li>Go to <strong>Campaign Sender \u2192 Email Lists<\/strong> and upload a CSV or TSV file of addresses.<\/li>\n<li>Go to <strong>Campaign Sender \u2192 Campaigns \u2192 Add New<\/strong>, write your message, assign one or more lists, and pick a send mode.<\/li>\n<li>Check <strong>Campaign Sender \u2192 Settings<\/strong> to set your batch size and interval before starting the campaign.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20email%20through%20a%20third-party%20service%3F\"><h3>Does this send email through a third-party service?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20wp-cron%20need%20to%20be%20enabled%3F\"><h3>Does WP-Cron need to be enabled?<\/h3><\/dt>\n<dd><p>Yes. The sending queue is driven by WP-Cron. If you have set <code>DISABLE_WP_CRON<\/code> to true, configure a real system cron that hits <code>wp-cron.php<\/code> at 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.<\/p><\/dd>\n<dt id=\"how%20many%20subscribers%20and%20campaigns%20can%20i%20have%3F\"><h3>How many subscribers and campaigns can I have?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"how%20do%20i%20avoid%20being%20marked%20as%20spam%3F\"><h3>How do I avoid being marked as spam?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"where%20are%20my%20uploaded%20lists%20stored%3F\"><h3>Where are my uploaded lists stored?<\/h3><\/dt>\n<dd><p>As CSV files under <code>wp-content\/uploads\/prime9ai-campaign-sender\/lists\/<\/code>, with unguessable filenames and server-level deny rules where the server supports them. They are never exposed through a public URL.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20someone%20unsubscribes%3F\"><h3>What happens when someone unsubscribes?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translation-ready%3F\"><h3>Is the plugin translation-ready?<\/h3><\/dt>\n<dd><p>Yes. All user-facing strings use the <code>prime9ai-campaign-sender<\/code> text domain, and a POT file ships in <code>languages\/<\/code> for translators.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20sending%20limit%20is%20reached%3F\"><h3>What happens when a sending limit is reached?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"what%20counts%20as%20a%20bounce%3F\"><h3>What counts as a bounce?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20an%20smtp%20plugin%3F\"><h3>How is this different from an SMTP plugin?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>First release on wordpress.org.<\/li>\n<\/ul>","raw_excerpt":"Send email campaigns from WordPress through your own SMTP server, paced slowly over time to protect deliverability.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363222"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rinkeshchandra"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363222"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363222"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363222"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363222"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363222"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}