Orange Collar Media
Orange Collar Media
DOCS
OCMLABS/MODULE-PRODUCT-MESSAGING · CHANGELOG

Product Messaging module changelog

  • Magento
  • Adobe Commerce
  • Hyvä

All notable changes to OCMLabs Product Messaging are listed here. This module follows Semantic Versioning.

1.1.0 - 2026-10-06

Added

  • PHP 8.5 support, alongside PHP 8.2, 8.3 and 8.4. Magento 2.4.9 stores running PHP 8.5 can now install the module.

Changed

  • The Adobe Commerce package now requires ocmlabs/module-product-messaging ^1.1, so a Commerce install always gets this release or newer.

Fixed

  • Uploading a PDF attachment no longer raises a deprecation notice on PHP 8.5.
  • The bundled unit tests run again on Magento 2.4.9 (PHPUnit 12) as well as 2.4.8. This affects development of the module only.

1.0.4 - 2026-07-30

Fixed

  • Saving a rule after using the email-template quick-create no longer throws the browser onto a page of raw text starting {"success":true,"template_id":...}. The rule save was abandoned when this happened, so the rule had to be filled in and saved a second time. Opening the quick-create form and cancelling it was enough to cause it; only a page reload cleared the condition.
  • The Customer Groups field no longer offers an “ALL GROUPS” entry that could not be used. Choosing it on its own failed the save with “The selected customer groups no longer exist”, and choosing it alongside a real group dropped it without saying so. To apply a rule to every customer group, leave the field with nothing selected, as the field’s own note describes.

1.0.3 - 2026-07-28

Changed

  • Magento Open Source and Adobe Commerce 2.4.9 are now supported. Installing on 2.4.9 previously failed outright, with Composer reporting an unsatisfiable magento/framework constraint alongside a conflict against the edition metapackage.
  • No functional code changed in this release. Compatibility was verified against a live Magento Open Source 2.4.9 installation: every Magento class and interface the module references still exists, all of its classes build through the 2.4.9 dependency-injection container, setup:di:compile completes, and the database schema and sample email templates install as before.

Known limitations

  • PHP 8.5 is not supported. Magento 2.4.9 allows PHP 8.3, 8.4 or 8.5; this module supports PHP 8.2, 8.3 and 8.4, so a 2.4.9 store running PHP 8.5 cannot install it.
  • Adobe Commerce 2.4.9 has not been verified directly. The Commerce metapackage constraint was widened in step with the Open Source package, and the module contains no edition-specific code, but the testing above was performed on Open Source.
  • The bundled unit tests do not run on Magento 2.4.9, which ships PHPUnit 12 in place of the PHPUnit 10 used by 2.4.8. This affects development of the module only, not its installation or operation.

1.0.2 - 2026-07-27

Security

  • The rule form’s email-template quick-create no longer lets an administrator without the Magento email-template permission edit an existing template. Previously anyone who could manage messaging rules could rewrite any transactional template in the store, including order confirmation and password reset.
  • The Send Test button now only searches for a matching order within the rule’s own store views, so a test send cannot expose an order from a store the rule does not cover.

Fixed

  • Multi-address (multishipping) checkouts now trigger the email action. Rules using the Order Placed trigger previously did nothing at all for these orders, with no error recorded.
  • The checkout success page now shows matched blocks after a multi-address checkout. It previously showed none, or in some sessions showed the blocks matched for a previous order.
  • Send Test now works. It previously failed every time with an internal error and never sent anything.
  • PDF attachments can now be uploaded to a rule. Uploading previously failed on every rule with “Save the rule first before adding attachments”, even on a saved rule.
  • Removing a PDF attachment now actually deletes it. The file and its record previously survived the save and reappeared when the page was reloaded.
  • The ”+ Create New Template” and “Edit” links next to Email Template now open. They previously did nothing when clicked.
  • Saving from ”+ Create New Block” now closes the dialog and refreshes the Success Block list without a page reload, and a failed save, such as a duplicate identifier, now reports the reason instead of appearing to succeed.
  • The Delete action on a rule grid row now deletes the rule instead of returning a “page not found” error.
  • The rule grid and Email Log no longer offer a keyword search box that silently returned every record regardless of what was typed.
  • Setting Batch Size, Max Send Attempts, Retry Base Delay, or Max Attachment Total Size to 0 or blank no longer causes destructive behaviour. Batch Size 0 previously processed the entire queue in one run, and Max Send Attempts 0 marked an email as failed on its first temporary error with no retry.
  • Log Retention set to 0 now means “never prune”. It previously deleted the entire Email Log on the next nightly run.
  • Test Mode with an empty Test Mode Recipient no longer sends to the real customer. The email is now failed and logged instead.
  • A failure delivering to a Copy To recipient no longer causes the customer to receive the same email again on each retry.
  • An email is no longer sent for an order that was cancelled or refunded while a send delay was pending.
  • Shipment Created emails now show the quantity actually shipped instead of the full quantity ordered.
  • Fully cancelled or refunded order lines no longer trigger messaging for products the customer was never charged for.
  • Grouped products are now matched when child matching is enabled.
  • SKU patterns now treat ?, [ and ] as ordinary characters, so a SKU containing them can be targeted exactly, and * is the only wildcard. Matching is now consistently case-insensitive for accented and non-Latin SKUs.
  • A rule saved with no store views selected now applies to all store views instead of silently never firing.
  • Rule fields are now validated on the server, not only in the browser: the rule name, send delay, trigger, status, copy method and the store and customer group selections are all checked and report a readable message instead of a raw database error.
  • Running a mass action with nothing selected now shows “An item needs to be selected” instead of an error page with a report ID.
  • A rejected rule save now returns the form with the submitted values intact instead of blank.
  • Saving a duplicate or over-long email template name from the quick-create dialog now says so, instead of showing a generic failure.
  • Installing the module no longer aborts setup:upgrade for the whole installation when a store already has an email template named the same as one of the samples.
  • Resending an email from the Email Log is now guarded against the send cron running at the same time, so a resend can no longer be silently discarded.
  • A queued email for a deleted store view is now resolved instead of being retried every minute indefinitely, and no longer causes the next email in the batch to render with the wrong store’s theme or language.
  • An interrupted send (timeout, restart) no longer results in the customer receiving a duplicate email on the next cron run.
  • A single unmatchable product or misconfigured rule no longer prevents the other matched rules on the same order from being queued.
  • Product links in the matched-items table are now omitted for products that are not individually visible, instead of linking to a page that returns “not found”.
  • Email Log statuses now read as words with styling rather than relying on colour alone.

