Magento 2 extension
RateEmail_Core is a thin client: an HTTP client, a dedicated cache type, config, a service contract, and three hooks. No Hyva markup and no B2B code lives in core; those ship as side modules that depend only on core's service contracts.
Install
{
"require": "composer require rate-email/module-magento2-core"
}Then run setup upgrade as usual:
{
"upgrade": "bin/magento setup:upgrade"
}Configuration
System Configuration > Services > rate.email. The cache TTL default is21,600 seconds (6 hours), deliberately longer than a typical catalogue cache, because disposable and spam signals change less often than shop data. Reject results get their own TTL, independently overridable.
Magento extension configuration fields and defaults
| Field | Type | Default |
|---|---|---|
| Enabled | Checkbox | Disabled |
| API key | Encrypted, obscure field | Empty |
| Base URL | Text | https://api.rate.email |
| Timeout (ms) | Text | 1500 |
| Cache TTL (seconds) | Text | 21600 (6 hours) |
| Cache TTL for reject results (seconds) | Text | Same as cache TTL, overridable |
| Fail mode | Select: open, closed | open |
| Verdict action (registration, newsletter, checkout) | Select: block, flag, ignore, per hook | See behaviour table |
| Deliverability slow path | Checkbox | Enabled |
| Shopper-visible reason codes | Multiselect | TYPO_SUSPECTED, DISPOSABLE_DOMAIN |
| Admin log level | Select | info |
Verdict × hook behaviour
Default action per hook and verdict, all configurable
| Hook | Accept | Review | Reject |
|---|---|---|---|
| Registration | Pass | Pass; writes rate_email_verdict customer attribute | Block, shopper-safe message |
| Newsletter | Pass | Pass; writes rate_email_verdict | Block, shopper-safe message |
| Checkout | Pass | Pass; writes rate_email_verdict and order comment | Block, shopper-safe message |
Shopper-safe messages
The full reason list is never shown to a shopper. The message resolves by the highest-severity reason code present:
TYPO_SUSPECTED: shows the suggestion, "Did you mean name@gmail.com?"DISPOSABLE_DOMAIN: "Temporary email addresses are not accepted."- Everything else: a generic "We couldn't verify this email address," so codes like
SPAM_TRAP,ABUSE_REPORTEDorCUSTOM_BLOCKLISTnever leak detection logic to a visitor.
Admins see the full reason list in the customer grid column and the order view, not the collapsed message.
CLI
bin/magento rate-email:rate <email>
Calls the API, bypassing cache read but not cache write, and prints verdict, score, every reason and the syntax suggestion as a table.
bin/magento rate-email:cache:flush
Flushes the rate_email cache type. Same as bin/magento cache:flush rate_email.
Side-module roadmap
Planned, not built yet. Each depends only on core's service contracts.
RateEmail_Hyva
Hyva checkout and registration templates.
RateEmail_B2B
Company user invitations on Commerce B2B, with review always flagged rather than following the storefront default.
RateEmail_StockNotification
Back-in-stock subscription email checks.