$options Plugin options. */ public function __construct( $options = array() ) { parent::__construct( 'robotstxt-smtp-newsletter', $options ); // Configure batch_size from turbo (standard Newsletter pattern). if ( ! empty( $options['turbo'] ) ) { $this->batch_size = max( 1, (int) $options['turbo'] ); } } /** * Get speed (emails per hour) for Newsletter engine. * * Standard Newsletter addons don't implement this, but we do * to allow dynamic speed calculation based on rate limits. * * @return int */ public function get_speed() { return $this->speed; } /** * Enqueue single email to database. * * @param \TNP_Mailer_Message $message Message to enqueue. * * @return bool|WP_Error True on success, WP_Error on failure. */ public function send( $message ) { $email = Email_Message::from_newsletter_message( $message ); $queue = Queue::get_instance(); $queue_id = $queue->enqueue( $email ); if ( ! $queue_id ) { return new \WP_Error( self::ERROR_GENERIC, __( 'Failed to enqueue email', 'robotstxt-smtp-newsletter' ) ); } return true; } /** * Enqueue chunk of emails in bulk. * * @param array<\TNP_Mailer_Message> $messages Messages to enqueue. * * @return bool|WP_Error True on success, WP_Error on failure. */ public function send_chunk( $messages ) { $emails = array_map( array( Email_Message::class, 'from_newsletter_message' ), $messages ); $queue = Queue::get_instance(); $queue_ids = $queue->enqueue_bulk( $emails ); if ( count( $queue_ids ) !== count( $messages ) ) { return new \WP_Error( self::ERROR_GENERIC, sprintf( /* translators: %d: number of emails that failed to enqueue */ __( '%d emails failed to enqueue', 'robotstxt-smtp-newsletter' ), count( $messages ) - count( $queue_ids ) ) ); } return true; } }