elementor / elementor/elementor
Email: Empty Reply-To value handling depends on sending method and breaches RFC 5322 specifications
- Dominant language
- PHP
- Stars
- 7.1k
- Forks
- 1.6k
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 193
Description
### Description
When building a form with e-mail option enabled in elementor pro, if you let the "Reply-to (french: Répondre à)" field selected with the current form "From (french: E-mail de l’expéditeur)" value the output of the Reply-to header is set to an empty string
$headers .= sprintf( 'Reply-To: %s' . "\r\n", $email_reply_to );
This may not be compliant with RFC 5322 and breaks some plugins depending on brevo APIs (outputing a 400 if reply-to is empty (not a valid address-list).
I suggest not including this header if the value is empty or defaulting to the "From" value.
(The Brevo plugin development teams won't fix this issue on their end because they do not consider this header to be valid)
### Steps to reproduce
1. Create a form
2. Setup email action without using a custom field as Reply-to value
3. Debug email.php run method and see that reply-to header contains an empty string
### Expected behavior
1. Create a form
2. Setup email action without using a custom field as Reply-to value
3. Debug email.php run method and see that reply-to header is missing or default to from value
### Elementor System Info
```txt
== Server Environment ==
Operating System: Linux
Software: Apache
MySQL version: Percona Server (GPL), Release '8', Revision '1c288264' v8.4.8-8
PHP Version: 8.3.23
PHP Memory Limit: 512M
PHP Max Input Vars: 16000
PHP Max Post Size: 130M
GD Installed: Yes
ZIP Installed: Yes
Write Permissions: All right
Elementor Library: Connected
== WordPress Environment ==
Version: 7.0
Site URL:
Home URL:
WP Multisite: No
Max Upload Size: 128 Mo
Memory limit: 40M
Max Memory limit: 512M
Permalink Structure: /blog/%postname%/
Language: fr_FR
Timezone: 2
Admin Email: it@[REDACTED].fr
Debug Mode: Active
== Theme ==
Name: Elementra child theme
Version: 1.0
Author:
Child Theme: Yes
Parent Theme Name: Elementra
Parent Theme Version: 2.0.1
Parent Theme Author: ThemeREX
== User ==
Role: administrator
WP Profile lang: fr-FR
User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0
== Active Plugins ==
3D viewer by Visody
Version: 2.5.1
Author: Visody
AdRotate Banner Manager
Version: 5.18
Author: Arnan de Gans
ALTCHA for Elementor
Version: 1.0.11
Author: Qt1Rbt
Brevo - Email, SMS, Web Push, Chat, and more.
Version: 3.3.5
Author: Brevo
Code Snippets
Version: 3.9.6
Author: Code Snippets Pro
Elementor
Version: 4.1.4
Author: Elementor.com
Elementor Pro
Version: 4.1.2
Author: Elementor.com
EWWW Image Optimizer
Version: 8.7.2
Author: Exactly WWW
FileBird Pro
Version: 6.5.5
Author: Ninja Team
JetBlocks For Elementor
Version: 1.5.0
Author: Crocoblock
JetElements For Elementor
Version: 2.9.0.1
Author: Crocoblock
JetEngine
Version: 3.8.11
Author: Crocoblock
JetEngine - Trim string callback
Version: 1.0.3
Author: Crocoblock
JetPlugins Dynamic Data Addon
Version: 1.3.0
Author: Crocoblock
JetSearch
Version: 3.6.1.2
Author: Crocoblock
JetSmartFilters
Version: 3.8.3.1
Author: Crocoblock
JetTabs For Elementor
Version: 2.3.1
Author: Crocoblock
Linguise
Version: 2.2.55
Author: Linguise
Perfmatters
Version: 2.5.4
Author: forgemedia
Reading Time WP
Version: 2.0.17
Author: Jason Yingling
SEOPress
Version: 10.0.1
Author: The SEO Guys at SEOPress
SEOPress PRO
Version: 10.0.1
Author: The SEO Guys at SEOPress
ThemeREX Addons
Version: 2.41.0
Author: ThemeREX
ThemeREX Updater
Version: 2.2.2
Author: ThemeREX
UpdraftPlus - Backup/Restore
Version: 1.26.5
Author: TeamUpdraft, DavidAnderson
WP-Optimize - Clean, Compress, Cache
Version: 4.5.5
Author: TeamUpdraft, DavidAnderson
WP FullCalendar
Version: 1.6
Author: Pixelite
== Must-Use Plugins ==
Elementor Safe Mode
Version: 1.0.0
Author: Elementor.com
== Fonctionnalités ==
Custom Fonts: 2
Custom Icons: 0
== Intégrations ==
== Expériences d’Elementor ==
Polices d’icônes « inline »: Actif par défaut
Points d’arrêt personnalisés supplémentaires: Actif par défaut
Conteneur: Actif
Balisage optimisé: Actif par défaut
Panel Promotions: Actif par défaut
Par défaut vers le Nouveau constructeur de thème: Actif par défaut
Elementor MCP WP Abilities API: Inactif par défaut
Popup d’essai gratuit pro: Actif par défaut
Éléments imbriqués: Actif
Panneau des pages: Inactif par défaut
Atomic Widgets: Actif
Popover des indications V4: Inactif par défaut
Appliquer les capacités des widgets atomiques: Actif par défaut
Éditeur MCP pour widgets atomiques: Actif par défaut
Migrations rétrocompatibles: Actif par défaut
CSS Grid: Inactif par défaut
Editor design system panel: Actif par défaut
Classes globales: Actif
Appliquer les capacités des classes globales: Actif par défaut
Variables: Actif
Gestionnaire de variables: Actif par défaut
Editeur v4 (Page d’opt-in): Actif par défaut
Éditeur V4: Actif
Composants: Actif
Interactions: Actif par défaut
Création de widget: Actif par défaut
Generate website markdown: Inactif par défaut
Importer/exporter la personnalisation: Actif par défaut
Site Builder: Inactif par défaut
Évènements de l’éditeur Elementor: Actif par défaut
Atomic Form: Actif par défaut
Collection Loop: Inactif par défaut
Menu: Actif par défaut
Variables de taille: Actif par défaut
Pro Interactions: Actif par défaut
Commentaires dans l’éditeur: Inactif par défaut
== Journal ==
Log: showing 17 of 172026-06-09 07:31:10 [info] Elementor Pro/Upgrades - _on_each_version Finished
2026-06-09 07:31:10 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor Pro',
'from' => '4.1.0',
'to' => '4.1.1',
)]
2026-06-12 15:28:44 [info] Elementor data updater process has been queued. [array (
'plugin' => 'Elementor',
'from' => '4.1.1',
'to' => '4.1.3',
)]
2026-06-12 15:28:46 [info] elementor::elementor_updater Started
2026-06-12 15:28:46 [info] Elementor/Upgrades - _on_each_version Start
2026-06-12 15:28:46 [info] Elementor/Upgrades - _on_each_version Finished
2026-06-12 15:28:46 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor',
'from' => '4.1.1',
'to' => '4.1.3',
)]
2026-06-24 06:41:27 [info] Elementor data updater process has been queued. [array (
'plugin' => 'Elementor Pro',
'from' => '4.1.1',
'to' => '4.1.2',
)]
2026-06-24 09:32:52 [info] elementor-pro::elementor_pro_updater Started
2026-06-24 09:32:52 [info] Elementor Pro/Upgrades - _on_each_version Start
2026-06-24 09:32:52 [info] Elementor Pro/Upgrades - _on_each_version Finished
2026-06-24 09:32:52 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor Pro',
'from' => '4.1.1',
'to' => '4.1.2',
)]
2026-06-25 15:46:01 [info] Elementor data updater process has been queued. [array (
'plugin' => 'Elementor',
'from' => '4.1.3',
'to' => '4.1.4',
)]
2026-06-25 15:46:52 [info] elementor::elementor_updater Started
2026-06-25 15:46:52 [info] Elementor/Upgrades - _on_each_version Start
2026-06-25 15:46:52 [info] Elementor/Upgrades - _on_each_version Finished
2026-06-25 15:46:52 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor',
'from' => '4.1.3',
'to' => '4.1.4',
)]
JS: showing 20 of 20JS: 2026-06-15 08:56:37 [error X 6][https://[REDACTED]/wp-content/plugins/elementor-pro/assets/js/editor.min.js?ver=4.1.1:2:68950] Cannot convert undefined or null to object
JS: 2026-06-15 11:58:20 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/js/import-export-customization-admin.min.js?ver=4.1.3:2:35216] elementorAdmin is not defined
JS: 2026-06-15 12:18:12 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/js/common.min.js?ver=4.1.3:2:500664] can't access property "success", C is undefined
JS: 2026-06-15 15:39:44 [error X 8][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.3:2:981811] Failed to execute 'querySelector' on 'Document': '#' is not a valid selector.
JS: 2026-06-15 15:40:35 [error X 2][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.3:2:1151625] Cannot read properties of undefined (reading 'models')
JS: 2026-06-16 13:55:42 [error X 2][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.3:2:1070300] Cannot read properties of undefined (reading 'toLowerCase')
JS: 2026-06-16 14:12:15 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view19204") has already been destroyed and cannot be used.
JS: 2026-06-17 09:36:14 [error X 8][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.3:2:1070803] Cannot read properties of undefined (reading 'localized')
JS: 2026-06-17 09:36:14 [error X 2][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.3:2:248754] this.ui.input.val is not a function
JS: 2026-06-25 07:57:03 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view18827") has already been destroyed and cannot be used.
JS: 2026-06-25 12:58:12 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view249") has already been destroyed and cannot be used.
JS: 2026-06-25 13:56:51 [error X 66][https://[REDACTED]/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=4.1.2:2:22011] this.$element.sticky is not a function
JS: 2026-06-25 14:51:11 [error X 6][https://[REDACTED]/wp-content/plugins/elementor/assets/js/admin.min.js?ver=4.1.4:2:42329] r.startsWith is not a function
JS: 2026-06-25 17:02:31 [error X 36][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.4:2:930509] Element type already registered
JS: 2026-06-26 08:27:08 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view5399") has already been destroyed and cannot be used.
JS: 2026-06-26 09:29:26 [error X 10][https://[REDACTED]/wp-content/plugins/elementor-pro/assets/js/nav-menu.3afa8f5eb1fef7c22561.bundle.min.js:2:4391] Cannot read properties of null (reading 'reset')
JS: 2026-06-29 08:02:07 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view7930") has already been destroyed and cannot be used.
JS: 2026-06-29 08:02:07 [error X 2][https://[REDACTED]/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.1.4:2:1294448] Cannot read properties of null (reading 'id')
JS: 2026-06-29 13:00:01 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view12517") has already been destroyed and cannot be used.
JS: 2026-06-29 13:14:09 [error X 1][https://[REDACTED]/wp-content/plugins/elementor/assets/lib/backbone/backbone.marionette.min.js?ver=2.4.5.e1:24:19952] View (cid: "view35232") has already been destroyed and cannot be used.
PHP: showing 5 of 5PHP: 2026-06-16 14:55:03 [warning X 1][[REDACTED]/wp-content/plugins/elementor/modules/wp-rest/classes/post-query.php::221] Undefined array key "included_types" [array (
'trace' => '
#0: [REDACTED]/wp-content/plugins/elementor/modules/wp-rest/classes/post-query.php(221): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: [REDACTED]/wp-content/plugins/elementor/modules/wp-rest/classes/post-query.php(63): Elementor\Modules\WpRest\Classes\Post_Query -> get_post_types_from_params()
#2: [REDACTED]/wp-content/plugins/elementor/modules/wp-rest/base/query.php(49): Elementor\Modules\WpRest\Classes\Post_Query -> get()
#3: [REDACTED]/wp-content/plugins/elementor/modules/wp-rest/base/query.php(115): Elementor\Modules\WpRest\Base\Query -> Elementor\Modules\WpRest\Base\{closure}()
#4: [REDACTED]/wp-content/plugins/elementor/modules/wp-rest/base/query.php(49): Elementor\Modules\WpRest\Base\Query -> send()
',
)]
PHP: 2026-06-16 15:10:36 [warning X 1][[REDACTED]/wp-content/plugins/elementor/modules/history/revisions-manager.php::363] Undefined array key "editor_post_id" [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-06-25 14:35:46 [notice X 423][[REDACTED]/wp-content/plugins/elementor-pro/modules/screenshots/module.php::33] Function utf8_decode() is deprecated [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-06-26 11:16:25 [warning X 3][[REDACTED]/wp-content/plugins/elementor/modules/interactions/interactions-frontend-handler.php::61] foreach() argument must be of type array|object, null given [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-06-26 16:21:17 [warning X 1][[REDACTED]/wp-content/plugins/elementor-pro/modules/posts/skins/skin-content-base.php::271] Attempt to read property "ID" on null [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
== Elementor - Compatibility Tag ==
ALTCHA for Elementor: Compatibilité non spécifiée
Elementor Pro: Compatible
JetBlocks For Elementor: Non compatible
JetElements For Elementor: Non compatible
JetTabs For Elementor: Non compatible
== Elementor Pro - Compatibility Tag ==
JetBlocks For Elementor: Non compatible
JetElements For Elementor: Non compatible
JetTabs For Elementor: Non compatible
```
### Agreement
- [x] I confirm I have read and followed all the guidelines and instructions outlined in the Elementor Bug Report form.
- [x] I agree that my issue may be closed without further action if it doesn't meet all the requirements outlined in the Elementor Bug Report form.
Contributor guide
Research direction
Start in the email.php run method mentioned in the reproduction steps and trace how the Reply-To value is assembled for a form without a custom Reply-To field. Reproduce the empty header, then verify that the resulting message omits Reply-To or uses the From value instead, without breaking the email action.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100