20) { for ($i = 1; $i < count($wp_cron_calls); $i++) { $diff = $wp_cron_calls[$i] - $wp_cron_calls[$i - 1]; $total += $diff; if ($wp_cron_calls_min == 0 || $wp_cron_calls_min > $diff) { $wp_cron_calls_min = $diff; } if ($wp_cron_calls_max < $diff) { $wp_cron_calls_max = $diff; } } $wp_cron_calls_avg = (int) ($total / (count($wp_cron_calls) - 1)); } if ($controls->is_action('delete_logs')) { $files = glob(WP_CONTENT_DIR . '/logs/newsletter/*.txt'); foreach ($files as $file) { if (is_file($file)) unlink($file); } $secret = NewsletterModule::get_token(8); update_option('newsletter_logger_secret', $secret); $controls->messages = 'Logs deleted'; } if ($controls->is_action('reschedule')) { wp_clear_scheduled_hook('newsletter'); wp_schedule_event(time() + 30, 'newsletter', 'newsletter'); $controls->add_message_done(); } if ($controls->is_action('trigger')) { Newsletter::instance()->hook_newsletter(); $controls->messages = 'Triggered'; } if ($controls->is_action('conversion')) { $this->logger->info('Maybe convert to utf8mb4'); require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); if (function_exists('maybe_convert_table_to_utf8mb4')) { $r = maybe_convert_table_to_utf8mb4(NEWSLETTER_EMAILS_TABLE); if (!$r) { $controls->errors .= 'It was not possible to run the conversion for the table ' . NEWSLETTER_EMAILS_TABLE . ' - '; $controls->errors .= $wpdb->last_error . '
'; } $r = maybe_convert_table_to_utf8mb4(NEWSLETTER_USERS_TABLE); if (!$r) { $controls->errors .= 'It was not possible to run the conversion for the table ' . NEWSLETTER_EMAILS_TABLE . ' - '; $controls->errors .= $wpdb->last_error . '
'; } $controls->messages = 'Done.'; } else { $controls->errors = 'Table conversion function not available'; } Newsletter::instance()->hook_newsletter(); $controls->messages = 'Triggered'; } if ($controls->is_action('test')) { if (!NewsletterModule::is_email($controls->data['test_email'])) { $controls->errors = 'The test email address is not set or is not correct.'; } if (empty($controls->errors)) { $options = $controls->data; if ($controls->data['test_email'] == $this->options['sender_email']) { $controls->messages .= 'Warning: you are using as test email the same address configured as sender in main configuration. Test can fail because of that.
'; } $message = NewsletterMailerAddon::get_test_message($controls->data['test_email'], 'Newsletter test email at ' . date(DATE_ISO8601)); $r = $this->deliver($message); if (!is_wp_error($r)) { $options['mail'] = 1; $controls->messages .= 'SUCCESS
'; $controls->messages .= 'Anyway if the message does not appear the mailbox (check even the spam folder) you can '; $controls->messages .= 'read more here.'; } else { $options['mail'] = 0; $options['mail_error'] = $r->get_error_message(); $controls->errors .= 'FAILED (' . $r->get_error_message() . ')
'; if (!empty($this->options['return_path'])) { $controls->errors .= '- Try to remove the return path on main settings.
'; } $controls->errors .= '' . __('Read more', 'newsletter') . '.'; $parts = explode('@', $this->options['sender_email']); $sitename = strtolower($_SERVER['SERVER_NAME']); if (substr($sitename, 0, 4) == 'www.') { $sitename = substr($sitename, 4); } if (strtolower($sitename) != strtolower($parts[1])) { $controls->errors .= '- Try to set on main setting a sender address with the same domain of your blog: ' . $sitename . ' (you are using ' . $this->options['sender_email'] . ')
'; } } $this->save_options($options, 'status'); } } if ($controls->is_action( 'stats_email_column_upgrade') ) { $this->query( "alter table " . NEWSLETTER_STATS_TABLE . " drop index email_id" ); $this->query( "alter table " . NEWSLETTER_STATS_TABLE . " drop index user_id" ); $this->query( "alter table `" . NEWSLETTER_STATS_TABLE . "` modify column `email_id` int(11) not null default 0" ); $this->query( "create index email_id on " . NEWSLETTER_STATS_TABLE . " (email_id)" ); $this->query( "create index user_id on " . NEWSLETTER_STATS_TABLE . " (user_id)" ); $controls->add_message_done(); update_option('newsletter_stats_email_column_upgraded', true); } $options = $this->get_options('status'); // Compute the number of newsletters ongoing and other stats $emails = $wpdb->get_results("select * from " . NEWSLETTER_EMAILS_TABLE . " where status='sending' and send_on<" . time() . " order by id asc"); $total = 0; $queued = 0; foreach ($emails as $email) { $total += $email->total; $queued += $email->total - $email->sent; } $speed = Newsletter::$instance->options['scheduler_max']; function tnp_status_print_flag($condition) { switch ($condition) { case 0: echo ' KO'; break; case 1: echo 'OK'; break; case 2: echo 'MAYBE'; break; } } ?>

init(); ?>

Mailing test

Parameter Action
Mailing KO OK A test has never run. Last test failed with error "". Last test was successful. If you didn't receive the test email:
  1. If you set the Newsletter SMTP, do a test from that panel
  2. If you're using a integration extension do a test from its configuration panel
  3. If previous points do not apply to you, ask for support to your provider reporting the emails from your blog are not delivered

Read more to solve your issues, if any.
Email: text_email('test_email') ?> button('test', __('Send a test message')) ?>

General checks

get_newsletter_page_id(); $page = $this->get_newsletter_page(); $condition = 1; if ($page_id) { if (!$page || $page->post_status !== 'publish') { $condition = 0; } } else { $condition = 2; } ?> get_newsletter_page_id(); $page = $this->get_newsletter_page(); $condition = 1; if ($page_id) { if (!$page) { $condition = 0; } else { $content = $page->post_content; if (strpos($content, '[newsletter]') === false && strpos($content, '[newsletter ') === false) { $condition = 2; } } } ?> options['return_path']; if (!empty($return_path)) { list($return_path_local, $return_path_domain) = explode('@', $return_path); } $sender = $this->options['sender_email']; if (!empty($sender)) { list($sender_local, $sender_domain) = explode('@', $sender); } ?> $data) { if ($key == 'newsletter') { $res = true; break; } } } ?> get_error_message(); } else { if (wp_remote_retrieve_response_code($response) != 200) { $res = false; $message = wp_remote_retrieve_response_message($response); } } ?> get_error_message(); } else { if (wp_remote_retrieve_response_code($response) != 200) { $res = false; $condition = 0; $message = wp_remote_retrieve_response_message($response); } } ?> $send_mean) { $send_min = $send_mean; } if ($send_max < $send_mean) { $send_max = $send_mean; } if (isset($send_calls[$i][3])) { $send_completed++; } } $send_mean = $send_total_time / $send_total_emails; ?> */ ?>
Parameter Action
Dedicated page
The blog page Newsletter uses for messages
Newsletter is using a neutral page to show messages, if you want to use a dedicated page, configure it on main settings. A dedicated page is set but it is no more available or no more published. Review the dedicated page on main settings.
Dedicated page content
The page seems to not contain the [newsletter], but sometime it cannot be detected if you use a visual composer. Please, check the page. The dedicated page seems to not be available.
Add-ons installable No able to check, just try the add-ons manager one click install The add-ons manager can install our add-ons The plugins dir could be read-only, you can install add-ons uploading the package from the plugins panel (or uploading them directly via FTP). This is unusual you should ask te provider about file and folder permissions.
Delivering   Delivering newsletters to about recipients. At speed of emails per hour it will take hours to finish. Nothing delivering right now
Mailer   get_mailer(); $name = 'Unknown'; if (is_object($mailer)) { if (method_exists($mailer, 'get_description')) { $name = $mailer->get_description(); } else { $name = get_class($mailer); } } ?>
Return path OK MAYBE OK Some providers require the return path domain to be identical to the sender domain . See the main settings.
Addons update Newsletter Addons update is disabled (probably in your wp-config.php file the constant NEWSLETTER_EXTENSION_UPDATE is set to true) Newsletter Addons can be updated
Newsletter delivery engine job No next execution is planned. button('reschedule', 'Reset') ?> The scheduler is very late: seconds (read more) button('trigger', 'Trigger') ?> Next execution is planned in seconds (negative values are ok).
Newsletter schedule KO OK The Newsletter schedule is not present probably another plugin is interfering with the starndard WordPress schuling system.
WordPress registered schedules:
$data) { echo esc_html($key . ' - ' . $data['interval']) . ' seconds
'; } } ?>
Action call KO OK The blog is not responding to Newsletter URLs: ask the provider or your IT consultant to check this problem. Report the URL and error below
Error:
Url:
Addons version check
Your blog can check the professional addon updates?
The blog cannot contact www.thenewsletterplugin.com to check the license or the extension versions.
Error:
Send details 1) { ?> KO OK 1) { ?> Sending an email is taking more than 1 second, rather slow. Read more. Average time to send an email: seconds
0) { ?> Max speed: emails per hour
Max mean time measured: seconds
Min mean time measured: seconds
Total email in the sample:
Runs in the sample:
Runs prematurely interrupted: %
Cron warnings
Newsletter can notify of WP scheduler problems?
Scheduler warnings are disabled in your wp-config.php with the constant NEWSLETTER_CRON_WARNINGS set to true.
PHP memory limit MAYBE MAYBE OK WordPress WP_MEMORY_LIMIT is set to megabyte but your PHP setting could allow more than that. Anyway we suggest to set the value to at least 64M. Read more. This value is too low you should increase it adding define('WP_MEMORY_LIMIT', '64M'); to your wp-config.php. Read more. The value should be fine, it depends on how many plugins you're running and how many resource are required by your theme. Blank pages may happen with low memory problems. Eventually increase it adding define('WP_MEMORY_LIMIT', '128M'); to your wp-config.php. Read more.
Your Server MAYBE OK IP:
Name:
Log folder The log folder is
Cannot create the folder or it is not writable.

WordPress Scheduler/Cron

NEWSLETTER_CRON_INTERVAL * 1.1) ? 0 : 1; ?> get_error_message(); } else { if (wp_remote_retrieve_response_code($response) != 200) { $res = false; $message = wp_remote_retrieve_response_message($response); } } $condition = !$res ? 0 : 1; ?>
Parameter Action
WordPress scheduler auto trigger The constant DISABLE_WP_CRON is set to true (probably in wp-config.php). That disables the scheduler auto triggering and it's good ONLY if you setup an external trigger.
Alternate cron   Using the alternate cron trigger.
Cron calls The blog cron system is NOT triggered enough often.
Trigger interval: average  s, max  s, min  s
Read more
WordPress scheduler auto trigger call The blog cannot auto-trigger the internal scheduler, if an external trigger is used this could not be a real problem.
Error:
Url:

