etechflow / module-order-email-editor
etechflow/module-order-email-editor
Edit the customer email on a placed order, optionally sync to the linked customer account, keep an audit trail of every change. Admin-only, Hyvä-safe. Magento Open Source + Adobe Commerce compatible.
ETechFlow_OrderEmailEditor
Edit the customer email address on a placed Magento order. Fix typos, handle customer-service requests, keep a complete audit trail of every change. Admin-only. Hyvä-safe by design.
Commercial eTechFlow module. Per-domain HMAC license or eTechFlow bundle key activates the module on your production host. Dev / staging / *.magento.cloud / localhost etc. auto-detect and bypass licensing.
What it adds
- Edit Email button on every admin order detail page (Order & Account Information panel)
- A modal: current email shown, new email input, "also update the linked customer account" checkbox
- Email Change History grid at Sales → Operations → Order Email Change History — every change with admin user, IP, timestamp
- Atomic DB update of every place Magento stores the email (order, addresses, all 4 grid tables, optional customer record, defensive quote sync)
Features
| Edit misspelled email on a placed order | ✓ |
| Update billing + shipping address rows on the order | ✓ |
| Auto-reindex Magento's order/invoice/shipment/creditmemo grid tables | ✓ |
Optionally update the linked customer_entity.email |
✓ (disabled for guest orders) |
| Defensive quote-table sync if the original quote still exists | ✓ |
| Full audit log with admin user, IP, timestamp | ✓ |
| Standard Magento ACL — granular per-role permissions | ✓ |
| Per-domain HMAC licensing + bundle key support | ✓ |
Tideways span instrumentation (ETechFlow_OEE_UpdateOrderEmail) |
✓ |
Verify CLI (etechflow:oee:verify) |
✓ |
| No frontend dependencies (admin-only module) | ✓ |
Compatibility
| Platform | Status |
|---|---|
| Magento Open Source 2.4.4 – 2.4.8 | ✓ |
| Adobe Commerce 2.4.4 – 2.4.8 | ✓ |
| Hyvä themes (any version) | ✓ (admin-only — Hyvä re-skins the storefront only) |
| PHP 8.1 / 8.2 / 8.3 / 8.4 | ✓ |
| MySQL 8 / MariaDB 10.6+ | ✓ |
Installation
# Option A — Composer
composer require etechflow/module-order-email-editor:^1.0
bin/magento module:enable ETechFlow_OrderEmailEditor
bin/magento setup:upgrade
bin/magento setup:di:compile # production mode only
bin/magento setup:static-content:deploy -f en_GB # production mode only
bin/magento cache:flush
# Option B — Manual drop-in
cp -r ETechFlow/OrderEmailEditor app/code/ETechFlow/OrderEmailEditor
bin/magento module:enable ETechFlow_OrderEmailEditor
bin/magento setup:upgrade
bin/magento setup:di:compile # production mode only
bin/magento cache:flush
The setup:upgrade step creates one new database table: etechflow_email_change_history.
Licensing
Admin → Stores → Configuration → eTechFlow → Order Email Editor → License
| Field | Default | What it does |
|---|---|---|
| Production Environment | Yes | Yes = check the license key against the current domain. No = run at full features without a key (use on dev/staging on non-standard domains). |
| License Key | (empty) | Paste the per-domain key from your purchase email. |
If you bought the eTechFlow bundle, enter the bundle key under any module's License section — it activates all eTechFlow modules at once.
Permissions (ACL)
Three new resources appear under System → Permissions → User Roles → Role Resources:
ETechFlow_OrderEmailEditor::edit_email— required to use the modal & POST to the update endpointETechFlow_OrderEmailEditor::view_history— required to view the history gridETechFlow_OrderEmailEditor::config— required to view the admin config section
By default all three are granted to Administrators. Assign granularly to limited roles as needed.
Usage
- Admin → Sales → Orders → pick any order
- In the Order & Account Information panel you'll see an Edit Email button under the existing email
- Click it. A modal opens with:
- Current email shown for confirmation
- New email input
- "Also update the linked customer account" checkbox (hidden for guest orders)
- Submit. The modal returns a success message, the email on the page updates inline, and a new row is written to
etechflow_email_change_history
Viewing change history
Admin → Sales → Operations → Order Email Change History (or the URL /admin/order_email_editor/history/index)
Standard Magento UI Component grid with filterable columns: increment ID, old email, new email, admin who changed it, customer-record-updated flag, IP, timestamp.
Smoke test
After installing, confirm the module is healthy:
bin/magento etechflow:oee:verify
Should print ✅ ALL CHECKS PASSED. v1.0.0 verified.
What this module touches in the database
When the Change Email button is clicked, the module updates these tables in a single transaction:
| Table | Column | How |
|---|---|---|
sales_order |
customer_email |
via OrderRepository::save() |
sales_order_address |
email (both billing + shipping rows) |
via OrderRepository::save() |
sales_order_grid |
customer_email |
auto (Magento's sales_order_save_after observer reindexes) |
sales_invoice_grid |
customer_email |
auto, same observer |
sales_creditmemo_grid |
customer_email |
auto, same observer |
sales_shipment_grid |
customer_email |
auto, same observer |
customer_entity |
email |
only if checkbox is on AND sales_order.customer_id is set |
quote + quote_address |
customer_email / email |
defensive — only if the original quote row still exists |
etechflow_email_change_history |
new row | inserted with old/new email, admin info, IP |
Uninstall
bin/magento module:disable ETechFlow_OrderEmailEditor
# Optionally drop the history table:
mysql -e "DROP TABLE IF EXISTS etechflow_email_change_history" $DB
# If installed via Composer:
composer remove etechflow/module-order-email-editor
rm -rf app/code/ETechFlow/OrderEmailEditor # if installed manually
bin/magento setup:upgrade
bin/magento cache:flush
License
Proprietary — see LICENSE.txt. Commercial licenses available at https://etechflow.com.
Changelog — ETechFlow Order Email Editor
All notable changes to this module. Adheres to Semantic Versioning.
[1.0.0] — 2026-05-19
Initial commercial release
Edit the customer email on a placed order. Fix typos, handle customer requests, keep an audit trail. Admin-only. Hyvä-safe by design.
Added
- Edit Email button on every order detail page (admin → Sales → Orders → pick order). Opens a modal: current email shown, new email input, optional "also update linked customer account" checkbox (hidden for guest orders).
- Email Change History grid at admin → Sales → Operations → Order Email Change History. Filterable Magento UI Component grid of every change made.
- Atomic DB update of all the places Magento stores the order email:
sales_order.customer_emailsales_order_address.email(both billing + shipping rows)sales_order_grid+sales_invoice_grid+sales_creditmemo_grid+sales_shipment_grid(via Magento's coresales_order_save_afterreindex)customer_entity.email(if checkbox ticked + linked customer exists)quote.customer_email+quote_address.email(defensive, only if quote still exists)
- Audit log in
etechflow_email_change_history— admin id, admin name, old email, new email, customer-record-updated flag, IP, timestamp. - Per-installation HMAC license with bundle-key support — same as every other eTechFlow module. Unlicensed installs silently hide the Edit Email button + history menu and reject the update endpoint with 403.
- Two ACL resources:
edit_email(modal + update endpoint) andview_history(history grid). Granular per-role permissions. - Profiler instrumentation — wraps the update path in an
ETechFlow_OEE_UpdateOrderEmailTideways span. - Verify CLI —
bin/magento etechflow:oee:verifychecks DI resolution + DB table presence. - Hyvä-safe — admin-only module with zero frontend assets. Hyvä themes never touch the admin.
Compatibility
- Magento Open Source 2.4.4 – 2.4.8
- Adobe Commerce 2.4.4 – 2.4.8
- PHP 8.1 / 8.2 / 8.3 / 8.4
- All Hyvä child themes
| Version | Stability | QA Status | Compatibility | Released |
|---|---|---|---|---|
| 1.2.4 | stable | Fail | Magento 2.4.7-2.4.8 Details | 2026-06-22 15:15:05 |
| 1.2.0 | stable | Not tested | Not yet tested Details | 2026-06-06 14:14:49 |
| 1.1.0 | stable | Not tested | Not yet tested Details | 2026-06-04 08:17:39 |
| 1.0.2 | stable | Not tested | Not yet tested Details | 2026-05-22 06:42:22 |
| 1.0.1 | stable | Not tested | Not yet tested Details | 2026-05-21 16:53:19 |
Requires 9
| Package | Constraint |
|---|---|
| magento/framework | ^103.0||^104.0 |
| magento/module-backend | ^102.0||^103.0 |
| magento/module-config | ^101.2||^102.0 |
| magento/module-customer | ^103.0||^104.0 |
| magento/module-quote | ^101.2||^102.0 |
| magento/module-sales | ^103.0||^104.0 |
| magento/module-store | ^101.1||^102.0 |
| magento/module-ui | ^101.2||^102.0 |
| php | ~8.1.0||~8.2.0||~8.3.0||~8.4.0 |
Suggests 1
| Package | Reason |
|---|---|
| etechflow/module-next-day-eligibility | Part of the eTechFlow module bundle — one bundle key activates every eTechFlow module. |
No QA results yet
QA pipelines haven't run for this version. Compatibility and quality results appear here once the vendor publishes a tagged release that gets ingested.
More from etechflow
View vendorDynamic 'View Other Options/Finishes/Sizes' PDP buttons driven by per-product link attributes; replaces hardcoded in-description buttons and strips the old ones at render time.
Theme-agnostic mega menu for Magento 2. Renders on Hyvä, Luma, Adobe Commerce default and custom themes via automatic runtime detection. Provides a JSON endpoint for lazy-loaded subcategory + featured-product data.
EtechFlow Store Locator — admin-managed store/branch finder for Magento 2 with a Leaflet + OpenStreetMap map and postcode proximity search (postcodes.io). Hyva and Luma compatible. No paid map API key required.
Universal Product Fitment Finder for Magento 2 — Make/Model/Year/Part filtering on any fitment domain (automotive, motorcycle, marine, RV, phone cases, watches, appliance parts, anywhere a customer asks "will this fit my X?"). Admin-configurable labels + URL prefix so the same module rebrands to any merchant domain. Includes PDP fitment badge, SEO URLs, customer garage with cross-device sync, OEM/part-number search, and admin tooltips throughout. Theme-agnostic — Hyvä, Luma, custom themes. Renamed from "module-vehicle-compat" in v2.0.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.