45% newsletter-bulk-email

Code Review | Newsletter & Bulk Email Sender - Email Newsletter Plugin for WordPress

WordPress plugin Newsletter & Bulk Email Sender - Email Newsletter Plugin for WordPress scored 45% from 54 tests.

About plugin

  • Plugin page: newsletter-bulk-e...
  • Plugin version: 2.0.1
  • PHP compatiblity: 7.0+
  • PHP version: 7.4.16
  • WordPress compatibility: 4.7-5.8
  • WordPress version: 6.3.1
  • First release: Aug 18, 2021
  • Latest release: Aug 26, 2021
  • Number of updates: 7
  • Update frequency: every 1.1 days
  • Top authors: emailmarketingrun (100%)

Code review

54 tests

User reviews

1 review

Install metrics

40+ active / 4,261 total downloads

Benchmarks

Plugin footprint 47% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | Verifying that this plugin installs correctly without errors
This plugin's installer ran successfully

Server metrics [RAM: ▲5.10MB] [CPU: ▲34.52ms] 50% from 4 tests

Server-side resources used by Newsletter & Bulk Email Sender - Email Newsletter Plugin for WordPress
Please fix the following
  • CPU: Try to keep total CPU usage under 500.00ms (currently 950.94ms on /wp-admin/edit.php?post_type=newsletter&page=bulkmail_templates)
  • Extra RAM: Try to keep extra memory usage under 5MB (currently 5.10MB on /wp-admin/edit.php?post_type=newsletter&page=bulkmail_templates)
PageMemory (MB)CPU Time (ms)
Home /8.47 ▲5.0170.71 ▲31.74
Dashboard /wp-admin8.45 ▲5.1594.14 ▲43.45
Posts /wp-admin/edit.php8.49 ▲5.1376.10 ▲27.41
Add New Post /wp-admin/post-new.php11.04 ▲5.16139.27 ▲48.30
Media Library /wp-admin/upload.php8.35 ▲5.1273.08 ▲35.46
Self Tests /wp-admin/edit.php?post_type=newsletter&page=bulkmail_tests8.1454.88
Setup /wp-admin/admin.php?page=bulkmail_setup8.8870.28
Forms /wp-admin/edit.php?post_type=newsletter&page=bulkmail_forms8.3868.86
Subscribers /wp-admin/edit.php?post_type=newsletter&page=bulkmail_subscribers9.1376.23
Manage Subscribers /wp-admin/edit.php?post_type=newsletter&page=bulkmail_manage_subscribers8.9066.11
Bulkmail Update /wp-admin/admin.php?page=bulkmail_update8.2565.54
Lists /wp-admin/edit.php?post_type=newsletter&page=bulkmail_lists8.8768.77
New Campaign /wp-admin/post-new.php?post_type=newsletter9.27108.37
Newsletter /wp-admin/edit.php?post_type=newsletter&page=bulkmail_settings8.8688.21
Templates /wp-admin/edit.php?post_type=newsletter&page=bulkmail_templates8.39950.94

Server storage [IO: ▲6.01MB] [DB: ▲0.03MB] Passed 3 tests

Input-output and database impact of this plugin
There were no storage issued detected upon installing this plugin
Filesystem: 543 new files
Database: 11 new tables, 24 new options
New tables
wp_bulkmail_actions
wp_bulkmail_subscribers
wp_bulkmail_queue
wp_bulkmail_subscriber_fields
wp_bulkmail_subscriber_meta
wp_bulkmail_form_fields
wp_bulkmail_lists
wp_bulkmail_links
wp_bulkmail_forms_lists
wp_bulkmail_forms
...
New WordPress options
widget_bulkmail_list_newsletter
bulkmail_email
bulkmail_options
bulkmail_version
widget_bulkmail_subscriber_button
widget_bulkmail_subscribers_count
bulkmail_updated
bulkmail_username
widget_recent-comments
bulkmail_templates_updates
...

Browser metrics Passed 4 tests

