# dotdigital/dotdigital-magento2-extension

> Dotdigital for Magento 2

`composer require dotdigital/dotdigital-magento2-extension`

Canonical URL: https://packagento.com/dotdigital/dotdigital-magento2-extension

## At a glance

- **Vendor**: dotdigital (https://packagento.com/dotdigital.md)
- **Latest version**: 4.34.2 — released 2026-03-12
- **Pricing**: Free
- **Package type**: Magento 2 module
- **Status**: active, accepting new buyers

## Installation

Packagento is licence-gated, so even free packages need a licence on a project before Composer can resolve them.

1. **Sign in or create an account** at https://packagento.com/customer/account/.

2. **Add the package to your account.** Open https://packagento.com/dotdigital/dotdigital-magento2-extension and complete the free checkout. A licence is minted automatically.

3. **Create or pick a project, then activate the licence on it.**
   - Projects represent the Magento installs you deploy to. Manage them at https://packagento.com/projects/.
   - Activate the new licence on the project you'll deploy this package to. Activation is what generates the Composer credentials scoped to that project.

4. **Add the project credentials to your Magento codebase.**

   Grab the project's public + private key from https://packagento.com/projects/ (open the project, then its Credentials tab), and add them to `auth.json`:

   ```json
   {
     "http-basic": {
       "packagento.com": {
         "username": "ppk_live_...",
         "password": "psk_live_..."
       }
     }
   }
   ```

   Add the Packagento Composer repository to `composer.json`:

   ```json
   {
     "repositories": [
       { "type": "composer", "url": "https://packagento.com" }
     ]
   }
   ```

5. **Install and apply.**

   ```bash
   composer require dotdigital/dotdigital-magento2-extension:*
   bin/magento setup:upgrade
   bin/magento setup:di:compile
   bin/magento cache:flush
   ```

## What it does

Dotdigital for Magento 2

## README

[![Packagist Version](https://img.shields.io/packagist/v/dotdigital/dotdigital-magento2-extension?color=green&label=stable)](https://github.com/dotmailer/dotmailer-magento2-extension/releases)
[![Packagist Version (including pre-releases)](https://img.shields.io/packagist/v/dotdigital/dotdigital-magento2-extension?color=blue&include_prereleases&label=feature)](https://github.com/dotmailer/dotmailer-magento2-extension/releases)
[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](LICENSE.md)

### Requirements
- PHP 7.4+
- Magento 2.4.2+ 
    - Magento 2.1.x is compatible up to version 4.2.0-p1
    - Magento 2.2.x is compatible up to version 4.13.x
    - Magento 2.3.0-2.3.6 are compatible up to version 4.21.x
    - Magento 2.3.7, 2.4.0 and 2.4.1 are compatible up to version 4.32.x

### Version history
Please see our [Changelog](CHANGELOG.md) or the [Releases](https://github.com/dotmailer/dotmailer-magento2-extension/releases) page.

### Installation
We encourage merchants to install our core modules via our combined **Dotdigital - Marketing Automation** extension:
- View the listing on [Magento Marketplace](https://marketplace.magento.com/dotdigital-dotdigital-magento2-os-package.html).

**Steps:**
1. You must ‘purchase’ the [core extension](https://marketplace.magento.com/dotdigital-dotdigital-magento2-os-package.html) from the Marketplace.
2. Any existing `require` instructions in your composer.json relating to `dotmailer/*` packages must be removed.
3. Now, require the package.
```
composer require dotdigital/dotdigital-magento2-os-package
```

### Usage and support
Full support documentation and setup guides are available [here](https://support.dotdigital.com/en/collections/5610169-magento-open-source-and-adobe-commerce).

#### CLI commands
##### sync
Run the sync commands on demand. Useful when troubleshooting cron issues.
```
bin/magento dotdigital:sync
```
This will yield a list of options:
```
Please select a Dotdigital sync to run
  [0 ] AbandonedCart
  [1 ] Automation
  [2 ] Campaign
  [3 ] Catalog
  [4 ] Customer
  [5 ] Guest
  [6 ] Importer
  [7 ] IntegrationInsights
  [8 ] Order
  [9 ] Review
  [10] Subscriber
  [11] Template
  [12] Wishlist
  [13] NegotiableQuote (B2B module required)
```

##### task
A task-runner for utility jobs that aren't syncs. Again, these have crons, so you wouldn't normally need to run these manually.
```
bin/magento dotdigital:task
```
This will yield a list of options:
```
Please select a dotdigital CLI task to run
  [0] Cleaner
  [1] SmsSenderManager (SMS module required)
```

##### migrate
The `migrate` command is a way to re-run the module's data installation process after initial install. 
```
bin/magento dotdigital:migrate [--table=<table_name>]
```
You may supply the following table options: 
```
email_contact
email_order
email_review
email_wishlist
email_catalog
email_b2b_quote (B2B module required)
```
Running `migrate` with no options supplied will re-run the complete data installation process. 

**Warning:** 
- `migrate` starts by truncating tables (either the table you supplied as an option, or, if no options were provided, all `email_` tables).
- You may lose previously saved data with this operation.
- `migrate` will not overwrite a previously-saved dynamic content passcode (4.13.6+). 

### Contribution
You are welcome to contribute to Dotdigital for Magento! You can either:
- Report a bug: create a [GitHub issue](https://github.com/dotmailer/dotmailer-magento2-extension/issues/new) including description, repro steps, Magento and extension version numbers
- Fix a bug: please clone and use our [Develop branch](https://github.com/dotmailer/dotmailer-magento2-extension/tree/develop) to submit your Pull Request
- Request a feature on our [roadmap](https://roadmap.dotdigital.com)

## Changelog

#### Bug fixes
- We fixed a bug with updating contacts in Dotdigital during automation enrolments.

## 4.34.1

#### Bug fixes
- Product special prices in web insight data will be set to zero if there is no discount.

## 4.34.0

#### Improvements
- Opt-in type is now passed in all API calls creating or updating single contacts.
- Merchants can now extend our code to customize product URLs for PWA front ends.
- All types of parent products (including bundle and grouped) will now be resynced when their children are updated.

#### Bug fixes
- We fixed transactional email sends if the recipient name contained a comma.

## 4.33.2

#### Bug fixes
- We fixed a mismatch between web insight prices and displayed prices in certain tax configurations.
- We fixed lowest tax prices for configurable and grouped products in catalog sync and web insight data.
- We fixed a problem with missing categories in `productBrowse`.
- Products with customizable options will now be re-synced as expected after purchase.

## 4.33.1

#### Improvements
- We added extra logging to assist debugging of transactional email sending issues.
- We updated a unit test for our `SymfonySmtpTransporter`.

#### Bug fixes
- Catalog sync was broken when run at default level; this has been fixed.
- Store-scoped catalog sync configs are now visible in store scopes as expected.

## 4.33.0

#### What's new
- The connector's various client-side tracking scripts have been converted to use the unified Dotdigital Tag.

#### Improvements
- The contact report can now be filtered by row id.
- ddlnk.net is added to the CSP whitelist for the `img-src` policy.

#### Notes
- Magento 2.4.2+ is required for this version of the connector.

## 4.32.5

#### Bug fixes
- The filtered order sync collection query now has a group by clause to allow for multiple contact rows with the same contact_id.
- We removed AppEmulation from the OrderSaveAfter observer, which was causing problems in some cases.

## 4.32.4

#### Bug fixes
- We fixed a bug in `TransportPlugin` affecting merchants running older versions of `symfony/mime` and `symfony/mailer`.

## 4.32.3

#### Bug fixes
- We reverted the fix introduced in 4.32.2 for the `TransportPlugin`, as it was causing issues with transactional email sending in some cases.

## 4.32.2

#### Improvements
- We increased the overall speed of our data migration process.
- We optimised the `InsertEmailContactTableSubscribers` migration type.
- We improved exception reporting in `DotdigitalCouponRequestProcessor`.
  
#### Bug fixes
- We fixed a bug in `TransportPlugin` that could prevent execution of subsequent plugins.
- We fixed a problem with order sync where mismatching store ids could prevent some orders being synced.

## 4.32.1

#### Improvements
- We added extra debug logging to the automation queue flow.

#### Bug fixes
- The enabled check in the `StockUpdatePlugin` now checks at website level.
- When products have their status changed in bulk, they will now be reset for sync.
- Empty tables could be output in system alert emails; this has been fixed.
- We fixed a problem with subscribers not being added to the correct list, if double opt-in was configured at Dotdigital.
- We added an extra check to prevent form submission in the account if the customer session has expired.

## 4.32.0

#### What's new
- Indexed prices can now be exported to capture prices set by catalog price rules.
- Tier prices are now exported in all product catalogs.
  
#### Improvements
- Catalog sync is refactored to run faster, importing into the platform during the sync run.
- The deletion of 'orphan' products in catalog sync has been removed.
- We set an upper bound for Magento version compatibility in composer.json (currently 2.4.9).
- Sending transactional email with attachments (via custom code) is restored for pre-2.4.8 installations.

_(Changelog truncated for .md surface. Full history on https://packagento.com/dotdigital/dotdigital-magento2-extension.)_

## Recent Versions

| Version | Released |
|---|---|
| 4.34.2 | 2026-03-12 |
| 4.34.1 | 2026-03-11 |
| 4.34.0 | 2026-02-17 |
| 4.33.2 | 2026-01-30 |
| 4.33.1 | 2025-11-21 |
| 4.33.0 | 2025-11-07 |
| 4.32.5 | 2025-10-09 |
| 4.32.4 | 2025-09-24 |
| 4.32.3 | 2025-09-17 |
| 4.32.2 | 2025-09-02 |

Showing 10 of 202 versions. Full release history on https://packagento.com/dotdigital/dotdigital-magento2-extension.

## Dependencies

### Require

| Package | Constraint |
|---|---|
| dotdigital/dotdigital-php | ^2.6 |
| ext-json | * |
| ext-pcre | * |
| laminas/laminas-http | ^2.6 |
| laminas/laminas-uri | ^2.5 |
| magento/framework | >=103.0.2 <103.0.9 |
| magento/framework-message-queue | ^100.4 |
| magento/module-authorization | ^100.4 |
| magento/module-backend | >=102 <103 |
| magento/module-bundle | >=101 <102 |
| magento/module-catalog | >=104 <105 |
| magento/module-catalog-inventory | ^100.4 |
| magento/module-catalog-rule | >=101 <102 |
| magento/module-checkout | ^100.4 |
| magento/module-config | >=101 <102 |
| magento/module-configurable-product | ^100.4 |
| magento/module-cron | ^100.4 |
| magento/module-customer | >=103 <104 |
| magento/module-directory | ^100.4 |
| magento/module-eav | >=102 <103 |
| magento/module-email | >=101 <102 |
| magento/module-grouped-product | ^100.4 |
| magento/module-mysql-mq | ^100.4 |
| magento/module-newsletter | ^100.4 |
| magento/module-payment | ^100.4 |
| magento/module-product-alert | ^100.4 |
| magento/module-quote | >=101 <103 |
| magento/module-reports | ^100.4 |
| magento/module-review | ^100.4 |
| magento/module-sales | >=103 <104 |
| magento/module-sales-rule | >=101 <102 |
| magento/module-send-friend | ^100.4 |
| magento/module-shipping | ^100.4 |
| magento/module-store | >=101 <102 |
| magento/module-tax | ^100.4 |
| magento/module-theme | >=101 <102 |
| magento/module-ui | >=101 <102 |
| magento/module-url-rewrite | >=102 <103 |
| magento/module-user | >=101 <102 |
| magento/module-wishlist | >=101 <102 |
| nyholm/psr7 | ^1.8 |
| php | ^7.4\|\|^8.0 |
| php-http/curl-client | ~2.3.0 |
| psr/log | ^1 \|\| ^2 \|\| ^3 |
| symfony/mailer | ^5.4 \|\| ^6.4 |
| symfony/mime | ^5.4 \|\| ^6.4 |

### Replace

| Package | Constraint |
|---|---|
| dotmailer/dotmailer-magento2-extension | * |

### Suggest

| Package | Constraint |
|---|---|
| dotdigital/dotdigital-magento2-extension-chat | Adds Dotdigital Chat to your Magento store |

## Quality

Latest release (4.34.2) fails the Packagento QA pipeline. Verdicts below are per-cell (Magento line × PHP version) for the matrixed tools, and run-once for the static / security tiers.


### Compatibility

Each Magento line is installed on its supported PHP versions, then the module is built (DI compile + static-content deploy). Cells show passed / failed / untested; staircase gaps render as `–`.

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | Pass | Pass | – | – |
| 2.4.8 | – | Pass | Pass | – |
| 2.4.9 | – | – | 1 | 1 |


### Code Quality

Advisory checks against the module's source. Never affect the Compatibility verdict — a phpcs finding can't make a module incompatible.

#### Static Analysis

Coding standards (phpcs), mess detection (phpmd), copy-pasted code (cpd), PHP cross-version compatibility, composer.json validity. Each runs once for the whole module.

| Tool | Status | Findings | Summary |
|---|---|---|---|
| PHPCS | Pass | 0 |  |
| PHPMD | Warning | 395 | 395 rule violations (MissingImport:150, IfStatementAssignment:50, UndefinedVariable:42, UnusedFormalParameter:31, UnusedPrivateField:25) |
| Cpd | Pass | 0 |  |
| Composer validate | Info | 1 | valid; 1 advisory note (composer validate --strict) |

#### PHPStan

Type-checks the module against a real Magento install. Re-runs per Magento + PHP version because resolvable symbols differ between releases.

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | 312 | 312 | – | – |
| 2.4.8 | – | 310 | 310 | – |
| 2.4.9 | – | – | 289 | 291 |


### Tests

Unit and integration suites run per Magento + PHP cell. Test failures speak to the module's behaviour, not its compatibility with a line, so they're reported here separately.

#### Unit Tests

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | N/A | N/A | – | – |
| 2.4.8 | – | N/A | N/A | – |
| 2.4.9 | – | – | N/A | N/A |

#### Integration Tests

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | 6 | 6 | – | – |
| 2.4.8 | – | 2 | 2 | – |
| 2.4.9 | – | – | Error | Error |


### Security

Dependency-advisory audit (composer audit) plus a source malware scan. A malware detection fails the version outright.

| Tool | Status | Findings | Summary |
|---|---|---|---|
| Composer audit | Pass | 0 |  |
| Malware scan | Pass | 0 |  |

## Licence and pricing

Free. A licence is still minted on checkout and bound to your project for Composer access — no payment step.

Refundable within 14 days of first purchase via https://packagento.com/account/refunds/.

## Install via Claude Code or any MCP client

The Packagento MCP server can run the licence + project + Composer steps above in one tool call:

```
purchase_and_install_packages(
  composer_names=["dotdigital/dotdigital-magento2-extension"],
  project_id="proj_xxx"
)
```

This handles cart, checkout, licence minting, project activation, and writes auth.json credentials. Connect a client with `claude mcp add packagento https://mcp.packagento.com`. Full setup at https://packagento.com/docs/mcp-setup.

## Vendor

dotdigital is a Magento 2 vendor on Packagento. See https://packagento.com/dotdigital.md for their full catalogue.

