elementor / elementor/elementor

Email: Empty Reply-To value handling depends on sending method and breaches RFC 5322 specifications

Open Beginner friendly
#36,381 1 comment 0 reactions 0 assignees View on GitHub
status/awaiting_triage
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.