Checking browser requirements for Newsletter & Bulk Email Sender - Email Newsletter Plugin for WordPress
This plugin has a minimal impact on browser resources
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /3,030 ▲28415.69 ▲1.466.86 ▲5.2243.26 ▲3.84
Dashboard /wp-admin2,433 ▲2456.26 ▲0.37158.31 ▲45.8143.03 ▲0.61
Posts /wp-admin/edit.php2,171 ▲822.07 ▲0.0235.68 ▼0.3133.03 ▲0.64
Add New Post /wp-admin/post-new.php1,572 ▲5322.96 ▼0.21609.74 ▼45.0353.74 ▲0.96
Media Library /wp-admin/upload.php1,476 ▲854.25 ▲0.0598.19 ▼0.6440.77 ▼1.67
Self Tests /wp-admin/edit.php?post_type=newsletter&page=bulkmail_tests2,8819.44267.2048.01
Setup /wp-admin/admin.php?page=bulkmail_setup2,8839.49248.9834.68
Forms /wp-admin/edit.php?post_type=newsletter&page=bulkmail_forms1,3062.1736.3649.81
Subscribers /wp-admin/edit.php?post_type=newsletter&page=bulkmail_subscribers1,3982.1629.3546.18
Manage Subscribers /wp-admin/edit.php?post_type=newsletter&page=bulkmail_manage_subscribers1,1842.3046.3242.89
Bulkmail Update /wp-admin/admin.php?page=bulkmail_update9211.7930.5634.53
Lists /wp-admin/edit.php?post_type=newsletter&page=bulkmail_lists1,1791.6925.7730.38
New Campaign /wp-admin/post-new.php?post_type=newsletter6,46912.03294.84342.19
Newsletter /wp-admin/edit.php?post_type=newsletter&page=bulkmail_settings6,2333.4453.6165.02
Templates /wp-admin/edit.php?post_type=newsletter&page=bulkmail_templates1,1372.5438.0529.09

Uninstaller [IO: ▲0.93MB] [DB: ▲0.03MB] 25% from 4 tests

🔸 Tests weight: 35 | Checking the uninstaller removed all traces of the plugin
Please fix the following items
  • This plugin did not uninstall without warnings or errors
    • > Notice in wp-content/plugins/newsletter-bulk-email/classes/UpdateCenterPlugin.php+255
    Trying to access array offset on value of type null
  • Zombie tables were found after uninstall: 11 tables
    • wp_bulkmail_actions
    • wp_bulkmail_forms
    • wp_bulkmail_forms_lists
    • wp_bulkmail_links
    • wp_bulkmail_subscriber_meta
    • wp_bulkmail_form_fields
    • wp_bulkmail_queue
    • wp_bulkmail_subscriber_fields
    • wp_bulkmail_subscribers
    • wp_bulkmail_lists
    • ...
  • Zombie WordPress options were found after uninstall: 24 options
    • theysaidso_admin_options
    • bulkmail_version_first
    • widget_bulkmail_subscriber_button
    • updatecenter_plugins
    • bulkmail_version
    • widget_bulkmail_signup
    • widget_bulkmail_subscribers_count
    • can_compress_scripts
    • bulkmail_license
    • bulkmail_updated
    • ...

Smoke tests 0% from 4 tests

Server-side errors 0% from 1 test

🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
Smoke test failed, please fix the following
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=bulkmail_setup
    • > Warning in wp-content/plugins/newsletter-bulk-email/classes/helper.class.php+2030
    basename() expects parameter 1 to be string, array given
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=bulkmail_setup
    • > Notice in wp-content/plugins/newsletter-bulk-email/classes/helper.class.php+2060
    Array to string conversion
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=bulkmail_setup
    • > Notice in wp-content/plugins/newsletter-bulk-email/classes/helper.class.php+2064
    Undefined index: buttons
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=bulkmail_setup
    • > Warning in wp-content/plugins/newsletter-bulk-email/classes/helper.class.php+2064
    Invalid argument supplied for foreach()
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_templates
    • > Deprecated in wp-content/plugins/newsletter-bulk-email/classes/templates.class.php+792
    Invalid characters passed for attempted conversion, these have been ignored

