diff --git a/changelog.txt b/changelog.txt
index d9c7fa2..fa8ef3f 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,10 @@
+= 2.2.4 =
+
+* CRITICAL FIX: Speed calculation now uses actual NEWSLETTER_CRON_INTERVAL value
+* FIXED: Batch_size was being divided by 5 due to incorrect cron interval assumption
+* IMPROVED: Plugin now dynamically calculates speed based on actual Newsletter cron interval
+* IMPROVED: Supports any cron interval (60s, 300s, etc.) without hardcoded assumptions
+
= 2.2.3 =
* CRITICAL FIX: Overridden get_emails_per_run() to bypass Newsletter's internal calculation
diff --git a/includes/class-plugin.php b/includes/class-plugin.php
index 406a102..8d8b5b4 100644
--- a/includes/class-plugin.php
+++ b/includes/class-plugin.php
@@ -195,13 +195,24 @@ class Plugin extends \NewsletterMailerAddon {
$speed = $this->calculate_optimal_speed( $smtp_settings );
// CRITICAL: For queue-based architecture, speed must be high enough
- // that Newsletter loads all emails at once. Newsletter calculates
- // batch_size = speed / (60 / cron_interval). With default 5-minute cron:
- // batch_size = speed / 12. To get batch_size = configured value,
- // we need: speed = batch_size * 12.
- $batch_size = $settings['batch_size'] ?? 10;
- $speed_multiplier = 12; // Assumes 5-minute cron (12 executions per hour).
- $calculated_speed = max( $speed, $batch_size * $speed_multiplier );
+ // that Newsletter loads all emails at once. Newsletter calculates:
+ // batch_size = speed / (3600 / NEWSLETTER_CRON_INTERVAL)
+ // To get batch_size = configured value, we need:
+ // speed = batch_size * (3600 / NEWSLETTER_CRON_INTERVAL)
+ $batch_size = $settings['batch_size'] ?? 10;
+
+ // Ensure NEWSLETTER_CRON_INTERVAL is loaded
+ if ( ! defined( 'NEWSLETTER_CRON_INTERVAL' ) ) {
+ $cron_file = WP_PLUGIN_DIR . '/newsletter/includes/cron.php';
+ if ( file_exists( $cron_file ) ) {
+ require_once $cron_file;
+ }
+ }
+
+ // Calculate runs per hour based on Newsletter's cron interval
+ $cron_interval = defined( 'NEWSLETTER_CRON_INTERVAL' ) ? NEWSLETTER_CRON_INTERVAL : 300;
+ $runs_per_hour = (int) ( 3600 / $cron_interval );
+ $calculated_speed = max( $speed, $batch_size * $runs_per_hour );
// Newsletter expects 'turbo' for batch_size and 'speed' for emails/hour.
$mailer_options = array(
diff --git a/readme.txt b/readme.txt
index 5ad8569..a90eee4 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,7 +4,7 @@ Tags: newsletter, smtp, email, bulk, queue, worker, amazonses, statistics
Requires at least: 4.7
Tested up to: 6.9
Requires PHP: 7.2
-Stable tag: 2.2.3
+Stable tag: 2.2.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -141,6 +141,12 @@ Yes. The plugin integrates with ROBOTSTXT SMTP rate limiting system to ensure yo
== Changelog ==
+= 2.2.4 =
+* CRITICAL FIX: Speed calculation now uses actual NEWSLETTER_CRON_INTERVAL value
+* FIXED: Batch_size was being divided by 5 due to incorrect cron interval assumption
+* IMPROVED: Plugin now dynamically calculates speed based on actual Newsletter cron interval
+* IMPROVED: Supports any cron interval (60s, 300s, etc.) without hardcoded assumptions
+
= 2.2.3 =
* CRITICAL FIX: Overridden get_emails_per_run() to bypass Newsletter's internal calculation
* FIXED: Newsletter was calculating batch = speed / 12, resulting in only 8-16 emails per execution
@@ -185,6 +191,9 @@ Yes. The plugin integrates with ROBOTSTXT SMTP rate limiting system to ensure yo
== Upgrade Notice ==
+= 2.2.4 =
+CRITICAL: Fixed speed calculation to work with any Newsletter cron interval. Resolves batch_size division issues.
+
= 2.2.3 =
CRITICAL: Fixed Newsletter loading only 8-16 emails per execution. Now correctly loads all emails based on configured batch_size.
diff --git a/robotstxt-smtp-newsletter.php b/robotstxt-smtp-newsletter.php
index 949ee33..bfd98d9 100644
--- a/robotstxt-smtp-newsletter.php
+++ b/robotstxt-smtp-newsletter.php
@@ -3,7 +3,7 @@
* Plugin Name: Newsletter - SMTP (by ROBOTSTXT)
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-newsletter
* Description: Integrates ROBOTSTXT SMTP configuration with Newsletter plugin for efficient bulk email delivery with database-backed queue and external workers.
- * Version: 2.2.3
+ * Version: 2.2.4
* Requires at least: 4.7
* Requires PHP: 7.2
* Security: robotstxt@robotstxt.es
@@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
// Plugin constants.
-define( 'ROBOTSTXT_SMTP_NEWSLETTER_VERSION', '2.2.3' );
+define( 'ROBOTSTXT_SMTP_NEWSLETTER_VERSION', '2.2.4' );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_FILE', __FILE__ );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_PATH', plugin_dir_path( __FILE__ ) );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_URL', plugin_dir_url( __FILE__ ) );
diff --git a/update.json b/update.json
index a1423ce..dba7501 100644
--- a/update.json
+++ b/update.json
@@ -1,19 +1,19 @@
{
"name": "Newsletter - SMTP (by ROBOTSTXT)",
"slug": "robotstxt-smtp-newsletter",
- "version": "2.2.3",
+ "version": "2.2.4",
"author": "ROBOTSTXT",
"homepage": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-newsletter",
- "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-newsletter/releases/download/2.2.3/robotstxt-smtp-newsletter-2.2.3.zip",
+ "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-newsletter/releases/download/2.2.4/robotstxt-smtp-newsletter-2.2.4.zip",
"requires": "4.7",
"tested": "6.9",
"requires_php": "7.2",
"last_updated": "2026-02-16",
"description": "Integrates ROBOTSTXT SMTP configuration with Newsletter plugin for reliable bulk email delivery with database-backed queue and external workers. Provides persistent email queue, parallel processing, automatic retry, and comprehensive campaign statistics.",
- "changelog": "
2.2.3 - 2026-02-16
- CRITICAL: Overridden get_emails_per_run() to bypass Newsletter's internal calculation
- Fixed: Newsletter was calculating batch = speed / 12, resulting in only 8-16 emails per execution
- Fixed: Plugin now directly returns configured batch_size for proper queue loading
- Technical: Added get_emails_per_run() override in Plugin class
2.2.2 - 2026-02-16
- Fixed: Newsletter now correctly respects configured batch_size when enqueuing emails
- Fixed: Emails are now enqueued all at once to database instead of gradually
- Improved: Added public $batch property that Newsletter reads directly
- Improved: Added get_batch_size() method for Newsletter compatibility
- Technical: Mailers expose batch_size through multiple interfaces for Newsletter compatibility
2.2.1 - 2026-02-16
- Added: MultiSite detection in settings page with tailored worker commands
- Added: Worker script now supports --url parameter for MultiSite environments
- Improved: Settings page automatically displays installation-specific worker setup instructions
- Improved: Worker documentation with MultiSite usage examples
- Improved: README with dedicated MultiSite Installations section
- Technical: Worker script parses --url parameter and sets appropriate $_SERVER variables
- Technical: Settings page uses is_multisite() and get_site_url() for detection and URL generation
2.2.0 - 2026-02-16
- MAJOR: Database-backed email queue for persistent, reliable email delivery
- MAJOR: External CLI worker script for asynchronous email processing
- Added: Queue Status widget with real-time statistics (pending, processing, sent, failed)
- Added: Recent Campaigns section with key metrics in settings page
- Added: Email Queue admin page to view all queued and sent emails
- Added: Statistics admin page with campaign performance metrics
- Added: Parallel worker support for high-volume sending (10+ workers simultaneously)
- Added: Automatic retry with exponential backoff (up to 3 attempts: 5min → 15min → 30min)
- Added: Campaign statistics tracking (start time, duration, speed, success rate)
- Changed: Emails are now queued to database instead of sent immediately
- Changed: Settings page reorganized with Queue Status, Recent Campaigns, and Worker Configuration sections
- Changed: Campaign statistics now grouped by unique Newsletter ID instead of campaign name
- Removed: max_per_connection setting (no longer needed with worker architecture)
- Removed: Direct PHPMailer usage (replaced with wp_mail() in workers)
- Fixed: Duplicate campaign statistics for campaigns with same name but different IDs
- Fixed: Worker command documentation (corrected parallel worker syntax)
- BREAKING: Manual worker setup required - emails no longer send automatically
- BREAKING: System cron or process supervisor required for production use
- Technical: New database tables for queue and statistics with automatic creation on activation
- Technical: Microsecond precision timestamps for accurate performance metrics
- Security: CLI-only worker script with SQL injection prevention and capability checks
2.1.0 - 2026-02-09
- Changed: Uninstall behavior: plugin no longer performs cleanup on uninstall, all data cleanup is now handled by the core SMTP plugin
- Changed: This ensures Newsletter configuration is preserved when only the add-on is removed, and properly cleaned when the core plugin is uninstalled
- Technical: Simplified uninstall.php to delegate all cleanup responsibility to core SMTP plugin
2.0.1 - 2026-01-29
- Changed: Removed Network requirement from plugin headers to allow single-site activation
2.0.0 - 2026-01-29
- Changed: Updated compatibility with SMTP (by ROBOTSTXT) plugin 2.0.0
- Changed: Enhanced integration with core SMTP plugin security improvements
- Improved: Better error handling and validation
1.0.0 - 2026-01-29
- Added: Initial release with SMTPKeepAlive support
- Added: Amazon SES API integration for optimized delivery
- Performance: 20-30x faster bulk email sending compared to standard wp_mail()
",
+ "changelog": "2.2.4 - 2026-02-16
- CRITICAL: Speed calculation now uses actual NEWSLETTER_CRON_INTERVAL value
- Fixed: Batch_size was being divided by 5 due to incorrect cron interval assumption
- Improved: Plugin now dynamically calculates speed based on actual Newsletter cron interval
- Technical: Loads Newsletter's cron.php to detect actual interval, supports any cron interval without hardcoded assumptions
2.2.3 - 2026-02-16
- CRITICAL: Overridden get_emails_per_run() to bypass Newsletter's internal calculation
- Fixed: Newsletter was calculating batch = speed / 12, resulting in only 8-16 emails per execution
- Fixed: Plugin now directly returns configured batch_size for proper queue loading
- Technical: Added get_emails_per_run() override in Plugin class
2.2.2 - 2026-02-16
- Fixed: Newsletter now correctly respects configured batch_size when enqueuing emails
- Fixed: Emails are now enqueued all at once to database instead of gradually
- Improved: Added public $batch property that Newsletter reads directly
- Improved: Added get_batch_size() method for Newsletter compatibility
- Technical: Mailers expose batch_size through multiple interfaces for Newsletter compatibility
2.2.1 - 2026-02-16
- Added: MultiSite detection in settings page with tailored worker commands
- Added: Worker script now supports --url parameter for MultiSite environments
- Improved: Settings page automatically displays installation-specific worker setup instructions
- Improved: Worker documentation with MultiSite usage examples
- Improved: README with dedicated MultiSite Installations section
- Technical: Worker script parses --url parameter and sets appropriate $_SERVER variables
- Technical: Settings page uses is_multisite() and get_site_url() for detection and URL generation
2.2.0 - 2026-02-16
- MAJOR: Database-backed email queue for persistent, reliable email delivery
- MAJOR: External CLI worker script for asynchronous email processing
- Added: Queue Status widget with real-time statistics (pending, processing, sent, failed)
- Added: Recent Campaigns section with key metrics in settings page
- Added: Email Queue admin page to view all queued and sent emails
- Added: Statistics admin page with campaign performance metrics
- Added: Parallel worker support for high-volume sending (10+ workers simultaneously)
- Added: Automatic retry with exponential backoff (up to 3 attempts: 5min → 15min → 30min)
- Added: Campaign statistics tracking (start time, duration, speed, success rate)
- Changed: Emails are now queued to database instead of sent immediately
- Changed: Settings page reorganized with Queue Status, Recent Campaigns, and Worker Configuration sections
- Changed: Campaign statistics now grouped by unique Newsletter ID instead of campaign name
- Removed: max_per_connection setting (no longer needed with worker architecture)
- Removed: Direct PHPMailer usage (replaced with wp_mail() in workers)
- Fixed: Duplicate campaign statistics for campaigns with same name but different IDs
- Fixed: Worker command documentation (corrected parallel worker syntax)
- BREAKING: Manual worker setup required - emails no longer send automatically
- BREAKING: System cron or process supervisor required for production use
- Technical: New database tables for queue and statistics with automatic creation on activation
- Technical: Microsecond precision timestamps for accurate performance metrics
- Security: CLI-only worker script with SQL injection prevention and capability checks
2.1.0 - 2026-02-09
- Changed: Uninstall behavior: plugin no longer performs cleanup on uninstall, all data cleanup is now handled by the core SMTP plugin
- Changed: This ensures Newsletter configuration is preserved when only the add-on is removed, and properly cleaned when the core plugin is uninstalled
- Technical: Simplified uninstall.php to delegate all cleanup responsibility to core SMTP plugin
2.0.1 - 2026-01-29
- Changed: Removed Network requirement from plugin headers to allow single-site activation
2.0.0 - 2026-01-29
- Changed: Updated compatibility with SMTP (by ROBOTSTXT) plugin 2.0.0
- Changed: Enhanced integration with core SMTP plugin security improvements
- Improved: Better error handling and validation
1.0.0 - 2026-01-29
- Added: Initial release with SMTPKeepAlive support
- Added: Amazon SES API integration for optimized delivery
- Performance: 20-30x faster bulk email sending compared to standard wp_mail()
",
"sections": {
- "description": "Integrates ROBOTSTXT SMTP configuration with Newsletter plugin for reliable bulk email delivery with database-backed queue and external workers. Version 2.2.3 fixes critical batch loading issue where Newsletter was only loading 8-16 emails per execution. Emails are queued to database and processed by external CLI workers, providing reliability, scalability, and detailed monitoring.",
- "changelog": "2.2.3 - 2026-02-16
- CRITICAL: Fixed Newsletter loading only 8-16 emails per execution
- Fixed: Overridden get_emails_per_run() to return configured batch_size directly
2.2.2 - 2026-02-16
- Fixed: Batch size enforcement - emails now enqueue correctly all at once
- Improved: Newsletter compatibility with $batch property and get_batch_size() method
2.2.1 - 2026-02-16
- Added: MultiSite detection with tailored worker commands
- Added: Worker --url parameter support for MultiSite
- Improved: Installation-specific worker setup instructions
2.2.0 - 2026-02-16
- MAJOR: Database-backed email queue for persistent, reliable email delivery
- MAJOR: External CLI worker script for asynchronous email processing
- Added: Queue Status widget with real-time statistics
- Added: Recent Campaigns section with key metrics
- Added: Email Queue admin page
- Added: Statistics admin page with campaign metrics
- Added: Parallel worker support (10+ workers)
- Added: Automatic retry with exponential backoff
- Changed: Emails queued to database instead of sent immediately
- Changed: Campaign statistics grouped by Newsletter ID
- Removed: max_per_connection setting
- Fixed: Duplicate campaign statistics
- BREAKING: Manual worker setup required
"
+ "description": "Integrates ROBOTSTXT SMTP configuration with Newsletter plugin for reliable bulk email delivery with database-backed queue and external workers. Version 2.2.4 fixes speed calculation to work correctly with any Newsletter cron interval. Emails are queued to database and processed by external CLI workers, providing reliability, scalability, and detailed monitoring.",
+ "changelog": "2.2.4 - 2026-02-16
- CRITICAL: Fixed speed calculation for any Newsletter cron interval
- Fixed: Batch_size division issue resolved by dynamic interval detection
2.2.3 - 2026-02-16
- CRITICAL: Fixed Newsletter loading only 8-16 emails per execution
- Fixed: Overridden get_emails_per_run() to return configured batch_size directly
2.2.2 - 2026-02-16
- Fixed: Batch size enforcement - emails now enqueue correctly all at once
- Improved: Newsletter compatibility with $batch property and get_batch_size() method
2.2.1 - 2026-02-16
- Added: MultiSite detection with tailored worker commands
- Added: Worker --url parameter support for MultiSite
- Improved: Installation-specific worker setup instructions
2.2.0 - 2026-02-16
- MAJOR: Database-backed email queue for persistent, reliable email delivery
- MAJOR: External CLI worker script for asynchronous email processing
- Added: Queue Status widget with real-time statistics
- Added: Recent Campaigns section with key metrics
- Added: Email Queue admin page
- Added: Statistics admin page with campaign metrics
- Added: Parallel worker support (10+ workers)
- Added: Automatic retry with exponential backoff
- Changed: Emails queued to database instead of sent immediately
- Changed: Campaign statistics grouped by Newsletter ID
- Removed: max_per_connection setting
- Fixed: Duplicate campaign statistics
- BREAKING: Manual worker setup required
"
},
"banners": {
"low": "",