Scheduled campaigns now displays their scheduled dates in the 'Sent' column of the campaign item in 'All campaigns'. If you have a bunch of campaigns scheduled for sending later, you can see all scheduled dates at a glance without having to mouse over each campaign's title.
The unsubscribe link in the ‘List-unsubscribe’ header will bypass double opt-out even if it is set in the list settings. This is to comply with RFC 8058. Unsubscribe links in the email body will still respect double opt-out if it is set as such. (Thanks James Cridland for the tip)
Signing up to a list via the API will no longer update segments to prevent overwhelming the server for users with a large volume of subscribers. Segments should be updated exclusively using a cron job or manually at the segments section.
If an email address ‘Bounced’, their subscription status will display as 'Bounced' in the ‘Search all lists’ page regardless of whether they confirmed their subscription previously. This follows the same display behaviour as the subscriber list page.
Fixed deprecation warning in the header.php script
Fixed fatal error for uncaught type error for some users in tracking script. (Hat tip Mathieu Landry)
Fixed deprecation errors in PHP 8.1+ for AbstractModel.php and AbstractRecord.php
Updated geolocation database
When using the [Name] or [Name,fallback=] tag, Sendy now capitalizes the first character of the subscriber’s name if the name is in all lowercase.
When updating a subscriber's email in the 'Subscriber info' modal, any previous bounce, marked as spam, or unsubscribe status will reset as the subscriber becomes new.
When hitting ‘Enter’ to change a subscriber’s email address in the ‘Subscriber info’ modal, the ‘Email already exist in this list’ JS alert will no longer show up
Support ‘eventType’ in addition to ‘notificationType’ when handling JSON payload from SNS notifications. This is to ensure bounces and complaints are handled when using configuration sets to send emails in Amazon SES. (Thanks Chris Denning for the heads up)
Google no longer supports QR code generation, this causes QR code images to be broken when enabling 2 Factor Authentication. This update fixes that.
Fixed broken link for attachments when editing Autoresponder emails
Resolved an issue where attachments were not included in the autoresponder email when sending a 'test' autoresponder email.
Updated geolocation database
TO ENSURE THAT YOUR EMAILS CONTINUE TO REACH GMAIL AND YAHOO ACCOUNTS, UPDATE TO THIS VERSION.
One click unsubscribe
Starting from February 1, 2024, bulk email senders who sends more than 5,000 messages a day to Gmail or Yahoo email accounts are required to include both the List-Unsubscribe-Post: List-Unsubscribe=One-Click and List-Unsubscribe headers in their emails. Sendy already supports the List-Unsubscribe header since version 1.1.9.4, more than a decade ago. This latest version now also includes the List-Unsubscribe-Post: List-Unsubscribe=One-Click header as mandated by Google and Yahoo.
Email authentication
Authenticating your sending domain with DKIM, SPF and DMARC used to be email sending's best practice. Now, it is a mandatory requirement. As Sendy uses Amazon SES to send emails, you can refer to the following links to learn how to set up DKIM, SPF, and DMARC for your sending domains if you haven't done so already.
Reduce spam rates
Maintain a spam complaint rate under 0.3%. As Gmail does not share complaint rates (a.k.a. marked as spam rate) data with Amazon SES or any other ESPs, you can register your sending domain with Google's Postmaster Tools to see and monitor your spam rate with Gmail.
Learn more:
Official announcement from Google | Google's email sender guidelines
Official announcement from Yahoo | Yahoo's email sender requirements
AWS secret key password field in the main settings will now be blank (previously obfuscated in the password field). To update the AWS secret key, enter the new secret key in the field. If left blank, the secret key will not be changed.
Sendy will now remove 'unicode white spaces', in addition to 'regular white spaces', in email addresses when importing CSV files.
Resolved issue where exporting CSVs with an empty date-based custom field would result in an incorrect date (1969/12/31) displayed in the corresponding column.
Fixed bug where submitting the standard subscribe form with empty date based custom field returns Jan 01, 1970 instead of an empty value.
Updated geolocation database
Added ‘Precedence: Bulk’ header to outgoing campaigns to inform ISPs that your email campaign is sent in bulk, preventing them from sending out-of-office replies to you and reducing the chances of your bulk emails from being sent to the spam folder.
The ‘Search all lists’ function now includes ‘lists’ in the search results page (in addition to ‘subscribers’). If you have numerous lists and want to avoid paging through the 'View all lists' page to locate a specific one, you can now conveniently use the 'Search all lists' feature located at the top right of the page to search for lists.
The results page for 'Search all lists' and 'Search campaigns' now includes the search field that is in focus when the page load. This allows you to continue searching without the need to go back to the previous page.
A paper clip icon now appears alongside the campaign or autoresponder email title if an attachment is present
If a campaign includes an attachment, it will now be visible in the campaign report. You can view, download, or delete it.
Fixed alignment issues in the sub-menu header of the subscribers page in Safari (Thanks Anthony Chan for the heads up)
Apply the same sorting preference for segments as for lists in the 'Define recipients' page (the page where you select lists to send your campaigns to) (Thanks Francisco Vásquez Neira)
Some fixes to eliminate PHP notices (Thanks James Cridland)
[PHP 8.2.7+] Trim and type cast ‘total_recipients’ with ‘int’ when sending campaigns without a cron job setup (thanks Gary Cornelisse)
Updated geolocation database
- Added a 5 second timeout to curl calls for click tracking to prevent server time outs or crashes when large number of clicks are being recorded (Thanks James Cridland & DJ Ramones)
- Fixed ‘Get lists’ API returning hidden lists by default or if ‘include_hidden’ is set to ‘no’ (Thanks Heiner Gassen)
- Fixed date based custom field setting the value to “Jan 01, 1970” instead of “not set” when emptying it. (Thanks Sander Devrieze)
- Fixed accented characters not showing up correctly when importing a CSV
- Get host of Sendy install using explode function if parse_url doesn’t return ‘host’ data when creating or editing a brand
- Changed method to derive APP_PATH_DOMAIN
- Updated geolocation database
- You can now choose whether you want Sendy to perform a check for broken links when creating or editing a campaign
- Also added a 5 seconds timeout to broken link detection curl
- Streamlined the design for ‘Also save as template?’ checkbox option when creating / editing a campaign or autoresponder
- Updated geolocation database
- New 'unsubscribe tag' detection
Sendy now checks for missing unsubscribe tags in your email before sending out your campaign. A message will appear reminding you (or your clients) that an unsubscribe tag is missing in your email and it is recommended to add one to minimise complaint rates.- Automatically fix incorrect usage of unsubscribe tag
Sendy now checks if you accidentally used a 'dummy placeholder unsubscribe link' in your email instead of a proper unsubscribe tag. If the latter is used, Sendy will automatically replace it with the correct [unsubscribe] tag.- Broken links detection
Sendy now checks all links in your email for broken links before you send out your campaign. If there are broken links in your email, Sendy will inform you with the list of broken links so that you can fix them before sending out your email.- The 1 x 1 pixel tracking image has been substituted with a base64 version of the image to reduce the file size and eliminate one HTTP redirect. Although this may appear insignificant for a single open, it can result in thousands of HTTP redirects being saved for numerous opens. ~ Thanks James Cridland for the suggestion
- Adjusted CSS for mobile view
- Fixed ‘Uncaught DivisionByZeroError’ in Autoresponders emails page
- Updated geolocation database
- In the brand settings, you now have the option to choose whether new lists should use 'single' or 'double' opt-in as the default setting.
- When creating or editing a template, you now have the ability to specify the 'From name', 'From email', and 'Reply to' fields.
- Updated CKEditor to version 4.21.0
- When adding a new list, you’ll now be redirected to the main subscribers page of that list instead of the ‘Add subscribers’ page.
- Changed ‘blue informational message’ to ‘yellow informational message’ in cron job setup instructions
- [PHP 8.2] Fix for 500 error when importing CSV with special characters ( eg.: “” or • ) ~ Thanks Michele Biasizzo
- Updated geolocation database
- You can now enable or disable individual rules easily with Yes or No toggle buttons. This way, you don’t need to delete a rule in order to disable a rule.
- You can now pass variables into your custom ‘Already subscribed’ URL in the list settings. Supported variables are %n for name, %e for email and %l for list ID.
- [PHP 8.1] Some PHP 8.1 fixes
- [PHP 8.2] Fix for CSV import may get stuck at a certain percentage when importing CSVs with custom fields
- [PHP 8.2] Fix for PHP 8.2 error - ‘Using ${var} in strings is deprecated’
- [PHP 8.2] Fixed ‘PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /includes/helpers/class.amazonses.php
- Changed Ukrainian capital city from ‘Kiev’ to ‘Kyiv’ in timezone selection. (hat tip: Tamara Zakharova)
- Updated geolocation database