# smaily/smailyformagento

> Smaily extension for Magento 2

`composer require smaily/smailyformagento`

Canonical URL: https://packagento.com/smaily/smailyformagento

## At a glance

- **Vendor**: smaily (https://packagento.com/smaily.md)
- **Latest version**: 2.8.1 — released 2026-04-29
- **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/smaily/smailyformagento 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 smaily/smailyformagento:*
   bin/magento setup:upgrade
   bin/magento setup:di:compile
   bin/magento cache:flush
   ```

## What it does

Smaily extension for Magento 2

## README

Smaily email marketing and automation extension for Magento.

Automatically synchronize newsletter subscribers to a Smaily subscribers list, generate RSS-feed based on products for easy template import and send new newsletter subscribers directly to Smaily.

### Features

#### Magento Newsletter Subscribers

- Add subscribers to Smaily subscribers list;
- Trigger all opt-in or a specific automation workflow;
- Magento built in subscribe newsletter form sends subscribers directly to Smaily;
- Magento built-in CAPTCHA and Google reCAPTCHA support.

#### Magento Products RSS-feed

- Generate default RSS-feed with 50 latest products for easy import to Smaily template;
- Option to customize generated RSS-feed based on product categories;
- Option to limit generated RSS-feed products amount with preferred value.

#### Two-way synchronization between Smaily and Magento

- Get unsubscribers from Smaily unsubscribed list;
- Collect new user data for subscribed users;
- Generate data log for each update.

#### Abandoned cart notification

- Automatically notify customers about their abandoned cart;
- Send abandoned cart information to Smaily for easy use on templates.

### Requirements

This extension is built for Magento 2.3 and newer.

Check specific PHP, web server, database, etc requirements for your preferred Magento version from [Magento technology stack requirements](https://devdocs.magento.com/guides/v2.0/install-gde/system-requirements-tech.html).

### Documentation & Support

Online documentation and code samples are available via our [Help Center](https://smaily.com/help/user-manual/integrations-et/smaily-for-magento-2/).

### Contribute

All development for Smaily for Magento is [handled via GitHub](https://github.com/sendsmaily/smaily-magento-extension). Opening new issues and submitting pull requests are welcome.

### Installation

Make sure you have Magento 2.3 (or newer) installed.

#### Installing via Composer (recommended)

In Magento's root directory run:

    $ composer require smaily/smailyformagento:version

#### Manual installation

1. Download ZIP-file from [Magento Marketplace](https://marketplace.magento.com) or repository's [releases](https://github.com/sendsmaily/smaily-magento-extension/releases) section;
2. Extract downloaded ZIP-file to your Magento's `app/code/Smaily/SmailyForMagento` directory.

#### After installation

Ensure Smaily for Magento is enabled:

    $ php bin/magento module:status Smaily_SmailyForMagento

> You should see "Module is enabled".

If extension is disabled, you can enable it by running:

    $ php bin/magento module:enable Smaily_SmailyForMagento

Ensure Magento extension updates are applied:

    $ php bin/magento setup:upgrade

### Usage

1. Go to `Stores` → `Configuration` → `Smaily email marketing and automation` → and click `Module Configuration`;
2. Open `General Settings` section;
3. Insert your Smaily API credentials and press `Save Config` to get started;
4. Under `Newsletter subscription form` section select if you like to send newsletters subscribers to Smaily on sign-up;
5. Under `Subscribers synchronization` section you can enable automatic newsletter subscribers syncronization, configure synchronized fields, synchronization frequency and last synchronization datetime;
6. Under `Abandoned Cart` section you can enable automatic reminder emails for abandoned carts, configure abandoned cart automation, fields and delay time;
7. That's it, your Magento store is now integrated with Smaily!

### Frequently Asked Questions

#### Where I can find data-log for CRON?

CRON update data-log is stored in the `var/log/` folder of Magento store. Newsletter subscribers synchronization log is saved in `smly_customer_cron.log` file and Abandoned Cart log is stored in `smly_cart_cron.log`.

#### How can I filter RSS-feed output by category and limit results?

You can access RSS feed by visiting ulr `store_url/smaily/rss/feed` and you can add parameters (category and limit) by appending them to URL separated with slashes. For example `store_url/smaily/rss/feed/category/bikes/limit/10`. Regular RSS-feed shows 50 last products.

#### How can I access additional Abandoned cart parameters in Smaily template editor?

Here is a list of all the parameters available in Smaily email templating engine:

- Customer first name: `{{ first_name }}`;
- Customer last name: `{{ last_name }}`;
- Store view: `{{ store }}`;
- Store group: `{{ store_group }}`;
- Website: `{{ store_website }}`.
- Is abandoned cart: `{{ is_abandoned_cart }}`;

Up to 10 products can be received in Smaily templating engine. You can refrence each product with number 1-10 behind parameter name:

- Product name: `{{ product_name_[1-10] }}`;

- Product description: `{{ product_description_[1-10] }}`;

- Product image URL: `{{ product_image_url_[1-10] }}`;

- Product SKU: `{{ product_sku_[1-10] }}`;

- Product quantity: `{{ product_quantity_[1-10] }}`;

- Product price: `{{ product_price_[1-10] }}`;

Product price is the end price that the customer sees in the cart. If you have a special price set for the product, it will be shown here. This price also includes taxes and discounts.

- Product base price: `{{ product_base_price_[1-10] }}`.

Product base price is the price that is set in the product edit page. This price also includes taxes but no discounts.

Also you can determine if customer had more than 10 items in cart:

- More than 10 items: `{{ over_10_products }}`.

### Troubleshooting

#### Regular export fails to run

Usually a good place to start would be to check Magento CRON's Schedule Ahead for value. We have found that value of 60 works the best, if you are running daily exports.

## Changelog

#### 2.8.1

Fixes an issue with cron scheduling using wrong interval for daily customer synchronization.

#### 2.8.0

> Notice! This version updates the price values in abandoned cart emails and RSS feed items to include taxes. These prices now match what customers see in the storefront. For B2B (business-to-business) stores, where tax-exclusive pricing may be expected, this behavior might not be suitable.

- Abandoned cart `product_price` and `product_base_price` now also include taxes.
- RSS-feed now shows prices including taxes.
- RSS-feed uses parent product URL-s for configurable products that are not visible individually.

#### 2.7.7

- Adds `"is_abandoned_cart" = "true"` field to abandoned cart automation payload
- Does not opt-in unsubscribed customers who have received abandoned cart email

#### 2.7.6

- fix: RSS feed rendering with missing description value [[#118](https://github.com/sendsmaily/smaily-magento-extension/pull/118)]

#### 2.7.5

- fix: Items placement in RSS feed structure [[#114](https://github.com/sendsmaily/smaily-magento-extension/pull/114)]

#### 2.7.4

- Fixes an issue where abandoned cart synchronization can fail when unknown payload field is encountered.[[#111](https://github.com/sendsmaily/smaily-magento-extension/pull/111)]

#### 2.7.3

- Fixes non-existing array key warning on subscribers synchronization [[#108](https://github.com/sendsmaily/smaily-magento-extension/pull/108)] (thanks @raulikesvatera)

#### 2.7.2

- PHP 8.2 compatibility [[#103](https://github.com/sendsmaily/smaily-magento-extension/pull/103)]

#### 2.7.1

- Skip abandoned carts receiving "Invalid data submitted" (code: 203) response - [[#99](https://github.com/sendsmaily/smaily-magento-extension/pull/99)]

#### 2.7.0

- Add store, store group and website to abandoned cart payload - [[#96](https://github.com/sendsmaily/smaily-magento-extension/pull/96)]

#### 2.6.0

- Compare subscriber status change timestamp on newsletter subscriber sync [[#91](https://github.com/sendsmaily/smaily-magento-extension/pull/91)]
- Fix newsletter subscribers sync unsubscribed status value [[#92](https://github.com/sendsmaily/smaily-magento-extension/pull/92)]

#### 2.5.0

- Add product image URL to abandoned cart data payload [[#88](https://github.com/sendsmaily/smaily-magento-extension/pull/88)]

#### 2.4.0

- Include more context in CRON job logs [[#82](https://github.com/sendsmaily/smaily-magento-extension/pull/82)]
- Fix CRON job logging duplicate lines [[#83](https://github.com/sendsmaily/smaily-magento-extension/pull/83)]
- Optimize abandoned cart CRON job by excluding sent carts [[#84](https://github.com/sendsmaily/smaily-magento-extension/pull/84)]

#### 2.3.1

- Test for Magento 2.4.4 compatibility - [[#78](https://github.com/sendsmaily/smaily-magento-extension/pull/78)]
- Convert module schema and data setup to declarative schema - [[#77](https://github.com/sendsmaily/smaily-magento-extension/pull/77)]

#### 2.3.0

- Newsletter Subscribers synchronization tracking per website - [[#73](https://github.com/sendsmaily/smaily-magento-extension/pull/73)]
- Make last synchronization datetime configurable in module settings - [[#73](https://github.com/sendsmaily/smaily-magento-extension/pull/73)]

#### 2.2.0

- Include store group and website in opt-in form and synchronized data [[#67](https://github.com/sendsmaily/smaily-magento-extension/pull/67)]
- Add automation workflow selection to Newsletter Subscriber settings [[#68](https://github.com/sendsmaily/smaily-magento-extension/pull/68)]

#### 2.1.0

- Magento 2.4 compatibility [[#63](https://github.com/sendsmaily/smaily-magento-extension/pull/63)]

#### 2.0.0

_(Changelog truncated for .md surface. Full history on https://packagento.com/smaily/smailyformagento.)_

## Recent Versions

| Version | Released |
|---|---|
| 2.8.1 | 2026-04-29 |
| 2.8.0 | 2025-04-11 |
| 2.7.7 | 2025-04-03 |
| 2.7.6 | 2025-03-20 |
| 2.7.5 | 2025-03-17 |
| 2.7.4 | 2024-10-16 |
| 2.7.3 | 2024-05-06 |
| 2.7.2 | 2023-12-11 |
| 2.7.1 | 2023-11-03 |
| 2.7.0 | 2023-01-06 |

Showing 10 of 26 versions. Full release history on https://packagento.com/smaily/smailyformagento.

## Quality

Latest release (2.8.1) 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 | – | – | Pass | Pass |


### 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 | Warning | 130 | 130 warnings (ruleset: Magento2) — 3 auto-fixable with phpcbf |
| PHPMD | Warning | 31 | 31 rule violations (MissingImport:24, CyclomaticComplexity:2, NPathComplexity:2, ExcessiveMethodLength:2, ExcessiveParameterList:1) |
| 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 | 34 | 34 | – | – |
| 2.4.8 | – | 34 | 34 | – |
| 2.4.9 | – | – | 34 | 34 |


### 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 | N/A | N/A | – | – |
| 2.4.8 | – | N/A | N/A | – |
| 2.4.9 | – | – | N/A | N/A |


### 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=["smaily/smailyformagento"],
  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

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

