- Fixed the empty space that appeared next to a contact in a contact field when no avatar was available (#221).
- Added reference tags for campaigns, contacts, mailing lists, segments and sendouts (#218).
- Added a
mailgunWebhookSigningKey
control panel setting that validates incoming webhook requests using Mailgun’s signing key. - Added a
postmarkAllowedIpAddresses
config setting that only accepts incoming webhook requests from Postmark’s IP addresses.
- Fixed a bug in which mailing lists in non-primary sites were not being synced with users.
- Fixed a bug in which an error was thrown when saving a user and contact first/last name fields did not exist (#214).
- Fixed the day of the month checkbox labels for values over 29.
- Fixed a bug in which some contact fields were not being synced with Craft 3.6.
- Added the
campaign/sendouts/queue
console command to queue pending sendouts without actually running them (#209). - Added the
campaign/sendouts/run
console command to queue and run pending sendouts.
- The
@web
alias warning is now only displayed when not explicitly defined (#208). - Improved formatting of UI elements.
- Improved enforcing of permissions in controllers.
- Deprecated the
campaign/sendouts/run-pending-sendouts
console command. Usecampaign/sendouts/run
instead.
{tip} Read the updated docs on Sending to Large Lists.
- Added compatibility with Craft 3.6.0.
- Added the ability to mark a contact as blocked, preventing them from being subscribed to mailing lists (#140).
- Optimised the sending process of large sendouts.
- Changed the default max batch size to 10,000 for new installs.
- Removed the
unlimitedMemoryLimit
andunlimitedTimeLimit
config settings.
- Fixed failed sendout statuses that were being set to pending.
- Fixed element thumbnails not appearing in contact edit page.
- Improved the contact importing process.
- Fixed the contact import functionality added in 1.17.3.
- Fixed a bug that was preventing campaign types and mailing list types from being created when installing the plugin via project config (#191).
- Fixed a bug in the Amazon SES webhook that was preventing bounce and complain notifications from being received through SNS (#202).
- Improved the reliability of marking contacts as bounced when using the Mailgun webhook (#178).
- Importing contact data now stores CSV files in the temporary asset upload location as defined in Settings → Assets → Settings (#197).
- Added compatibility with Craft 3.6.0.
- Fixed a bug that prevented the site ID of contacts being updated when the primary site was changed.
- Added the ability to subscribe contacts to a mailing list when imported, even if previously unsubscribed (disabled by default).
- Replaced abandoned package htmlstrip with active package Html2Text.
- Changed test class namespaces to be PSR-4 compliant.
- Fixed a bug in which a sendout could get stuck at 100% if there were failed send attempts (#170).
- The “Share” button on the Edit Campaign page has been renamed to “View” (#188).
- Optimised queries that display contact activity on reports pages to better respect result limits (#193).
- Plugin settings are deleted from project config on uninstall.
- Fixed an error that could be thrown when updating a contact from a queue job (#187).
- Fixed error that could be thrown when using Postgres (#186).
- Added logging of bounce and complain events.
- Fixed a bug in which the mailing lists tab was incorrectly listing contacts on the contact edit page (#182).
- Fixed a bug in which links could be invalidly created if using Craft CMS 3.5.12 or above (#180).
- Fixed a bug in which campaign and mailing list reports were throwing errors (#179).
- Added a default contact to use for test emails to campaign types (#166).
- Added a contacts tab to the mailing list edit page (#174).
- Pending contacts now persist so that verification links remain valid until they are purged (#169).
- Fixed a bug in which the default system from name and email were not parsed when loaded from environment settings (#176).
- Fixed site selector for contacts (#153, #177).
- Added a sortable
lastSent
attribute to campaign elements.
- Made sendout titles editable from the sendout index page (#161).
- The campaign report now lists campaigns ordered by last sent descending (#168).
- Campaigns and sendouts are now ordered by last sent descending by default.
- Fixed a bug with pending contact verification when a contact already exists.
- Custom fields on contacts are now validated before being saved (#160).
- Added the ability to edit sendout titles when a sendout is already sent, in the sendout index page (#161).
- Campaign first sent on dates are now output in full date time format.
- Fixed a bug that could throw an error when sending a test email using Craft 3.5.0 (#164).
- The reCAPTCHA lightswitch settings field is no longer marked as required with an asterisk (#155).
- Fixed the contact element background image in CSS (#151).
- Fixed the delete contact permanently button in the contact edit page (#154).
- Fixed a bug that could throw errors in the CP in Craft 3.5.0 (#157).
- Fixed a bug that could throw an error when saving email settings using Craft 3.5.0 (#159).
- Added the
maxSendFailsAllowed
config setting which defines the failed attempts to send to contacts that are allowed before failing the entire sendout and defaults to 1 (#138). - Added the English translation file (#148).
- Improved log messages of failed sendouts (#138).
- Improved the error message when trying to import a CSV file without selecting a mailing list (#141).
- Fixed a bug that could throw the wrong exception when a pending contact is not found when verifying a subscription (#149).
- Fixed a bug in the Amazon SES webhook for bounce and complaint notifications (#103).
- Fixed a bug that was preventing the status from being set to
sent
immediately after sending.
- Fixed a bug that was causing an error when creating a new user (#136).
- Added user to the contact edit page and contact to the user edit page if one is found (#131).
- Fixed a bug that prevented the first and last name fields being copied when importing a user group (#134).
- Fixed a bug in the campaign and mailing list report charts (#135).
- Added site selector to campaign and mailing list reports (#125).
- Added the ability to import contacts to multiple lists in one go (#126).
- Added the contact field layout to project config (#129).
- Added
EVENT_BEFORE_SAVE_SETTINGS
andEVENT_AFTER_SAVE_SETTINGS
events.
- Changed database table column length for short UIDs (#128).
- Fixed an error that could appear if a campaign type's or mailing list type's site was deleted.
- Fixed a bug that was causing errors when using Postgres (#128).
- Fixed a bug in which a contact could be unsubscribed from a mailing list other than the one they opted to unsubscribe from when clicking the unsubscribe link (#132).
- Fixed an invalid field layout error that could occur in an environment where the contact field layout was missing (#124).
- Fixed custom fields not being saved on contact import (#122).
- Fixed an error that could occur when editing a contact that did not have a field layout ID (#121).
- Fixed bugs that were causing errors when using Postgres (#117).
- Fixed a bug when editing a contact when using Postgres (#118).
- Fixed a bug when editing or creating a new contact when the field layout was empty.
- Fixed a bug when importing a user group when no custom fields exist on users.
- Fixed minimum height of background image on welcome screen.
- Fixed behaviour of contact activity report limits.
- Fixed broken contact activity report links.
{warning} This update contains an important bug fix and should be applied as soon as possible.
- Fixed a bug introduced in 1.14.0 in which contacts unsubscribing from a mailing list was throwing an error (#116).
- Added a hard delete element action for contacts.
- It is now possible to add a new contact with the same email address as a soft-deleted contact.
- Fixed an issue where soft deleted contacts were counting towards mailing list subscription and pending contacts count (#112).
- Fixed subscriptions to mailing lists that exist on a site other than the current site (#113).
- The
contact
variable is now available in the email subject when sending a sendout test. - Improved UI of tables in settings.
- Fixed the possibility of the
subscribeSuccessTemplate
mailing list type setting not being saved (#110). - Fixed an error that could occur if the timezone was not explicitly set on the server.
- Added an
unknown
flag icon when a contact's country is unknown.
- Improved UI elements for Craft 3.4.
- Made date created and date updated columns sortable in element index pages.
- Fixed an error that could occur if contact activity included deleted contacts.
{warning} This update contains a critical bug fix and should be applied as soon as possible.
- Fixed a bug introduced in 1.13.0 in which emails could be sent to mailing lists not selected in sendouts.
- Added custom relation field types for campaigns, contacts and mailing lists.
- Improved performance of pending recipients query.
- Made sendout
notificationEmailAddress
field optional.
- Fixed a bug with anonymous actions in the
WebhookController
(#99). - Fixed a bug that was preventing updating search index jobs from completing because of an emoji in the sendout subject. (#101).
- Fixed an error that could occur if using a deprecated subscribe method.
- Fixed a bug in which the field layout was not being saved for mailing list types (#97).
- Fixed a bug with creating new template segments (#98).
- Improved how contact interactions are tracked to avoid creating unnecessary search index updates.
- Fixed an error that could occur if mailing list was not selected when syncing a user group.
- Fixed new segment button functionality in modal windows.
- Fixed a bug that could cause automated sendout jobs to fail.
- Fixed error that could occur if email settings were not saved since a recent update (#90).
- Fixed validation of required fields when saving an enabled campaign.
- Added campaign and mailing list types to project config.
- Changed minimum requirement of Craft to version 3.1.20.
- Fixed the number of expected recipients when there were contacts who were subscribed to multiple mailing lists.
- Changed reCAPTCHA error message to better reflect reCAPTCHA v3.
- Fixed the campaign live preview button.
- Added compatibility with reCAPTCHA version 3.
- Fixed the reCAPTCHA code that is output when not set to invisible (#85).
- Fixed the reCAPTCHA code that is output when more than one instance of the template tag is used (#86).
- Deprecated the use of reCAPTCHA version 2.
- Fixed bug in which automated and recurring sendouts could be marked as sent when they are still pending.
{note} The Google Analytics lightswitch field has been removed from sendouts. Use the new Query String Parameters field in campaign types instead.
- Added the
Unsubscribe Verification Email Subject
andUnsubscribe Verification Email Template
fields to mailing list type settings. - Added the
FormsController
with theactionUnsubscribe()
method so that contacts can unsubscribe themselves from a mailing list by submitting their email in a form and clicking a link in a verification email (#81). - Added the
maxSendAttempts
config setting which defines the maximum number of times to attempt sending a sendout before failing and defaults to 3 (#82). - Added the
Query String Parameters
field to campaign types and removed theGoogle Analytics
lightswitch field from sendouts (#83). - Added unit tests to the plugin using Craft’s testing framework.
- Adjusted positioning of campaign preview and share buttons for Craft 3.2.
- Fixed bug in which email notifications about failed sendouts were not being sent.
- Deprecated the
Subscribe Verification Success Template
field in mailing list type settings. - Deprecated
TrackerController::actionSubscribe()
. - Deprecated
TrackerController::actionUpdateContact()
. - Deprecated
ContactsService::savePendingContact()
. - Deprecated
ContactsService::sendVerificationEmail()
. - Deprecated
ContactsService::verifyPendingContact()
. - Deprecated
ContactsService::purgeExpiredPendingContacts()
. - Deprecated
TrackerService::EVENT_BEFORE_SUBSCRIBE_CONTACT
. - Deprecated
TrackerService::EVENT_AFTER_SUBSCRIBE_CONTACT
. - Deprecated
TrackerService::EVENT_BEFORE_UPDATE_CONTACT
. - Deprecated
TrackerService::EVENT_AFTER_UPDATE_CONTACT
.
- Fixed bug in which reply to email address was not being correctly saved for sendouts.
- Fixed an issue where the settings page could be reached even if
allowAdminChanges
was set tofalse
(#77).
- Fixed an issue in which relation fields were not being saved on a contact for mailing list types with with double opt-in enabled (#75).
{warning} Template conditions in segments have been broken out into their own segment type. You will therefore need to manually recreate any segments that used template conditions as new segments.
- Fixed an error that could occur when creating a new mailing list in the control panel.
- Added regular and template segment types.
- Added the ability to use emojis in the sendout subject ;)
- Changed segment template conditions to be their own segment type and use inline template code rather than a template file.
- Optimised the sending process.
- Changed memory check to get the total the amount of memory being used by PHP.
- Changed sendout job TTR to be set from a new
sendoutJobTtr
config setting.
- Fixed elements from incorrect sites appearing in relation fields when creating a new campaign or mailing list.
- Fixed issue with sendouts not displaying the correct table attributes based on the selected sendout type.
- Fixed issue that prevented max batch size being saved in sendout settings.
- Fixed memory limit exceeded warnings in sendout settings.
- Fixed migration that could fail in some edge cases.
- Added ability to add Reply To email addresses.
- Added sendout settings page with tips and warnings for memory and time limits.
- Added Dropdown, Radio Buttons, Checkboxes and Multi-select field options to segments.
- Added
is not
option to lightswitch fields in segments.
- Changed sendout job progress indicator from being a percentage of the entire sendout to the current batch size.
- Fixed check for whether the
@web
alias is used with sites or volumes.
- First and last names are now synced along with other custom user fields that exist for contacts.
- User actions, import failures and some exceptions are now logged in
storage/logs/campaign.log
. - Complains and bounces no longer require an
SID
to be sent in webhooks. - Complains and bounces are now applied to all campaigns and mailing lists that a contact engaged with.
- Fixed pending sendout count not displaying in pending scheduled sendouts.
- Improved wording of message when sendout fails.
- Changed contacts controller actions to work with requests other than JSON requests.
- Changed webhook controller to work with new Mailgun webhook API and added info text in general settings.
- Fixed user thumbnail image not appearing correctly in meta sidebar.
- Added dropdown, email and URL fieldtypes to segments.
- Added
extraSegmentFieldOperators
config setting for adding fieldtypes to segments.
- Replaced deprecated Twig classes.
- Really fixed memory limit and max execution times not being recognised as unlimited in some situations.
- Improved mailing lists tab explanation when creating new contacts.
- Fixed memory limit and max execution times not being recognised as unlimited in some situations.
- Fixed expected recipients positioning and spinner on pending sendouts.
- Added
unlimitedMemoryLimit
andunlimitedTimeLimit
config settings. - Added a phablet icon, since those are a thing.
- Contacts that were soft deleted are now restored when verified using an email verification link.
- Number of expected recipients is now calculated in the background on the edit sendout screen to prevent slow page load.
- Settings navigation link is removed from navigation if
allowAdminChanges
is disabled. - Improved how the
@web
alias is determined to be in the site or asset URLs in the preflight check. - Changed
Craft::warning
toCraft::info
when logging user actions.
- Fixed error that could occur when returning tracking image (#57).
- Fixed bug with number of failed recipients not being incremented on failed sendouts.
- Fixed styling of send test email button on email settings page.
- Added LITE and PRO editions that can be purchased from within the plugin store.
- Fixed custom field values not being correctly applied when importing a user group into a mailing list (#53).
- Reverted saving initial settings after plugin is installed.
- Fixed error that could occur when syncing a user group to a mailing list.
- Fixed redirect to welcome screen after the plugin is installed.
- Fixed error that could occur when the plugin is uninstalled.
- Fixed unused edition showing in plugin badge.
- Improved contact syncing using the user ID.
- Contacts are now deleted when a synced user is deleted.
- Fixed bug in which trashed campaigns, contacts and mailing lists were not being filtered out of report results.
- Fixed broken link for contact import view.
- Fixed added count in case of contact import failure.
- Fixed bug that changed the value to
0
when saving segment values.
- Fixed bug that could prevent sendouts from being marked as complete when the campaign body contained 4 byte Unicode characters (#50).
{warning} Due to some significant changes in Craft 3.1, the email settings should be checked after updating.
- Added compatibility with live preview in Craft 3.1.
- Added restore action to deleted elements.
- Added auto suggest template fields to campaign types and mailing list types.
- Added environment variables to API key field.
- Added environment variables to ipstack.com API key field.
- Added environment variables to reCAPTCHA fields.
- Minimum requirement of Craft has been changed to version 3.1.0.
- Removed deprecated code.
- Fixed error that could occur during updating the plugin when using Craft 3.1.
- Added lightswitch field support to segment condition fields.
- Fixed bug where translations were not being applied in the campaign’s site language (#47).
- Fixed error when displaying segments that contain date conditionals in element index.
- Fixed bug that marked sendouts as pending even when they were completely sent.
- Fixed error that appeared after running pending sendouts console command.
- Added subscribed date to exportable fields.
- Changed some text fields to code fields within the plugin settings.
- Improved console command instructions.
- Improved cron job instructions.
- The "Send Test" button is disabled when clicked and re-enabled on completion.
- Fixed a bug that could occur when sending test emails failed.
- Added ability to save campaign and create scheduled sendout (#33).
- Fixed error that could be thrown when editing automated sendouts (#41).
- Optimised sendout methods for improved performance in the control panel and sending (#39).
- Fixed bug that could prevent the correct from name and email from being selected on the sendout edit page (#38).
- Changed Guzzle client to use default config values.
- Fixed bug that prevented users being assigned to the default user group from being added to a synced mailing list (#35).
- Fixed error that occured when deleting a mailing list that was previously used for an import (#36).
- Added verify email subject field to mailing list type settings page (#31).
- Added
campaign/tracker/update-contact
controller action for allowing contacts to update their details on the front-end (#19).
- Fixed error that could occur when sending a test email from the email settings page (#30).
- Fixed bug with campaign types and mailing list types not being assigned a default site ID.
- Added an optional
$campaignId
parameter to thegetContactCampaignActivity
method in the reports service. - Added an optional
$mailingListId
parameter to thegetContactMailingListActivity
method in the reports service.
- Fixed bug with campaign fields not appearing in live preview .
- Fixed missing table to drop on uninstall.
- Fixed migration from beta that didn't check for the existance of columns before adding them.
- Fixed error when creating a new mailing list.
- Fixed a bug with site URLs not being respected in sendout emails that were not in the primary site .
- Added multi-site functionality to campaigns, mailing lists, segments and sendouts.
- Added editable table field for adding from name and email addresses on a per-site basis.
- Added checks to determine whether the live preview and share buttons should be shown on campaign edit page.
- Added PHP binary path to cron job instructions in general settings if it exists.
- Added template tags to mailing list type emails and templates.
- Changed minimum version of Craft to 3.0.16 due to addition of
DateTime
parameters to theparseDateParam
method. - Changed API key back to being a required field.
- Changed report rates to round percentages up rather than down.
- Moved HTML and plaintext iframes into new tab in sendout view.
- Fixed a bug with campaign and mailing list charts not appearing correctly in reports tab on edit pages.
- Fixed a bug in the first sent date and time in campaign reports .
- Fixed a bug with contact activity in mailing list reports.
{tip} This version adds multi-site functionality to campaign types, mailing list types, segments and sendouts. All existing elements will be assigned to the primary site by default.
- Fixed a bug in which counts and percentages in location and device reports could be incorrectly calculated.
- Improved how elements are output in exported CSV file.
- Set a
$enableSnaptchaValidation
parameter tofalse
in the webhook controller.
- Fixed a bug in which a completed sendout could be marked as pending if complained or bounced contacts existed in the selected mailing lists .
- Fixed a bug in which an exception could be thrown if a logged-in user was not found when trying to import contacts.
- Added warning to general settings and preflight if
@web
alias is used in the base URL of any site or volume.
- Allowed utility to be used even if API key is not set .
- Added a console command to run pending sendouts in order to avoid server limits being exceeded through web-based controller actions.
- Fixed a bug which prevented recurring sendouts to be sent to contacts multiple times even if the setting was enabled.
- Improved checks for contacts that were sent to.
- Fixed a bug that could cause the sendout job to silently stall if a URL in a campaign was more than 255 characters .
- Put checks in place to ensure that the same contact cannot receive a recurring sendout more than once on the same day .
- Made the current sendout available in the email template as
sendout
. - Set the
auto_detect_line_endings
run-time configuration to true before importing from a CSV file to ensure that line endings are recognised when delimited with "\r".
- Fixed a bug that could prevent the campaign report chart from displaying.
- Fixed a bug when importing contacts.
- Fixed a bug in the accuracy of determining whether a recurring sendout can be sent based on the time of day.
- Fixed a bug in the accuracy of determining whether a recurring sendout can be sent based on the last send date.
- Added info text next to Amazon SES webhook in settings .
- Changed email header name for SID and improved Amazon SES webhook.
- Fixed bug in determining when recurring sendouts are allowed to be sent.
- Added custom template conditions to segments.
- Added recurring sendouts (pro version).
- Added ability to sync contacts with users by syncing mailing lists with user groups (pro version).
- Added info tooltip with available template tags to all template settings .
- Added utility to queue pending sendouts.
- Added sendgrid to webhooks in general settings.
- Added
segmentId
parameter to sendout element query.
- Replaced Frappe charts with ApexCharts.
- Improved reliability of pausing and cancelling sendouts when sending has already begun .
- Changed "unsent" campaign status to "pending".
- Updated some potentially long text fields to MEDIUMTEXT.
- Automated sendouts are now only sent to contacts who subscribe after the sendout creation date.
- Added quotes to cron job URL to ensure that query parameters are respected.
- Removed unuseful edit action from sendout element index page.
- Refactored templates and added clearer instructions.
- Fixed bug in Amazon SES webhook controller action.
- Fixed possible inaccurate first send date in campaign report.
- Fixed date picker bug in segment conditions.
- Fixed bug in sendout progress calculation.
Thank you to Story Group for partly funding the features in this version.
- Added "Verify Email Template" and "Verify Success Template" settings to mailing list types.
- Fixed mailing list type fields that were not being saved.
- Fixed errors that occurred with PostgreSQL.
- Fixed an error that could appear when deleted mailing lists or segments were saved in an existing sendout.
- Added
run
parameter toqueue-pending-sendouts
action.
- Fixed missing status colours in sendouts.
- Added source to contact's mailing list activity report.
- Removed duplicate location and device columns.
- Removed timeline from contact report.
- Refactored reports variables.
- Fixed bug when importing contacts without any fields defined.
- Added reCAPTCHA invisible mode and extra settings.
- Added subscribe and unsubscribe events to tracker service.
- Refactored template layouts.
- Improved contact import queue message.
- Added language query parameter to reCAPTCHA.
- Made reCAPTCHA and GeoIP setting fields required when enabled.
- Improved reCAPTCHA field labels in errors.
- Added reCAPTCHA spam protection to mailing list subscription forms.
- Added GeoIP settings for ipstack.com.
- Removed MLID column and MLID required setting.
- Fixed import view template bug.
- Fixed mailing list type HTML attribute in mailing list index .
- Fixed pending contacts source column.
- Stable release.
- Moved import and export pages into contacts navigation item.
- Nested import and export user permissions under manage contacts.
- Added webhook request log message.
- Fixed Mailgun webhook.
- Fixed open tracking image.
- Added webhook for Amazon SES complain and bounce notifications.
- Removed IP address in location field for GDPR compliance.
- Changed how source URLs are stored.
- Changed order of contact campaign activity.
- Improved webhook handling.
- Refactored code.
- Fixed device icon positioning in reports.
- Fixed permissions bug when viewing a campaign when not logged in.
- Fixed lost settings when sending test email.
- Fixed SQL bug when retrieving links report.
{warning} This update will delete any currently pending contacts.
- Added maxPendingContacts config setting.
- Changed how pending contacts are stored to be non-destructive.
- Added queuing of automated sendouts based on automated schedule.
- Added "months" to time delay interval options.
- Changed how time delay intervals are stored.
- Improved responses to controller actions.
- Added Campaign Pro features.
- Added call to queue pending sendouts after CP login.
- Removed expectedRecipients column.
- Changed Craft version requirement to 3.0.1.
- Changed "Plugin Settings" back to "Settings".
- Improved webhook response messages.
- Changed Craft version requirement to 3.0.0.
- Removed check for Craft Client edition .
- Disabled Campaign Pro features.
- Added ttr and maxRetryAttempts to sendout job.
- Changed test emails to require a contact.
- Made classes gender neutral.
- Fixed deprecation error on preflight screen.
- Added user photo to preflight screen.
- Improved how sendouts store recipients.
- Improved warning messages when deleting elements.
- Improved report headings.
- Changed plugin icons to be clearer.
- Changed max power to respect limits in import and export.
- Added smart batching in sendout jobs (credit to Oliver Stark @ostark for his input on this).
- Added system limits to preflight screen.
- Added config settings.
- Changed Craft version requirement to 3.0.0-RC16.
- Changed AJAX request to queue/run only when runQueueAutomatically is true.
- Fixed error handling on preflight screen.
- Added preflight sendout screen.
- Added more user group permissions.
- Added verified timestamps for GDPR compliance.
- Added purging of pending contacts with "purgePendingUsersDuration" config setting.
- Changed "Settings" to "Plugin Settings".
- Moved "actionVerifyEmail" into TrackerController.
- Improved performance of SQL queries in reports.
- Improved accuracy of tracked locations and devices.
- Fixed SQL error when only_full_group_by mode enabled.
- Initial release of public beta.