Read more

WordPress

Parameter Action
WordPress debug mode WordPress is in debug mode it is not recommended on a production system. See the constant WP_DEBUG inside the wp-config.php.
Blog Charset Charset:
It is recommended to use the UTF-8 charset but the conversion could be tricky. If you're not experiencing problem, leave things as is.
Home URL Value:
Your home URL is not absolute, emails require absolute URLs. Probably you have a protocol agnostic plugin installed to manage both HTTPS and HTTP in your blog.
WP_CONTENT_URL Value:
Your content URL is not absolute, emails require absolute URLs when they have images inside. Newsletter tries to deal with this problem but when a problem with images persists, you should try to remove from your wp-config.php the WP_CONTENT_URL define and check again.
WordPress transients Transients cannot be delete. This can block the delivery engine. Usually it is due to a not well coded plugin installed.

PHP

Parameter Action
PHP version KO OK Your PHP version is
Newsletter plugin works correctly with PHP version 5.6 or greater. Ask your provider to upgrade your PHP. Your version is unsupported even by the PHP community.
PHP execution time limit Your PHP execution time limit is seconds. It cannot be changed and it is too lower to grant the maximum delivery rate of Newsletter. Your PHP execution time limit is seconds and can be eventually changed by Newsletter.
Curl version KO OK '; echo 'SSL Version: ' . $version['ssl_version'] . '
'; } ?>
Opcache KO You have the PHP opcache active with file validation disable so every blog plugins update needs a webserver restart!

