smaily / smailyformagento

smaily/smailyformagento

Smaily extension for Magento 2

magento2-module 2.4.6-2.4.9 Compatible Based on composer requirements only QA: failed GPL-3.0-only

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.

Documentation & Support

Online documentation and code samples are available via our Help Center.

Contribute

All development for Smaily for Magento is handled via GitHub. 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 or repository's 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 StoresConfigurationSmaily 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]

2.7.5

  • fix: Items placement in RSS feed structure [#114]

2.7.4

  • Fixes an issue where abandoned cart synchronization can fail when unknown payload field is encountered.[#111]

2.7.3

  • Fixes non-existing array key warning on subscribers synchronization [#108] (thanks @raulikesvatera)

2.7.2

  • PHP 8.2 compatibility [#103]

2.7.1

  • Skip abandoned carts receiving "Invalid data submitted" (code: 203) response - [#99]

2.7.0

  • Add store, store group and website to abandoned cart payload - [#96]

2.6.0

  • Compare subscriber status change timestamp on newsletter subscriber sync [#91]
  • Fix newsletter subscribers sync unsubscribed status value [#92]

2.5.0

  • Add product image URL to abandoned cart data payload [#88]

2.4.0

  • Include more context in CRON job logs [#82]
  • Fix CRON job logging duplicate lines [#83]
  • Optimize abandoned cart CRON job by excluding sent carts [#84]

2.3.1

  • Test for Magento 2.4.4 compatibility - [#78]
  • Convert module schema and data setup to declarative schema - [#77]

2.3.0

  • Newsletter Subscribers synchronization tracking per website - [#73]
  • Make last synchronization datetime configurable in module settings - [#73]

2.2.0

  • Include store group and website in opt-in form and synchronized data [#67]
  • Add automation workflow selection to Newsletter Subscriber settings [#68]

2.1.0

  • Magento 2.4 compatibility [#63]

2.0.0

This is a complete rework of the module. The aim was to make the module configurable by website, i.e. abandoned cart, newsletter subscribers synchronization, opt-in form and Smaily API could be configured for each website. Only reasonable solution was to rebuild the module from ground up, because most (if not all) of the functionality was "Default configuration"-centric.

  • Improves efficiency of Newsletter Subscribers and Abandoned Cart CRON jobs [#36]
  • Reduces bloatiness of data Helper [#37]
  • Fixes double CAPTCHA input fields [#46]

1.2.0

  • Align synchronization customer first and last name with abandoned cart [#52]

1.1.0

  • Add new fields first_name and last_name for abandoned cart export
  • Changes product_qty field to product_quantity to unify template variables across integrations

1.0.2

  • Fix RSS-feed not rendering with special characters

1.0.1

  • Fix PHP 5.6 compilation issues

1.0.0

  • Make using CAPTCHA optional for better integration with pop-up forms

0.9.3

  • Add Magento CAPTCHA and Google reCAPTCHA option for newsletter sign-up form

0.9.2

  • Fix compilation issues

0.9.1

  • Subdomain is now parsed from full URL
  • Newsletter signup form uses opt-in autoresponder workflow
  • Updated cron frequency values
  • Updated abandoned cart timing values
  • Customer synchronization is now more efficient as it uses data batching
  • Customer unsubscribed status is also updated in store's database
  • Uninstall cleans up created tables and columns
  • Removed custom newsletter and email template blocks
  • Removed subscriber observer as synchronization provides same functionality
  • Fixed broken links in settings from

0.9.0

  • This is the first public release
Versions
Version Stability QA Status Released
2.8.1 stable Fail 2026-04-29 09:04:42
2.8.0 stable Not tested 2025-04-11 09:04:15
2.7.7 stable Not tested 2025-04-03 08:46:22
2.7.6 stable Not tested 2025-03-20 15:19:26
2.7.5 stable Not tested 2025-03-17 13:48:23
2.7.4 stable Not tested 2024-10-16 10:19:27
2.7.3 stable Not tested 2024-05-06 15:47:55
2.7.2 stable Not tested 2023-12-11 09:36:24
2.7.1 stable Not tested 2023-11-03 13:29:09
2.7.0 stable Not tested 2023-01-06 09:27:58
2.6.0 stable Not tested 2022-12-12 08:42:43
2.5.0 stable Not tested 2022-12-08 12:56:54
2.4.0 stable Not tested 2022-11-10 10:59:42
2.3.1 stable Not tested 2022-06-20 13:46:08
2.3.0 stable Not tested 2022-03-18 14:56:10
2.2.0 stable Not tested 2021-10-07 11:42:53
2.1.0 stable Not tested 2021-08-06 12:27:38
2.0.0 stable Not tested 2021-07-02 07:28:33
1.2.0 stable Not tested 2021-03-06 12:15:26
1.0.2 stable Not tested 2019-11-19 10:32:27
1.0.1 stable Not tested 2019-11-07 13:31:08
1.0.0 stable Not tested 2019-11-07 11:47:21
0.9.3 stable Not tested 2019-10-14 06:35:14
0.9.2 stable Not tested 2019-10-11 10:09:17
0.9.1 stable Not tested 2019-09-12 08:44:48
0.9.0 stable Not tested 2019-01-21 11:21:53

No dependencies declared

This package's composer.json doesn't declare any required, suggested, replaced, or conflicting packages.

QA results
Tool Status Findings Summary
PHPCS Pass 0
PHPStan Fail 34 34 errors (level 4, ruleset: phpstan + bitexpert/phpstan-magento)
Cpd Pass 0
Security Pass 0
License
GPL-3.0-only
Authors
Make it pay

Turn an existing module into recurring revenue.

If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.