From 185ea7d6ac5c9871a7e3b1b32a403de2c15b17a5 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Sat, 22 Nov 2025 17:40:44 -0500 Subject: [PATCH] Fix 'Email from at' On tickets that come from emails, was cuasing dup html head body tags causing htmlPurifier to strip it in ticket viewing, so we removed html body and head tags also remove orginal reply on reply ticket emails this removed ##- Please type your reply above this line -## and anything after it. Also removed the custom CSS that was embedded for all email sent out from ITFlow --- cron/mail_queue.php | 5 +--- cron/ticket_email_parser.php | 44 +++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/cron/mail_queue.php b/cron/mail_queue.php index 5bc285df..ebedb830 100644 --- a/cron/mail_queue.php +++ b/cron/mail_queue.php @@ -186,10 +186,7 @@ function sendQueueEmail( $mail->addAddress($to_email, $to_name); $mail->isHTML(true); $mail->Subject = $subject; - $mail->Body = "
{$html_body}
"; + $mail->Body = $html_body; if (!empty($ics_str)) { $mail->addStringAttachment($ics_str, 'Scheduled_ticket.ics', 'base64', 'text/calendar'); diff --git a/cron/ticket_email_parser.php b/cron/ticket_email_parser.php index fc159493..cc2724a9 100644 --- a/cron/ticket_email_parser.php +++ b/cron/ticket_email_parser.php @@ -83,8 +83,16 @@ function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date // Clean up the message $message = trim($message); + // Remove DOCTYPE and meta tags + $message = preg_replace('/]*>/i', '', $message); + $message = preg_replace('/]*>/i', '', $message); + // Remove , , and their closing tags + $message = preg_replace('/<\/?(html|head|body)[^>]*>/i', '', $message); + // Collapse excess whitespace $message = preg_replace('/\s+/', ' ', $message); + // Convert newlines to
$message = nl2br($message); + // Wrap final formatted message $message = "Email from: $contact_name <$contact_email> at $date:-

$message
"; $ticket_prefix_esc = mysqli_real_escape_string($mysqli, $config_ticket_prefix); @@ -181,13 +189,37 @@ function addReply($from_email, $date, $subject, $ticket_number, $message, $attac global $mysqli, $config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $allowed_extensions; $ticket_reply_type = 'Client'; - $message_parts = explode("##- Please type your reply above this line -##", $message); - $message_body = $message_parts[0]; - $message_body = trim($message_body); - $message_body = preg_replace('/\r\n|\r|\n/', ' ', $message_body); - $message_body = nl2br($message_body); + // $message contains the raw HTML body from IMAP - $message = "Email from: $from_email at $date:-

$message_body
"; + // 1) Remove the reply separator and everything below it (HTML-aware) + // This matches: ##- Please type your reply above this line -## and EVERYTHING after it + $message = preg_replace( + '/]*>##-\s*Please\s+type\s+your\s+reply\s+above\s+this\s+line\s*-##<\/i>.*$/is', + '', + $message + ); + + // 2) Clean up the remaining message + + // Remove DOCTYPE and meta tags + $message = preg_replace('/]*>/i', '', $message); + $message = preg_replace('/]*>/i', '', $message); + + // Remove , , and their closing tags + $message = preg_replace('/<\/?(html|head|body)[^>]*>/i', '', $message); + + // Trim leading/trailing whitespace + $message = trim($message); + + // Normalize line breaks to spaces + $message = preg_replace('/\r\n|\r|\n/', ' ', $message); + + // Convert to
for HTML display + $message = nl2br($message); + + // 3) Final wrapper + $message = "Email from: $from_email at $date:-

+
$message
"; $ticket_number_esc = intval($ticket_number); $message_esc = mysqli_real_escape_string($mysqli, $message);