Database

get_var("select @@wait_timeout"); $condition = ($wait_timeout < 30) ? 0 : 1; ?> query("drop table if exists {$wpdb->prefix}newsletter_test"); $res = $wpdb->query("create table if not exists {$wpdb->prefix}newsletter_test (id int(20))"); $condition = $res === false ? 0 : 1; ?> query("alter table {$wpdb->prefix}newsletter_test add column id1 int(20)"); $condition = $res === false ? 0 : 1; ?> query("drop table if exists {$wpdb->prefix}newsletter_test"); ?> get_var( $wpdb->prepare( 'SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s', DB_NAME, NEWSLETTER_STATS_TABLE, 'email_id' ) ); $to_upgrade = strtoupper( $data_type ) == 'INT' ? false : true; ?>
Parameter Action
Database Charset charset != 'utf8mb4') { ?> KO OK Charset: charset; ?>
charset != 'utf8mb4') { ?> The recommended charset for your database is utf8mb4 to avoid possible saving errors when you use emoji. Read the WordPress Codex conversion instructions (skilled technicia required). If you experience newsletter saving database error button('conversion', 'Try tables upgrade') ?>
Database wait timeout Your database wait timeout is seconds
That value is low and could produce database connection errors while sending emails or during long import sessions. Ask the provider to raise it at least to 60 seconds.
Database table creation Check the privileges of the user you use to connect to the database, it seems it cannot create tables.
(last_error) ?>)
Database table change Check the privileges of the user you use to connect to the database, it seems it cannot change the tables. It's require to update the plugin.
(last_error) ?>)
Database stats table upgrade button( 'stats_email_column_upgrade', 'Stats table upgrade' ) ?>

