smaily / smailyformagento
smaily/smailyformagento
Smaily extension for Magento 2
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
- Download ZIP-file from Magento Marketplace or repository's releases section;
- Extract downloaded ZIP-file to your Magento's
app/code/Smaily/SmailyForMagentodirectory.
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
- Go to
Stores→Configuration→Smaily email marketing and automation→ and clickModule Configuration; - Open
General Settingssection; - Insert your Smaily API credentials and press
Save Configto get started; - Under
Newsletter subscription formsection select if you like to send newsletters subscribers to Smaily on sign-up; - Under
Subscribers synchronizationsection you can enable automatic newsletter subscribers syncronization, configure synchronized fields, synchronization frequency and last synchronization datetime; - Under
Abandoned Cartsection you can enable automatic reminder emails for abandoned carts, configure abandoned cart automation, fields and delay time; - 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_priceandproduct_base_pricenow 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_nameandlast_namefor abandoned cart export - Changes
product_qtyfield toproduct_quantityto 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
| 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.
| 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 |
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.