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')) { maybe_convert_table_to_utf8mb4(NEWSLETTER_EMAILS_TABLE); maybe_convert_table_to_utf8mb4(NEWSLETTER_USERS_TABLE); $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'] == $module->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 = new TNP_Mailer_Message(); $message->body = '

This is an HTML test email sent using the sender data set on Newsletter main setting. This is a link to an external site.

'; $message->body_text = 'This is a textual test email part sent using the sender data set on Newsletter main setting.'; $message->to = $controls->data['test_email']; $message->subject = 'Newsletter test email at ' . date(DATE_ISO8601); $message->from = $module->options['sender_email']; $message->from_name = $module->options['sender_name']; $r = $module->deliver($message); if (!is_wp_error($r)) { $options['mail'] = 1; $controls->messages .= 'SUCCESS
'; } else { $options['mail'] = 0; $options['mail_error'] = $r->get_error_message(); $controls->errors .= 'FAILED (' . $r->get_error_message() . ')
'; if (!empty($module->options['return_path'])) { $controls->errors .= '- Try to remove the return path on main settings.
'; } $controls->errors .= '' . __('Read more', 'newsletter') . '.'; $parts = explode('@', $module->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 ' . $module->options['sender_email'] . ')
'; } } $module->save_options($options, 'status'); } } $options = $module->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']; ?>

init(); ?>

General checks

options['return_path']; if (!empty($return_path)) { list($return_path_local, $return_path_domain) = explode('@', $return_path); } $sender = $module->options['sender_email']; if (!empty($sender)) { list($sender_local, $sender_domain) = explode('@', $sender); } ?> get_var("select @@wait_timeout"); ?> query("drop table if exists {$wpdb->prefix}newsletter_test"); $res = $wpdb->query("create table if not exists {$wpdb->prefix}newsletter_test (id int(20))"); ?> query("alter table {$wpdb->prefix}newsletter_test add column id1 int(20)"); ?> query("drop table if exists {$wpdb->prefix}newsletter_test"); ?> $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; $message = wp_remote_retrieve_response_message($response); } } ?> get_error_message(); } else { if (wp_remote_retrieve_response_code($response) != 200) { $res = false; $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
Add-ons installable MAYBE OK KO 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); } } ?>
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')) ?>
Opcache KO You have the PHP opcache active with file validation disable so every blog plugins update needs a webserver restart!
Return path OK MAYBE OK Some providers require the return path domain to be identical to the sender domain . See the main settings.
Blog Charset OK KO Charset:
Your blog charset is but 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.
PHP version KO OK Your PHP version is
Newsletter plugin works correctly with PHP version 5.3 or greater. Ask your provider to upgrade your PHP. Your version is unsupported even by the PHP community.
Curl version KO OK cUrl is not available, ask the provider to install it and activate the PHP cUrl library '; echo 'SSL Version: ' . $version['ssl_version'] . '
'; } ?>
Addons update OK MAYBE Newsletter Addons update is disabled (probably in your wp-config.php file) Newsletter Addons can be updated
PHP execution time limit OK KO Your PHP execution time limit is seconds and cannot be changed or 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
Home URL KO OK 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 KO OK 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.
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 KO OK 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 KO OK Check the privileges of the user you use to connect to the database, it seems it cannot create tables.
(last_error) ?>)
Database table change KO OK 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) ?>)
WordPress transients KO OK Transients cannot be delete. This can block the delivery engine. Usually it is due to a not well coded plugin installed.
Newsletter schedule timing KO OK 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
'; } } ?>
WordPress scheduler auto trigger MAYBE OK 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 NEWSLETTER_CRON_INTERVAL * 1.1) { ?> KO OK NEWSLETTER_CRON_INTERVAL * 1.1) { ?> The blog cron system is NOT triggered enough often.
Trigger interval: average  s, max  s, min  s
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:
WordPress scheduler auto trigger call KO OK The blog cannot autotrigger the internal scheduler, if an external trigger is used this could not be a real problem.
Error:
Url:
Extension version check KO OK The blog cannot contact www.thenewsletterplugin.com to check the license or the extension versions.
Error:
Addons update OK KO Addons update has been disabled.
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 MAYBE OK Scheduler warnings are disabled in your wp-config.php with the constant NEWSLETTER_CRON_WARNINGS set to true.
WordPress debug mode MAYBE OK WordPress is in debug mode it is not recommended on a production system. See the constant WP_DEBUG inside the wp-config.php.
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 KO OK The log folder is
Cannot create the folder or it is not writable.

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("describe {$wpdb->prefix}newsletter_emails"); ?>
    Field Type Null Key Default Extra
    Field) ?> Type) ?> Null) ?> Key) ?> Default) ?> Extra) ?>

    Extensions

    Update plugins data