From 72cbd5ad0f805c9ebdec1552adfbeb5976401d49 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Thu, 14 Aug 2025 12:54:42 +0300 Subject: [PATCH 1/2] Forms: allow reply via email in plain text --- .../src/contact-form/class-contact-form.php | 56 ++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/projects/packages/forms/src/contact-form/class-contact-form.php b/projects/packages/forms/src/contact-form/class-contact-form.php index fcde720f6ecac..c2584ba53e5e4 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form.php +++ b/projects/packages/forms/src/contact-form/class-contact-form.php @@ -1112,10 +1112,11 @@ private static function get_raw_compiled_form_data( $feedback_id, $form = null ) * * @param int $feedback_id - the feedback ID. * @param Contact_Form $form - the form. + * @param bool $urlencoded - should the response be in urlencoded plain text, or HTML. * * @return array $lines */ - public static function get_compiled_form_for_email( $feedback_id, $form ) { + public static function get_compiled_form_for_email( $feedback_id, $form, $urlencoded = false ) { $compiled_form = array(); $response = Feedback::get( $feedback_id ); @@ -1136,25 +1137,32 @@ public static function get_compiled_form_for_email( $feedback_id, $form ) { * @param Contact_Form $form a copy of this object */ $updated_compiled_form = apply_filters( 'jetpack_forms_response_email', $compiled_form, $feedback_id, $form ); + if ( $updated_compiled_form !== $compiled_form ) { $compiled_form = $updated_compiled_form; } else { - // add styling to the array + // Add styling to the array foreach ( $compiled_form as $key => $value ) { $safe_display_label = self::escape_and_sanitize_field_label( $value['label'] ); + $safe_display_label = self::maybe_add_colon_to_label( $safe_display_label ); $safe_display_value = self::escape_and_sanitize_field_value( $value['value'] ); + $nl = '%0A'; // URLEncoded newlines if ( ! empty( $safe_display_label ) ) { - $compiled_form[ $key ] = sprintf( - '

%1$s
%2$s

', - self::maybe_add_colon_to_label( $safe_display_label ), - $safe_display_value - ); + $compiled_form[ $key ] = $urlencoded + ? rawurlencode( $safe_display_label ) . $nl . rawurlencode( $safe_display_value ) . $nl . $nl + : sprintf( + '

%1$s
%2$s

', + $safe_display_label, + $safe_display_value + ); } else { - $compiled_form[ $key ] = sprintf( - '

%s

', - $safe_display_value - ); + $compiled_form[ $key ] = $urlencoded + ? rawurlencode( $safe_display_value ) . $nl . $nl + : sprintf( + '

%s

', + $safe_display_value + ); } } } @@ -2104,6 +2112,15 @@ public function process_submission() { __( 'Mark as spam', 'jetpack-forms' ) ); + $message_urlencoded = self::get_compiled_form_for_email( $post_id, $this, true ); + $reply_mailto_url = + 'mailto:' . + rawurlencode( $reply_to_addr ) . + '?subject=' . + rawurlencode( 'Re: ' . $subject ) . + '&body=' . + implode( '', $message_urlencoded ); + $footer = implode( '', /** @@ -2130,7 +2147,7 @@ public function process_submission() { ); $actions = sprintf( - ' + ' + ', esc_url( $dashboard_url ), - __( 'View in dashboard', 'jetpack-forms' ) + __( 'View in dashboard', 'jetpack-forms' ), + esc_url( $reply_mailto_url ), + __( 'Reply via email', 'jetpack-forms' ) ); /** From 36b2bb4beb2791814466bad67c953bb994ff8910 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Thu, 14 Aug 2025 13:01:46 +0300 Subject: [PATCH 2/2] changelogs --- .../forms/changelog/update-forms-plain-text-email-reply | 4 ++++ .../jetpack/changelog/update-forms-plain-text-email-reply | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 projects/packages/forms/changelog/update-forms-plain-text-email-reply create mode 100644 projects/plugins/jetpack/changelog/update-forms-plain-text-email-reply diff --git a/projects/packages/forms/changelog/update-forms-plain-text-email-reply b/projects/packages/forms/changelog/update-forms-plain-text-email-reply new file mode 100644 index 0000000000000..88a52628a7991 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-plain-text-email-reply @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Forms: allow reply via email in plain text diff --git a/projects/plugins/jetpack/changelog/update-forms-plain-text-email-reply b/projects/plugins/jetpack/changelog/update-forms-plain-text-email-reply new file mode 100644 index 0000000000000..8e104cd55f4bd --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-forms-plain-text-email-reply @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Forms: allow reply via email in plain text