This commit is contained in:
Javier Casares 2026-02-18 16:04:13 +00:00
commit ed2cc2f70a
5 changed files with 96 additions and 10 deletions

View file

@ -1,3 +1,9 @@
= 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
* FIXED: Plugin now directly returns configured batch_size for proper queue loading
= 2.2.2 = = 2.2.2 =
* FIXED: Newsletter now correctly respects configured batch_size when enqueuing emails * FIXED: Newsletter now correctly respects configured batch_size when enqueuing emails

View file

@ -126,6 +126,9 @@ class Plugin extends \NewsletterMailerAddon {
// Load text domain. // Load text domain.
add_action( 'init', array( $this, 'load_textdomain' ) ); add_action( 'init', array( $this, 'load_textdomain' ) );
// Force batch size in Newsletter cron.
add_filter( 'newsletter_max_emails', array( $this, 'filter_max_emails' ), 999 );
// Register admin pages. // Register admin pages.
if ( is_admin() ) { if ( is_admin() ) {
require_once ROBOTSTXT_SMTP_NEWSLETTER_PATH . 'admin/class-settings-page.php'; require_once ROBOTSTXT_SMTP_NEWSLETTER_PATH . 'admin/class-settings-page.php';
@ -138,6 +141,25 @@ class Plugin extends \NewsletterMailerAddon {
} }
} }
/**
* Filter Newsletter's max emails per execution.
*
* Forces Newsletter to use our configured batch_size.
*
* @param int $max_emails Newsletter's calculated max emails.
*
* @return int Our configured batch_size.
*/
public function filter_max_emails( $max_emails ) {
// Only apply if our addon is enabled.
$settings = $this->get_settings();
if ( empty( $settings['enabled'] ) ) {
return $max_emails;
}
return absint( $settings['batch_size'] ?? 10 );
}
/** /**
* Load plugin text domain for translations. * Load plugin text domain for translations.
* *
@ -172,10 +194,19 @@ class Plugin extends \NewsletterMailerAddon {
// Calculate optimal speed (emails per hour) based on rate limits. // Calculate optimal speed (emails per hour) based on rate limits.
$speed = $this->calculate_optimal_speed( $smtp_settings ); $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 );
// Newsletter expects 'turbo' for batch_size and 'speed' for emails/hour. // Newsletter expects 'turbo' for batch_size and 'speed' for emails/hour.
$mailer_options = array( $mailer_options = array(
'turbo' => $settings['batch_size'] ?? 10, 'turbo' => $batch_size,
'speed' => $speed, 'speed' => $calculated_speed,
); );
// Detect if Amazon SES is active. // Detect if Amazon SES is active.
@ -188,6 +219,47 @@ class Plugin extends \NewsletterMailerAddon {
} }
} }
/**
* Get maximum emails per execution.
*
* Newsletter checks this method to determine batch size.
*
* @return int
*/
public function get_max_emails() {
$settings = $this->get_settings();
return absint( $settings['batch_size'] ?? 10 );
}
/**
* Get batch size.
*
* Alternative method that Newsletter may check.
*
* @return int
*/
public function get_batch() {
return $this->get_max_emails();
}
/**
* Override Newsletter's calculation of emails per run.
*
* Newsletter normally calculates: batch = speed / runs_per_hour
* For queue-based architecture, we want to enqueue all emails at once.
*
* @return int Configured batch_size.
*/
public function get_emails_per_run() {
$settings = $this->get_settings();
if ( empty( $settings['enabled'] ) ) {
// If addon is disabled, use parent's calculation.
return parent::get_emails_per_run();
}
return absint( $settings['batch_size'] ?? 10 );
}
/** /**
* Calculate optimal speed (emails per hour) based on rate limits. * Calculate optimal speed (emails per hour) based on rate limits.
* *

View file

@ -4,7 +4,7 @@ Tags: newsletter, smtp, email, bulk, queue, worker, amazonses, statistics
Requires at least: 4.7 Requires at least: 4.7
Tested up to: 6.9 Tested up to: 6.9
Requires PHP: 7.2 Requires PHP: 7.2
Stable tag: 2.2.2 Stable tag: 2.2.3
License: GPLv2 or later License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html License URI: https://www.gnu.org/licenses/gpl-2.0.html
@ -141,6 +141,11 @@ Yes. The plugin integrates with ROBOTSTXT SMTP rate limiting system to ensure yo
== Changelog == == Changelog ==
= 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
* FIXED: Plugin now directly returns configured batch_size for proper queue loading
= 2.2.2 = = 2.2.2 =
* FIXED: Newsletter now correctly respects configured batch_size when enqueuing emails * FIXED: Newsletter now correctly respects configured batch_size when enqueuing emails
* FIXED: Emails are now enqueued all at once to database instead of gradually * FIXED: Emails are now enqueued all at once to database instead of gradually
@ -180,6 +185,9 @@ Yes. The plugin integrates with ROBOTSTXT SMTP rate limiting system to ensure yo
== Upgrade Notice == == Upgrade Notice ==
= 2.2.3 =
CRITICAL: Fixed Newsletter loading only 8-16 emails per execution. Now correctly loads all emails based on configured batch_size.
= 2.2.2 = = 2.2.2 =
Fixed batch size enforcement - emails now enqueue correctly all at once instead of gradually. Fixed batch size enforcement - emails now enqueue correctly all at once instead of gradually.

View file

@ -3,7 +3,7 @@
* Plugin Name: Newsletter - SMTP (by ROBOTSTXT) * Plugin Name: Newsletter - SMTP (by ROBOTSTXT)
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-newsletter * 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. * Description: Integrates ROBOTSTXT SMTP configuration with Newsletter plugin for efficient bulk email delivery with database-backed queue and external workers.
* Version: 2.2.2 * Version: 2.2.3
* Requires at least: 4.7 * Requires at least: 4.7
* Requires PHP: 7.2 * Requires PHP: 7.2
* Security: robotstxt@robotstxt.es * Security: robotstxt@robotstxt.es
@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) {
} }
// Plugin constants. // Plugin constants.
define( 'ROBOTSTXT_SMTP_NEWSLETTER_VERSION', '2.2.2' ); define( 'ROBOTSTXT_SMTP_NEWSLETTER_VERSION', '2.2.3' );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_FILE', __FILE__ ); define( 'ROBOTSTXT_SMTP_NEWSLETTER_FILE', __FILE__ );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_PATH', plugin_dir_path( __FILE__ ) ); define( 'ROBOTSTXT_SMTP_NEWSLETTER_PATH', plugin_dir_path( __FILE__ ) );
define( 'ROBOTSTXT_SMTP_NEWSLETTER_URL', plugin_dir_url( __FILE__ ) ); define( 'ROBOTSTXT_SMTP_NEWSLETTER_URL', plugin_dir_url( __FILE__ ) );

File diff suppressed because one or more lines are too long