SRP 0% from 2 tests

🔹 Tests weight: 20 | It is important to ensure that your PHP files perform no action when accessed directly, respecting the single-responsibility principle
Please fix the following
  • 1× GET requests to PHP files return non-empty strings:
    • > /wp-content/plugins/newsletter-bulk-email/cron.php
  • 215× PHP files trigger server-side errors or warnings when accessed directly (only 10 are shown):
    • > PHP Fatal error
      Uncaught Error: Call to undefined function esc_html_e() in wp-content/plugins/newsletter-bulk-email/views/settings/capabilities.php:1
    • > PHP Fatal error
      Uncaught Error: Call to undefined function bulkmail() in wp-content/plugins/newsletter-bulk-email/views/settings.php:5
    • > PHP Notice
      Undefined variable: post in wp-content/plugins/newsletter-bulk-email/views/newsletter/delivery.php on line 5
    • > PHP Fatal error
      Uncaught Error: Call to undefined function esc_html__() in wp-content/plugins/newsletter-bulk-email/includes/capability.php:6
    • > PHP Notice
      Undefined variable: post in wp-content/plugins/newsletter-bulk-email/views/newsletter/attachment.php on line 3
    • > PHP Fatal error
      Uncaught Error: Using $this when not in object context in wp-content/plugins/newsletter-bulk-email/views/newsletter/receivers.php:9
    • > PHP Notice
      Trying to access array offset on value of type null in wp-content/plugins/newsletter-bulk-email/views/templates/available-template.php on line 5
    • > PHP Warning
      Use of undefined constant ABSPATH - assumed 'ABSPATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/newsletter-bulk-email/classes/lists.table.class.php on line 4
    • > PHP Fatal error
      Uncaught Error: Interface 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' not found in wp-content/plugins/newsletter-bulk-email/classes/libs/InlineStyle/inlinestyle/inlinestyle/vendor/symfony/yaml/Exception/RuntimeException.php:19
    • > PHP Fatal error
      Uncaught Error: Class 'Symfony\\Component\\CssSelector\ode\\AbstractNode' not found in wp-content/plugins/newsletter-bulk-email/classes/libs/InlineStyle/symfony/css-selector/Node/ClassNode.php:22

User-side errors 0% from 1 test

🔹 Test weight: 20 | This is a smoke test targeting browser errors/issues
Please take a look at the following user-side issues
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_forms
    • > Network (severe)
    bulkmail/form?id=2&iframe=1&design=default&showcount=0&width=480&button=2&label=Preview&origin=http%3A%2F%2Fwp.com&referer=http%3A%2F%2Fwp.com%2Fwp-admin%2Fedit.php%3Fpost_type%3Dnewsletter%26page%3Dbulkmail_forms - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_forms
    • > Network (severe)
    bulkmail/form?id=1&iframe=1&design=default&showcount=0&width=480&button=1&label=Preview&origin=http%3A%2F%2Fwp.com&referer=http%3A%2F%2Fwp.com%2Fwp-admin%2Fedit.php%3Fpost_type%3Dnewsletter%26page%3Dbulkmail_forms - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_subscribers
    • > Network (severe)
    https://i0.wp.com/static.bulkmail.co/user/user05.gif?ssl=1 - Failed to load resource: the server responded with a status of 400 ()
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_lists
    • > Intervention (severe) in unknown
    /wp-admin/admin.php?page=bulkmail_update - Blocked attempt to show a 'beforeunload' confirmation panel for a frame that never had a user gesture since its load. https://www.chromestatus.com/feature/5082396709879808
    • > GET request to /wp-admin/post-new.php?post_type=newsletter
    • > Javascript (severe) in unknown
    /wp-content/plugins/newsletter-bulk-email/assets/js/campaign-script.min.js?ver=1.0.1 0:8463 Uncaught TypeError: Cannot read properties of undefined (reading 'off')
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_settings
    • > Network (severe)
    wp-content/plugins/newsletter-bulk-email/assets/js/libs/clipboard.min.js?ver=1.0.1 - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_settings
    • > Console-api (warning) in unknown
    /wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=6.3.1 1:28609 "jQuery.Deferred exception: Clipboard is not defined" "ReferenceError: Clipboard is not defined\n at /wp-content/plugins/newsletter-bulk-email/assets/js/clipboard-script.min.js?ver=1.0.1:1:88\n at /wp-content/plugins/newsletter-bulk-email/assets/js/bulkmail-script.min.js?ver=1.0.1:1:638\n at Array.forEach (\u003Canonymous>)\n at HTMLDocument.l (/wp-content/plugins/newsletter-bulk-email/assets/js/bulkmail-script.min.js?ver=1.0.1:1:618)\n at e (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=6.3.1:2:26990)\n at t (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=6.3.1:2:27292)" undefined
    • > GET request to /wp-admin/edit.php?post_type=newsletter&page=bulkmail_settings
    • > Javascript (severe) in unknown
    /wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=6.3.1 1:28721 Uncaught ReferenceError: Clipboard is not defined