Added

  • Delete control for PDF attachments on the rule form, with a confirmation prompt.
  • Confirmation prompts before resending an email from the Email Log or a grid row.
  • i18n/en_US.csv so all admin and storefront text can be translated.
  • LICENSE.md.

Changed

  • The admin menu moved from System to Sales, and is now grouped by feature rather than by vendor. What was System > OCM Labs > Product Messaging is now Sales > Product Messaging > Rules, and the delivery history is at Sales > Product Messaging > Email Log. Everything the module does is order-driven, so Sales is where it belongs; System is for infrastructure. Existing admin roles are unaffected - every permission name is unchanged, so a role that could already manage rules still can, and its resources simply appear under Sales in the role editor. Module settings stay where they were, at Stores > Configuration > OCM Labs > Product Messaging.
  • The inline ”+ Create New Template”, “Edit”, “Manage all templates”, ”+ Create New Block” and “Edit” controls on the rule form now render as buttons rather than plain text links, matching the Browse Products control next to SKU Patterns.
  • The variable reference panel below the Email section is now formatted as a readable table and code samples, with visible numbering on the three worked examples. Long variable names no longer break mid-word.
  • The Email Log detail page now uses standard admin sections, shows readable column headings for matched items, hides columns and rows that have no value, and no longer scrolls sideways.
  • Batch Size, Max Send Attempts, Retry Base Delay, Max Attachment Total Size and Log Retention are now required and range-checked in Stores > Configuration, and Test Mode Recipient is required when Test Mode is on.
  • Send delay is capped at 525600 minutes (one year).
  • Every product attribute is now available in email templates with no configuration, and the Matched Item Product Attributes setting has been removed. Previously you had to list an attribute code in that setting before an order was placed, or {{var item.your_attribute}} silently rendered nothing - and the shipped defaults named two attributes that do not exist in a stock Magento catalog, so out of the box it did nothing at all except add two blank columns. Now every attribute the matched product carries is captured automatically: add {{var item.warranty_length}} to a template whenever you like and it works. Values are still captured at the moment the rule matched, so an email always reflects the product as purchased. cost is deliberately never captured, since the snapshot is kept in the Email Log.
  • The ready-made {{var matched_items_html|raw}} table now always shows Product, SKU and Qty. It previously added a column for each attribute in the removed setting; to build a table with your own columns, use a {{for item in matched_items}} loop, which can show any attribute and is documented in the variable reference on the rule form.
  • Product attribute values never override the built-in sku, name, qty, row_total, product_id, product_url or image_url fields, so a product renamed after an order still shows what the customer actually bought.

1.0.1 - 2026-07-24

Changed

  • Restructured for multi-package distribution: the module now ships as ocmlabs/module-product-messaging (Magento Open Source and Adobe Commerce) plus ocmlabs/module-product-messaging-commerce (Adobe Commerce licensing metapackage). No functional changes.

1.0.0 - 2026-07-24

Initial release.

Features

  • Per-SKU product messaging rules: match exact or * wildcard SKU patterns, with optional matching of configurable/bundle child SKUs.
  • Two independently-toggleable actions per rule - send a native Magento email template, and/or show a CMS static block on the checkout success page - with at least one required.
  • Email action triggers: Order Placed, Invoice Created, or Shipment Created, each with an optional per-rule send delay.
  • Template variables for order, customer, store, rule, and matched items - including a pre-rendered HTML items table and configurable product attribute exposure - usable with standard Magento directives ({{var}}, {{trans}}, {{if}}, {{for}}).
  • PDF attachments per rule, MIME-verified at upload with a combined size cap; a missing attachment file at send time doesn’t block the email.
  • Checkout success-page CMS block display, evaluated live on every page view, stacking multiple matched rules in rule-ID order, working identically on Luma and Hyva.
  • Store-view and customer-group scoping on both actions.
  • Cron-driven send queue with configurable batch size, automatic retry with exponential backoff, and a full Email Log grid with Resend and Cancel.
  • Unique rule-and-order constraint guaranteeing a rule can never email the same order twice, including across double saves, re-invoicing, and partial shipments.
  • Synchronous Send Test button on the rule form.
  • Test Mode for diverting all real sends to a single address on staging environments.
  • Two sample email templates (“OCM Product Warranty Information” and “OCM Product Instruction Manual”) installed automatically on setup.
  • ACL-controlled admin access for rule management, deletion, the Email Log, and configuration.
  • Store configuration for sender identity, guest-order handling, retry and batch tuning, test mode, the success-block kill switch, matched-item attribute exposure, attachment size cap, and log retention.

Requirements

  • Magento Open Source or Adobe Commerce 2.4.7 - 2.4.8
  • PHP 8.2, 8.3, or 8.4