Version 2.19.4
December 23, 2025
- Fixed a bug in which campaigns could not be closed (#539).
Version 2.19.3
December 9, 2025
Version 2.19.2
November 25, 2025
- Improved how IP addresses are determined for contact activity and webhook requests.
- Fixed a bug in which failed GeoIP lookups could cause errors.
Version 2.19.1
November 3, 2025
- Fixed a bug in which an error could occur when attempting to export contacts without a date subscribed.
Version 2.19.0
November 1, 2025
- Added a
contactInteractionevent to theCampaignsServiceclass that is triggered when a contact interacts with a sendout, such as opening an email or clicking a link (#518). - Added a
Date Subscribedproperty to the contact element. - Optimised the queries performed when exporting contacts (#534).
- Fixed a bug in which exporting contacts with one or more date fields could fail.
Version 2.18.1
July 21, 2025
- Added a permissions check for showing the sync contacts tab.
- Fixed a bug in which contacts could be unsubscribed from previously unsubscribed mailing lists, instead of subscribed mailing lists, when sending to multiple mailing lists (#523).
Version 2.18.0
June 2, 2025
- Added the ability to segment contacts by campaign activity with a “never opened” operator (#482).
- Replaced the use of the deprecated
|ucfirstfilter to|capitalizein all Twig templates.
Version 2.17.11
April 1, 2025
Fixed
- Fixed a bug in which the scheduling of weekly recurring sendouts could have been miscalculated (#512).
Version 2.17.10
December 31, 2024
Changed
- The webhook controller no longer logs unknown events as warnings.
Version 2.17.9
December 16, 2024
Fixed
- Fixed the calculation of the pending recipient count for scheduled sendouts (#505).
Version 2.17.8
November 29, 2024
Fixed
- Fixed a bug in which duplicating campaigns was not resetting the new campaign’s stats.
Version 2.17.7
October 31, 2024
Changed
- The “from names and emails” setting now accepts environment variables (#503).
Version 2.17.6
October 8, 2024
Fixed
- Fixed the calculation of pending recipients to not include drafts.
Version 2.17.5
September 30, 2024
Changed
- Improved French and German translations (#499).
Version 2.17.3
August 12, 2024
Changed
- Contact avatars are no longer fetched from Gravatar. Instead, a user profile photo is used, if one exists, falling back to an SVG with a coloured gradient and initial.
Version 2.17.2
August 2, 2024
Changed
- IP addresses are now logged in failed webhook requests from Postmark.
Version 2.17.1
July 15, 2024
Changed
- Improved the number formatting of counts on element index pages.
Version 2.17.0
July 4, 2024
Added
- Added the ability to create campaign types without public URLs.
Changed
- Updated status colours to match those used in the control panel UI.
Version 2.15.3
May 6, 2024
Fixed
- Fixed a bug in which contact subscriptions were failing when the referrer URL was longer than 255 characters (#473).
Version 2.15.2
May 2, 2024
Fixed
- Fixed a bug in which calling
getMailingLists()on a contact element could throw an exception (#469).
Version 2.15.1
April 16, 2024
Changed
- Changed the order of fetched mailing lists to be more deterministic.
Fixed
- Fixed the syntax used in one-click unsubscribe headers.
Version 2.15.0
April 15, 2024
Added
- Added one-click unsubscribe headers to sent emails (#467).
- Added a new one-click unsubscribe controller action.
- Added an
addOneClickUnsubscribeHeadersconfig setting that determines whether one-click unsubscribe headers should be added to emails, defaulting totrue.
Version 2.14.0
April 8, 2024
Added
- Added the ability to bulk subscribe/unsubscribe an existing contact from a mailing list using a front-end form (#237).
- Added tracking of the unsubscribe source originating from a front-end request.
Fixed
- Fixed a bug in which the total recipient count in running sendouts was being incorrectly displayed.
- Fixed a typo in the
Allinteraction type in English.
Version 2.13.2
April 1, 2024
Fixed
- Fixed the buttons to create new campaign types and mailing list types appearing when allow admin changes was disabled or the user did not have the necessary permissions.
- Fixed an error that could appear when clicking on a sent sendout as an impersonated user in Craft Cloud.
Version 2.13.1
March 26, 2024
Fixed
- Fixed a bug in which newly created contacts were not being indexed for searching if an email address was the only field added (#463).
Version 2.13.0
March 25, 2024
Added
- Added batching to import queue jobs.
- Added batching to sync queue jobs.
Changed
- Campaign now requires Craft CMS 4.4.0 or later.
- The sendout job batch size is now set to
100by default, unless it was previously modified by themaxBatchSizeconfig setting. - The sendout job batch delay is now set to
0by default, unless it was previously modified by thebatchJobDelayconfig setting. - Renamed the
maxBatchSizeconfig setting tosendoutJobBatchSize. - Renamed the
batchJobDelayconfig setting tosendoutJobBatchDelay.
Fixed
- Fixed a bug in which the expected recipients count could fail in sendouts with very large numbers of contacts.
- Fixed a bug in which sendout actions were unavailable on the sendout index page.
Deprecated
- Deprecated the
maxBatchSizeconfig setting. UsesendoutJobBatchSizeinstead. - Deprecated the
batchJobDelayconfig setting. UsesendoutJobBatchDelayinstead. - Deprecated the
memoryLimitconfig setting. - Deprecated the
memoryThresholdconfig setting. - Deprecated the
timeLimitconfig setting. - Deprecated the
timeThresholdconfig setting. - Deprecated the
Campaign::maxPowerLieutenant()method. UseApp:maxPowerCaptain()instead. - Deprecated the
SendoutElement::getPendingRecipients()method. UseCampaign::$plugin->sendouts->getPendingRecipients()instead. - Deprecated the
SendoutElement::getPendingRecipientCount()method. UseCampaign::$plugin->sendouts->getPendingRecipients()instead.
Version 2.12.2
March 5, 2024
Changed
- A custom log target is now only registered if a dispatcher exists.
Security
- Improved escaping of table values in the plugins settings.
- Removed the ability to use
contactandmailingListvariables in sendout subjects.
Version 2.12.0
January 3, 2024
Added
- Added a
syncJobPriorityconfig setting that determines what priority to give sync jobs.
Fixed
- Fixed a bug in which the element count was not appearing for campaigns and mailing lists when there were no results.
- Fixed a bug that could cause an error when viewing contacts in an incomplete segment (#441).
- Fixed a bug in which the import job TTR setting was not being respected (#445).
- Fixed a bug in which the sendout job max retry attempts setting was not being respected.
- Fixed a bug in which filtering contacts by last activity was not working (#446).
Version 2.11.0
November 28, 2023
Added
- Added the ability to bulk subscribe and unsubscribe contacts to and from mailing lists in the contact index page (#418).
- Added the ability to configure a custom queue component via
config/app.phpto use when running queue jobs. - Added an
importJobPriorityconfig setting that determines what priority to give import jobs.
Fixed
- Fixed a bug in which a default contact was not being shown in test contacts on the campaign edit page (#437).
- Fixed a bug in which saving a contact could throw an exception if the contact record existed but the contact was not active.
Version 2.10.0
November 16, 2023
Added
- Added a new “validate webhook request” field setting.
- Added a webhook controller action for MailerSend and signature key verification with a new
mailersendWebhookSigningSecretsetting (#415). - Added validation to the SendGrid webhook controller action with a new
sendgridWebhookVerificationKeysetting. - Added the
importJobTtrandsyncJobTtrconfig settings (#432).
Changed
- Updated the SendGrid webhook event names.
- Adding or removing test contacts no longer shows an unsaved changes notification (#437).
Version 2.9.3
October 31, 2023
Fixed
- Fixed a bug in which an exception could be thrown on the sendouts screen (#429).
Version 2.9.1
October 17, 2023
Changed
- Disabled validation when saving elements in specific cases.
- Unsubscribed, complained and bounced counts are now included when syncing campaign reports.
Version 2.9.0
October 9, 2023
Added
- Added an info message and a new campaign type button to the campaign index page when no campaign types exist.
- Added an info message and a new mailing list type button to the mailing list index page when no mailing list types exist.
- Added the
sendoutJobPriorityconfig setting (#422).
Changed
- Sendouts are now sent to contacts in a deterministic order (#423).
Fixed
Version 2.8.7
September 25, 2023
Fixed
- Fixed relation field values not saving in Craft 4.5.4 and above (#414).
Version 2.8.6
September 20, 2023
Changed
- Improvements to the French translation.
Fixed
- Fixed a bug in which Campaign, Contact and Mailing List element types were not being registered by the Feed Me plugin (#412).
Version 2.8.5
August 21, 2023
Added
- Added the
has a valueandis emptyoptions to legacy segment conditions (#407).
Version 2.8.4
August 15, 2023
Fixed
- Fixed a bug in which clicking an unsubscribe link in singular sendouts was causing an error, since singular sendouts are not sent to mailing lists (#405).
Version 2.8.3
July 17, 2023
Changed
- Logged messages now include the event that was passed into a webhook when a failure is encountered (#398).
Fixed
Version 2.8.2
June 12, 2023
Fixed
- Fixed a bug in which Campaign dashboard widgets were throwing exceptions when a date range was set (#396).
Version 2.8.1
June 8, 2023
Fixed
- Fixed a bug in which Feed Me imports were not working when the queue was being run via console requests (#395).
Version 2.7.2
May 26, 2023
Changed
- Errors when syncing users to contacts are now logged.
Fixed
- Fixed a bug in which custom field values were not being imported when importing contacts via CSV files (#390).
Version 2.7.0
May 13, 2023
Added
- Added the ability to import contacts into a mailing list with a status of unsubscribed (#384).
Changed
- Anchor hashtags are now forced to the end of URLs when appending query string parameters (#383).
- Changed the user permission for managing contacts to only show a note about the primary site if multiple sites exist.
Version 2.6.2
May 12, 2023
Fixed
- Fixed a bug in which non-admin users were not allowed to edit contacts even with the correct permissions granted (#378).
Version 2.6.1
April 28, 2023
Added
- Added the ability to import options fields (multi-select, checkboxes, etc.) into contact fields (#380).
Version 2.6.0
April 4, 2023
Added
- Added messaging that explains why charts are not appearing in reports.
Changed
- Campaign reports are no longer synced when the
enableAnonymousTrackingsetting is enabled (#371). - Contact activity is hidden when the
enableAnonymousTrackingsetting is enabled (#371). - Renamed the “Manage Reports” permission to “View Reports”.
- Users can now only edit contacts when they have edit permission for the primary site.
Fixed
Version 2.5.5
February 24, 2023
Fixed
- Fixed a bug that was preventing charts from appearing in report pages.
Version 2.5.4
February 23, 2023
Added
- Added compatibility with LitEmoji v4 which is required by Craft 4.4.0.
Fixed
- Fixed the check for PHP memory usage in sendout jobs.
Version 2.5.3
February 3, 2023
Changed
- The front-end subscribe and unsubscribe forms now accept an optional
siteIdparameter (#363).
Version 2.5.2
January 24, 2023
Fixed
- Fixed unauthorised access to some settings pages in environments where administrative changes are disallowed.
Version 2.5.1
January 17, 2023
Changed
- The translatable symbol no longer appears next to element title fields.
Version 2.5.0
January 17, 2023
Added
- Added the ability to hide the title field in campaigns and have titles generated dynamically (#355).
- Added the ability to hide the title field in sendouts and have titles generated from the subject (#356).
Changed
- The sendout title and subject fields are now autopopulated from the campaign title if they are empty (#356).
Version 2.4.2
January 13, 2023
Fixed
- Fixed a bug in which some stats in the mailing list dashboard widget were not being counted.
Version 2.4.1
January 13, 2023
Fixed
- Fixed a bug in which the utilities page was throwing an exception (#357).
Version 2.4.0
January 12, 2023
Added
- Added the “Campaign Stats” dashboard widget (#107).
- Added the “Mailing List Stats” dashboard widget (#107).
- Added “Click Rate” as an available column in the campaign element index page.
- Added “Open Rate” to campaign reports and as an available column in the campaign element index page (#354).
- Added “Click Rate” as an available column in the campaign element index page.
- Added the
campaign/reports/syncconsole command that syncs campaign reports.
Fixed
- Fixed when the view action is available on campaign index pages.
Version 2.3.2
January 2, 2023
Changed
- Changed the sendout “Pause” button to read “Pause and Edit” (#352).
Fixed
- Fixed the “View all” link in the contacts tab of the mailing list edit page for Craft 4.3.0 and above.
Version 2.3.1
December 10, 2022
Changed
- The access utility permission was removed, in favour of Craft's own utility permission.
Fixed
Version 2.3.0
December 5, 2022
Added
- Added a new
ContactElement::getIsSubscribedTo()method.
Changed
- Rendered HTML templates now explicitly exclude any control panel asset bundles (#347).
Fixed
- Fixed a bug in which draft contacts were incorrectly being counted as expected recipients.
- Fixed a bug in which custom fields were not being validated in front-end contact subscribe forms (#348).
Version 2.2.3
November 25, 2022
Version 2.2.1
November 7, 2022
Changed
- Improved the performance of report pages (#340).
- Changed the webhook controller action responses to ensure that correct status codes are sent (❤️@brandonkelly).
- Test requests from Mailgun now return a success response.
Fixed
- Fixed a bug in which the Mailgun webhook controller action was not processing requests correctly (#341).
- Fixed a bug in which the webhook controller actions could fail for singular sendouts.
- Fixed a bug in which some information was missing from reports.
Version 2.2.0
October 28, 2022
Added
- Added the ability to use
{% html %},{% css %}and{% js %}tags in campaign templates.
Fixed
- Fixed a bug in which Yii block comments could be unintentionally left over in rendered campaign templates (#337).
Version 2.1.17
October 28, 2022
Fixed
- Fixed a bug in which the unsubscribe webhook action could throw an exception (#339).
Version 2.1.16
October 27, 2022
Fixed
- Fixed all remaining uninitialized typed properties, as a precaution.
Version 2.1.15
October 27, 2022
Fixed
- Fixed a missed uninitialized typed property that was causing verification links to fail (#338).
Version 2.1.14
October 25, 2022
Fixed
- Fixed a bug in which typed properties were being accessed before initialization, caused by a breaking change in Yii 2.0.46.
Version 2.1.13
October 25, 2022
Fixed
- Fixed a bug in which typed properties were being accessed before initialization.
Version 2.1.12
October 21, 2022
Fixed
- Fixed a bug in which an exception was thrown when viewing recurring sendouts (#336).
Version 2.1.10
October 17, 2022
Fixed
- Fixed a bug in which saving sendout settings was throwing an exception when one or more of the fields were left blank (#334).
Version 2.1.9
October 12, 2022
Fixed
- Fixed a bug in which blocked contacts were being considered as pending contacts, meaning that sendouts could hang during sending (#324).
Version 2.1.8
October 10, 2022
Fixed
- Fixed a caching issue when applying project config changes to campaign types and mailing list types (#332).
Version 2.1.6
September 16, 2022
Fixed
- Fixed a bug in which sending test emails of campaigns only worked for campaigns in the default site (#327).
Version 2.1.5
August 28, 2022
Fixed
- Fixed an error that could be thrown if the
set_time_limit()function was undefined (#322).
Version 2.1.4
August 7, 2022
Fixed
- Fixed a bug that prevented the mailer transport defined in the Campaign email settings from overriding the Craft email settings (#319).
Version 2.1.3
August 2, 2022
Fixed
- Fixed an error that occurred when creating contacts in the control panel.
Version 2.1.2
July 25, 2022
Fixed
- Fixed a bug when subscribing users via front-end forms.
Version 2.1.1
July 22, 2022
Added
- Added a
fieldValuesparameter to theFormsService::createAndSubscribeContactmethod.
Version 2.1.0
July 22, 2022
Added
- Added a
createAndSubscribeContactmethod toFormsServicefor easier integration from other plugins and modules.
Version 2.0.6
July 18, 2022
Fixed
- Fixed a bug in which an exception could be thrown if the user agent was unavailable when detecting device type.
Version 2.0.5
July 5, 2022
Changed
- Tweaked plugin icon to fit better in control panel.
Fixed
- Fixed subscription status translations.
Version 2.0.4
June 24, 2022
Changed
- Removed the pruning of deleted fields according to the precedent set in craftcms/cms#11054.
Fixed
- Fixed an issue with viewing sendouts that have been sent in Craft 4.0.4 and above (#316).
Version 2.0.3
June 21, 2022
Fixed
- Fixed an issue with the contact index page when database tables contained a prefix.
Version 2.0.2
June 21, 2022
Fixed
- Fixed the unique email validation when saving contacts.
Version 2.0.1
June 3, 2022
Changed
- Improved the UI of sendout previews.
- Made the
matomo/device-detectorpackage requirement more flexible.
Version 2.0.0
May 4, 2022
Support for reCAPTCHA version 2 has been removed, use version 3 instead. The
subscribeVerificationSuccessTemplatesetting has been removed, use thesubscribeSuccessTemplatesetting instead.
Added
- Added compatibility with Craft 4.
- Added a new “Singular” sendout type to the Pro edition, for sending campaigns to individual contacts (#263).
- Added a condition builder field to the sendout schedule for automated and recurring sendout types (#305).
- Added the field layout designer to campaign types, mailing list types and contact layouts (#163, #198, #269).
- Added autosaving drafts to campaigns, contacts, mailing lists, segments and sendouts.
- Added revisions to campaigns (#301).
- Added a “Duplicate” action to campaigns, mailing lists, segments and sendouts (#292).
- Added condition settings to the campaigns, contacts and mailing lists relation fields.
- Added user group permissions for campaign types and mailing list types.
- Added the ability to view disabled campaigns using a token URL.
- Added a contact condition builder to regular segment types, that should be used going forward since
legacyandtemplatesegment types will be removed in Campaign 3. - Added a “Campaign Activity” condition rule for segmenting by contacts who have opened or clicked a link in any or a specific campaign (#244).
- Added a “Default Notification Contacts” field to sendout settings.
- Added an “Export to CSV” button to all datatables in reports (#245).
- Added the
enableAnonymousTrackingsetting, which prevents tracking of opens and clicks (#115). - Added the
campaign/reports/anonymizeconsole controller that anonymizes all previously collected personal data. - Added a list of failed contacts to sendouts that have failures (#311).
- Added a link to view all contacts from the mailing list edit page (#282).
Changed
- All
formscontroller actions now return a400HTTP status for JSON responses when unsuccessful. - Improved the UI and security of links to external sites.
- Exports now include all contacts in the selected mailing lists, as well as columns for mailing list, subscription status and subscribed date (#302).
- Verification emails are now sent in HTML and plaintext format (#303).
- Renamed
regularsegment types tolegacysegment types, which are being maintained because they provide functionality that the contact condition builder does not yet provide, but which will be removed in Campaign 3. - Renamed the
maxSendFailsAllowedconfig setting tomaxSendFailuresAllowed. - Replaced the
Log To Filehelper package with a custom Monolog log target. - Replaced all instances of
AdminTablewithVueAdminTable. - Removed the
SettingsServiceclass. Use theSettingsHelperclass instead.
Removed
- Removed support for reCAPTCHA version 2, leaving support for version 3 only.
- Removed the
subscribeVerificationSuccessTemplatesetting from the mailing list type settings page. Use thesubscribeSuccessTemplatesetting instead.