Version 3.0.0b1:
- New: Mail Plugin architecture - email is delivered by the plugin selected as the "active mail plugin" in Global Config
- New: "Mail Plugins" tool to browse and configure the available Mail Plugins
- New: "Local SMTP" plugin - the SMTP settings from the Global Config "Delivery Settings" have moved to this plugin and are migrated automatically
- New: "Debug Log" and "Activity Log" plugins replace the Core "Log Sent Email" email systems
- New: "Mailgun" plugin - replaces the MailGun API module (update that module to 3.0.0b1); its settings are migrated automatically
- New: "Mail Delivery" dashboard tab (Email Delivery Log, Bounces and Failures, Spam Complaints, Blocked Domains, DMARC Reports) for Mail Plugins that support it
- New: Blocked Domains and DMARC Reports are now part of Email Support and are moved from the MailGun API module automatically
- New: Mailgun plugin "Mailgun Region" setting - EU region accounts use the EU API (api.eu.mailgun.net)
- New: Mailgun plugin "Webhook Signing Key" setting - webhooks and DMARC routes are verified with it (blank uses the Private API Key)
- New: Mail plugins and their config options are included in the ACP search
- Change: An email system provided by another module (i.e. MailGun API module) is still selectable as a legacy system
- Change: The MailGun API module settings are removed once they have been moved to the Mailgun plugin
- Change: The campaign results bounce count links to Mail Delivery -> Bounces when the active Mail Plugin provides it
- Change: Local SMTP now sends with PHPMailer 7.1.1 - the unmaintained SwiftMailer library has been removed (3.9MB smaller)
- Change: Local SMTP no longer requires the PHP proc_open function
- Change: DMARC Reports show the real DMARC result (aligned DKIM or SPF) and a new Disposition column (none, quarantine, reject)
- Change: Mailgun plugin "Public Validation Key" setting removed - validation uses the Private API Key; "Address Check Enabled" and "Max Daily Validations" turn it on
- Change: Mailgun sends one message per recipient - recipients never see each other and every campaign recipient gets tracked links
- Change: Mailgun API requests verify the TLS certificate and time out instead of waiting forever
- Change: Removing a Mailgun bounce or spam complaint clears the Mailgun status only - the user's notification settings are not changed
- Change: Local SMTP retries an email (core email queue) when the SMTP server cannot be reached or returns a temporary error - a permanent rejection is logged and not retried
- Change: Local SMTP uses the site domain in EHLO and the Message-ID
- Change: Local SMTP plugin config no longer shows the saved SMTP password - leave it blank to keep it
- Change: Local SMTP default SMTP host is localhost (was localhost.com)
- Change: Local SMTP config is saved with a warning when PHP has no stream_get_transports() function (was refused)
- Change: Activity Log email entries keep blank lines, and the email options are shown as text for plain text emails
- Change: Campaign Results World Map no longer needs a Google Maps API Key, and the Google Maps JavaScript API is no longer loaded on every Campaign Results page
- Change: Email open tracking stores the ISO country code, and the Campaign Results World Map uses it
- Change: Test Email says when the active Mail Plugin (Debug Log, Activity Log) only logs email
- Change: DMARC report viewer shows the stored report data without loading the unused CodeMirror editor
- Change: Campaign tracking links and open tracking images are signed for each recipient - clicks and opens are only recorded for signed URLs (links in email sent before this version still redirect but are not counted)
- Change: Email Content window (Mailgun) no longer shows a page banner, whois lookups show "whois lookup: " as the modal title
- Bug Fix: DMARC Reports hid senders that did not DKIM sign as the sending domain (unsigned and spoofed mail)
- Bug Fix: DMARC report records from the same IP address overwrote each other
- Bug Fix: DMARC Reports page could error on PHP 8 when the active Mail Plugin has no sending domain
- Bug Fix: "Delete Report" in DMARC Reports did not delete the report
- Bug Fix: Blocked Domains always showed an empty table
- Bug Fix: Geo Location worker could retry the same IP addresses forever when they had no location
- Bug Fix: Geo Location worker overwrote the stored user agent and the user report never showed browser information
- Bug Fix: User report country was always empty
- Bug Fix: Campaign views and countries could be mixed up between campaigns
- Bug Fix: PHP warnings for tracking requests with no User-Agent header
- Bug Fix: Campaign results page could error on PHP 8 when no emails were counted as sent
- Bug Fix: Mailgun DMARC route requests were not signature checked, and report attachments could be downloaded from non-Mailgun URLs
- Bug Fix: Mailgun send errors other than 401 were counted as sent and not logged
- Bug Fix: After one Mailgun 401 error, later successful sends in the same queue worker were treated as failed and sent again
- Bug Fix: Mailgun signup Address Check never rejected an undeliverable address (v4 validation API)
- Bug Fix: Mailgun bounce gathering only read the first 100 events and skipped the rest
- Bug Fix: Removing a Mailgun spam complaint always showed an error
- Bug Fix: Email addresses with a + were looked up, validated and removed incorrectly at Mailgun
- Bug Fix: Mailgun System Check failed when more than one Mailgun Domain is configured
- Bug Fix: Mailgun Bounces and Spam Complaints could not be paged past page 1, and could error on PHP 8 with no Mailgun Domain
- Bug Fix: Mailgun From names with a comma or quote were rejected
- Bug Fix: Mailgun dashboard text and the stored message viewer were not escaped / sandboxed
- Bug Fix: An email sent after a newsletter email in the same queue worker could be sent with the newsletter as its message
- Bug Fix: Local SMTP lost the next email when the kept-alive SMTP connection had been closed by the server
- Bug Fix: Local SMTP sent plain text emails as HTML with no line breaks when HTML email was enabled
- Bug Fix: The Debug Log plugin logged an untracked message for every recipient after the first in a campaign email sent to more than one address
- Bug Fix: Campaign user report showed a map of "unknown" and Latitude/Longitude 0 for a user whose location could not be found
- Bug Fix: PHP warnings on the Campaign Results World Map tab and user report when a campaign or user has no views, countries or clicks
- Bug Fix: Campaign Results World Map tab gave a JavaScript error when no Google Maps API Key was set
- Bug Fix: Campaign Results replaced other window resize handlers, and the list area got taller when the window got shorter
- Bug Fix: On a private site the Mailgun webhook / DMARC route URLs and the email open tracking image redirected to the login page
- Bug Fix: Any logged in user could view DMARC reports
- Bug Fix: Campaign Results World Map lost viewers when two countries had the same short name (i.e. South and North Korea) and did not show several countries (i.e. Korea, Czechia, Congo)
- Bug Fix: Email open tracking failed and logged a Query Error for a user agent longer than 512 characters
- Bug Fix: Clicks and opens were recorded for campaigns that had been deleted
- Bug Fix: Mail Plugin settings and DMARC report pages could not be opened from a bookmark or an outside link
- Bug Fix: Test Email lost the line breaks of a multi line message
- Bug Fix: Stats Browser did not show the delete notice, and campaigns from a removed module had no module name
- Bug Fix: Deleting a campaign, blocked domain or DMARC report that does not exist reported success
- Bug Fix: Campaign user report for a user that does not exist showed an empty report with an error, and an unknown Campaign Results tab added an empty tab
- Bug Fix: Marketplace update from 2.x stopped with "Call to undefined function jrMailer_migrate_mailgun_tables()"
- Developer: jrMailer_validate_email_address() validates an address with the active Mail Plugin (for modules checking addresses at signup)
- Developer: Mail Plugins can list public views (jrMailer_plugin__public_views()) that can be reached on a private site without logging in - Mailgun lists its webhook
- Developer: The Debug Log and Activity Log Mail Plugins are now part of Email Support (they no longer call the jrCore log functions) and fire the email_info event like Local SMTP
- Developer: curl_close() calls replaced by unset() - it has done nothing since PHP 8.0, deprecated in PHP 8.5 and removed in PHP 9
Version 2.5.2:
- Change: The campaign unsubscribe count now reads the correct newsletter notification setting, so a user who was already unsubscribed is not counted again when saving their notifications from a campaign link
Version 2.5.1:
- Bug Fix: Fatal error when using an external smtp server.
Version 2.5.0:
- Change: Sending a test email will now send in HTML if HTML notifications are enabled
- Change: Upgraded SwiftMailer to version 6.3.0 to better support PHP 8.1+
- Bug Fix: Possible SMTP error when trying to send a Test Email
Version 2.4.6:
- Bug Fix: Sending a test email was not using the "From Name" if configured in Global Config
Version 2.4.5:
- Change: Updates and optimizations to better support PHP 8+
Version 2.4.4:
- Change: When sending an attachment the correct file name will now be used instead of internal name
Version 2.4.3:
- Change: Updated to use core file handling function for GIF image beacon
Version 2.4.2:
- New: "email_info" event trigger added that is fired with email info before sending
Version 2.4.1:
- Change: gather_bounces and process_bounces events moved to ten minute maintenance event
Version 2.4.0:
- Change: Campaign map updated to use new Google Maps API loader (requires Geo Location module 2+)
- Bug Fix: Campaign map is now scrollable to view the entire map when resizing browser window
Version 2.3.5:
- New: Added new "Users who have never viewed a Newsletter" newsletter filter
Version 2.3.4:
- Change: Changed number of Geo tasks for background worker from 100 to 1000 per minute
Version 2.3.3:
- Change: Updated background geo worker to be much faster on very large email sends
Version 2.3.2:
- Bug Fix: Possible UTF8 SQL error in messages if cutting and pasting non-UTF8 characters
- Bug Fix: Some countries were not being highlighted properly on the Campaign Map
Version 2.3.1:
- Bug Fix: Possible SQL error during integrity check on MySQL 5.5
Version 2.3.0:
- New: Newsletter filter plugins provided for new NewsLetter filter feature
- New: Platform and Browser information available in Campaign View detailed user info
- Change: "Opened" event from image proxies (such as Gmail) no longer counted as a view
- Bug Fix: "Russian Federation" changed to "Russia" for Campaign map view
- Bug Fix: HTML newsletter without any URLs was not including open tracking beacon
Version 2.2.1:
- Bug Fix: Unsubscribe tracking may not work properly with customized HTML email footer
Version 2.2.0:
- Change: Process Stats functionality now runs every minute during minute maintenance
Version 2.1.3:
- Bug Fix: Possible SQL Error in Activity Log for entries with emoji in location name
Version 2.1.2:
- Change: System Check message improved with a link to install Geo Location module
Version 2.1.1:
- Bug Fix: Bounced email addresses reported by mail listeners not being unsubscribed
Version 2.1.0:
- Change: Updated to work with new Core 6.0.0 functions
Version 2.0.1:
- Bug Fix: Some mapped URLs may be incorrect based on their order in the message
Version 2.0.0:
- New: All New Campaign Support for modules to utilize to track email delivery
- New: "gather_bounces" hourly event for email plugins to gather bounced email
- New: "process_bounces" hourly event for modules to process bounced email
- Change: Send Test Email tool updated to ensure test email queue is processed
- Change: Updated bundled SwiftMailer library to version 5.4.2
Version 1.2.3:
- Change: Updated bundled SwiftMailer library to version 5.4.0
Version 1.2.2
- New: Daily Maintenance listener to keep throttle table clean if throttling enabled
Version 1.2.1:
- Change: HTML detection changed to look for opening tag in message body
Version 1.2.0:
- New: "Max Send Rate" Global config for limiting the number of emails sent per minute
- Change: If HTML is detected in message body, email will be sent as an HTML email
- Change: Updated bundled SwiftMailer to version 5.3.1
Version 1.1.0:
- New: Enabled SSL/TLS config option for enabling SMTP over SSL/TLS
- New: Test Email tool for testing Mailer Configuration and sending test emails
- Change: SMTP Password field in Global Config is now a password field instead of text
Version 1.0.0:
- Initial release