Optimizations

Plugin configuration 90% from 29 tests

readme.txt 94% from 16 tests

Often overlooked, readme.txt is one of the most important files in your plugin
Please fix the following attributes: You can take inspiration from this readme.txt

newsletter-bulk-email/bulkmail.php 85% from 13 tests

Analyzing the main PHP file in "Newsletter & Bulk Email Sender - Email Newsletter Plugin for WordPress" version 2.0.1
Please make the necessary changes and fix the following:
  • Main file name: The principal plugin file should be the same as the plugin slug ("newsletter-bulk-email.php" instead of "bulkmail.php")
  • Text Domain: You no longer need to specify the text domain since WordPress 4.6; it must be the same as the plugin slug

Code Analysis 97% from 3 tests

File types Passed 1 test

🔸 Test weight: 35 | This is an overview of programming languages used in this plugin; dangerous file extensions are not allowed
Success! There were no dangerous files found in this plugin93,276 lines of code in 450 files:
LanguageFilesBlank linesComment linesLines of code
PHP26515,59615,03257,843
JavaScript752,07311820,747
CSS8622333612,955
HTML4133261,150
JSON500238
Markdown7560132
SVG3780122
XML47080
YAML1209

PHP code 50% from 2 tests

An overview of cyclomatic complexity and code structure
It is recommended to fix the following
  • Method cyclomatic complexity has to be reduced to less than 100 (currently 737)
Cyclomatic complexity
Average complexity per logical line of code0.43
Average class complexity42.15
▷ Minimum class complexity1.00
▷ Maximum class complexity768.00
Average method complexity5.03
▷ Minimum method complexity1.00
▷ Maximum method complexity737.00
Code structure
Namespaces21
Interfaces13
Traits0
Classes199
▷ Abstract classes63.02%
▷ Concrete classes19396.98%
▷ Final classes00.00%
Methods2,190
▷ Static methods683.11%
▷ Public methods1,81082.65%
▷ Protected methods572.60%
▷ Private methods32314.75%
Functions212
▷ Named functions12056.60%
▷ Anonymous functions9243.40%
Constants63
▷ Global constants1625.40%
▷ Class constants4774.60%
▷ Public constants47100.00%

Plugin size Passed 2 tests

Image compression Passed 2 tests

Using a strong compression for your PNG files is a great way to speed-up your plugin
126 compressed PNG files occupy 1.20MB
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
templates/mymail/img/social/dark/deviantart.png1.17KB1.13KB▼ 3.52%
templates/mymail/img/social/light/googleplus.png1.32KB1.32KB0.22%
templates/mymail/img/social/dark/android.png0.75KB0.72KB▼ 3.52%
templates/mymail/img/social/light/dribbble.png2.08KB2.05KB▼ 1.32%
templates/mymail/img/social/dark/ebay.png1.17KB1.14KB▼ 2.41%