Changelog

changelog

Every week we summarize what happened in Ecomail. New features, minor and major improvements or bug fixes.

New unassigned templates filter, individual notification fix and API

New unassigned templates filter in the overview, fix for individual subscribe and unsubscribe contact notifications, fix for the bell notification when the contact limit is exceeded, new sGTM tag version and two API fixes.

IMPROVEMENT

Templates: new Unassigned filter in the overview

The templates overview now has an Unassigned item in the dropdown menu. It shows only templates that are not assigned to any folder. The item displays the count of such templates and the selection stays active even after refreshing the page. Users with many templates can easily find and organise templates outside the folder structure.

FIX

Contacts: individual notifications can be set up separately

For individual subscribe and unsubscribe contact notifications, the notification was only sent when both addresses were filled in at once. Now it's enough to fill in just one of them ‑ the subscribe notification address separately, the unsubscribe one separately, or both together. The notification is sent based on which addresses are filled in.

FIX

Campaigns: the bell shows the correct reason for non‑delivery when the contact limit is exceeded

Plan‑based accounts whose sending was blocked due to exceeding the contact limit were incorrectly shown a message about insufficient email credits in the bell notification. Now the correct information is shown ‑ that the number of contacts exceeds the plan limit, with a recommendation to upgrade the plan or reduce the number of active contacts.

IMPROVEMENT

Server‑side GTM: new version of the Ecomail tag

We've released a new version of the Ecomail tag for server‑side Google Tag Manager. We fixed the data assembly when unsubscribing a contact. For unsubscribing to work correctly, the Update existing option must be enabled in the Data about user section of the tag template.

FIX

API: creating an already existing domain returns a readable error

The POST /domains endpoint returned a generic 500 error with an HTML response when attempting to create a domain that already exists in the account. It now returns status code 422 with a readable JSON body that clearly states the domain already exists.

FIX

API: overly long web event parameters are trimmed instead of failing

The web events endpoint (tracker/events) could fail if an incoming parameter exceeded the length allowed by the database. The value is now automatically trimmed to the allowed length and returned in that form in the response, so the request completes without an error.

Fixes for product feed, coupons, report export and API filter

Fix for product feed matching with product variants, expired coupons no longer imported from integrations, fix for report export respecting filters and fix for the not_opened API filter in the campaign log.

FIX

Product feed: product variants are now correctly matched with feed data

For products with variants, the product code contains a slash or a space (e.g. 12345/ABC). Different feeds stored the same product with a slash in one and an underscore in another, so the code from the order did not match the product in the feed. As a result, automated emails (last purchased products) showed the price and name, but the description, product link and image were missing. Product codes are now normalised before comparison, so the product is found in the feed regardless of whether it's stored with a slash, a space, or an underscore.

IMPROVEMENT

Integrations: expired coupons are no longer imported

Coupons with an expired validity date were imported into the account via the Eshop‑rychle and Upgates integrations even after expiring, which then got deleted and re‑imported day after day. Only coupons valid today or in the future are now imported; a coupon without a validity date is treated as permanently valid. The change only affects future synchronisations and does not touch coupons already in accounts.

FIX

Reports: exporting selected items respects active filters

When using the "All in list" option, the export ignored the applied filters (date range, type, name) and exported the entire campaign list. The export now matches what the user actually sees after filtering. If a user selects all records and then manually deselects some, the export only includes the records that remain selected.

FIX

API: campaign log filters correctly by not_opened

The campaign log endpoint always returned an empty result when filtering by the not_opened event, even for campaigns with demonstrably unopened emails. The filter now returns the correct list of contacts who did not open the campaign.

Fixes for domains, custom permissions for RSS and contact notifications

Fix for deleting a tracking domain, missing permission for RSS feeds and contact notifications.

FIX

Domains: a tracking domain can be deleted even if it matches the sending domain

If a client had the same domain set up as both sending and tracking, the tracking domain could not be deleted ‑ the application considered it in use because of the sending domain. Using a domain as the sending domain no longer blocks deletion of the tracking domain with the same name.

FIX

Custom permissions now allow access to RSS feeds

The custom permissions settings were missing the option to grant a user access to RSS feeds. As a result, the user could not see RSS feeds in the menu and received a 403 error when accessing the page directly. Permission for RSS feeds is now part of the custom permissions configuration.

FIX

Contacts: subscribe notification for a list is now sent reliably

On some accounts, the notification about a new contact subscribing to a list was not sent despite correct settings.