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);