3rd party plugins

Plugin Action
Plugin load filter MAY BE Be sure Newsletter is set as active in EVERY context.

General parameters

*/ ?>
Parameter Value
Newsletter version
NEWSLETTER_MAX_EXECUTION_TIME
NEWSLETTER_CRON_INTERVAL
WordPress plugin url
Filters: '; foreach ($filters as &$filter) { foreach ($filter as &$entry) { echo '
  • '; if (is_array($entry['function'])) echo esc_html(get_class($entry['function'][0]) . '->' . $entry['function'][1]); else echo esc_html($entry['function']); echo '
  • '; } } echo ''; } ?>

    This value should contains the full URL to your plugin folder. If there are filters attached, the value can be different from the original generated by WordPress and sometime worng.

    Absolute path
    Tables Prefix prefix; ?>

    Log files

    button('delete_logs', 'Delete all'); ?>

    Database Tables

    prefix ?>newsletter

    get_results("describe {$wpdb->prefix}newsletter"); ?>
    Field Type Null Key Default Extra
    Field) ?> Type) ?> Null) ?> Key) ?> Default) ?> Extra) ?>

    prefix ?>newsletter_emails

    get_results("show full columns from {$wpdb->prefix}newsletter_emails"); ?>
    Field Type Collation Null Key Default Extra
    Field) ?> Type) ?> Collation) ?> Null) ?> Key) ?> Default) ?> Extra) ?>

    Extensions

    Update plugins data