From c0a43eead1f950df69de06a43b091d40356b6a69 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 6c6c187e..ad97a085 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 1081a41f..e2d0f2c2 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);