mirror of https://github.com/itflow-org/itflow
Merge pull request #973 from wrongecho/ticket-parse-save-original-mail
Email to ticket parsing - Save the original email
This commit is contained in:
commit
ff1ec30775
|
|
@ -106,7 +106,7 @@ require_once "plugins/php-mime-mail-parser/src/Parser.php";
|
|||
$allowed_extensions = array('jpg', 'jpeg', 'gif', 'png', 'webp', 'pdf', 'txt', 'md', 'doc', 'docx', 'csv', 'xls', 'xlsx', 'xlsm', 'zip', 'tar', 'gz');
|
||||
|
||||
// Function to raise a new ticket for a given contact and email them confirmation (if configured)
|
||||
function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments) {
|
||||
function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments, $original_message_file) {
|
||||
|
||||
// Access global variables
|
||||
global $mysqli,$config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_client_general_notifications, $config_ticket_new_ticket_notification_email, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_smtp_host, $config_smtp_port, $config_smtp_encryption, $config_smtp_username, $config_smtp_password, $allowed_extensions;
|
||||
|
|
@ -128,8 +128,19 @@ function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date
|
|||
echo "Created new ticket.<br>";
|
||||
mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Create', log_description = 'Email parser: Client contact $contact_email created ticket $config_ticket_prefix$ticket_number ($subject) ($id)', log_client_id = $client_id");
|
||||
|
||||
// Process attachments (after ticket is logged as created)
|
||||
mkdirMissing('uploads/tickets/');
|
||||
// -- Process attachments (after ticket is logged as created because we save to the folder named after the ticket ID) --
|
||||
|
||||
mkdirMissing('uploads/tickets/'); // Create tickets dir
|
||||
|
||||
// Setup directory for this ticket ID
|
||||
$att_dir = "uploads/tickets/" . $id . "/";
|
||||
mkdirMissing($att_dir);
|
||||
|
||||
// Save original email message as ticket attachment
|
||||
rename("uploads/tmp/{$original_message_file}", "{$att_dir}/{$original_message_file}");
|
||||
mysqli_query($mysqli, "INSERT INTO ticket_attachments SET ticket_attachment_name = 'Original-parsed-email.eml', ticket_attachment_reference_name = '$original_message_file', ticket_attachment_ticket_id = $id");
|
||||
|
||||
// Process each attachment
|
||||
foreach ($attachments as $attachment) {
|
||||
|
||||
// Get name and extension
|
||||
|
|
@ -140,10 +151,6 @@ function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date
|
|||
// Check the extension is allowed
|
||||
if (in_array($att_extension, $allowed_extensions)) {
|
||||
|
||||
// Setup directory for this ticket ID
|
||||
$att_dir = "uploads/tickets/" . $id . "/";
|
||||
mkdirMissing($att_dir);
|
||||
|
||||
// Save attachment with a random name
|
||||
$att_saved_path = $attachment->save($att_dir, Parser::ATTACHMENT_RANDOM_FILENAME);
|
||||
|
||||
|
|
@ -411,6 +418,11 @@ if ($emails) {
|
|||
// Default false
|
||||
$email_processed = false;
|
||||
|
||||
// Save the original email (to be moved later)
|
||||
mkdirMissing('uploads/tmp/'); // Create tmp dir
|
||||
$original_message_file = "processed-eml-" . randomString(200) . ".eml";
|
||||
imap_savebody($imap, "uploads/tmp/{$original_message_file}", $email);
|
||||
|
||||
// Get details from message and invoke PHP Mime Mail Parser
|
||||
$msg_to_parse = imap_fetchheader($imap, $email, FT_PREFETCHTEXT) . imap_body($imap, $email, FT_PEEK);
|
||||
$parser = new PhpMimeMailParser\Parser();
|
||||
|
|
@ -474,7 +486,7 @@ if ($emails) {
|
|||
$contact_email = sanitizeInput($row['contact_email']);
|
||||
$client_id = intval($row['contact_client_id']);
|
||||
|
||||
if (addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments)) {
|
||||
if (addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments, $original_message_file)) {
|
||||
$email_processed = true;
|
||||
}
|
||||
|
||||
|
|
@ -503,7 +515,7 @@ if ($emails) {
|
|||
echo "Created new contact.<br>";
|
||||
mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Contact', log_action = 'Create', log_description = 'Email parser: created contact $contact_name', log_client_id = $client_id");
|
||||
|
||||
if (addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments)) {
|
||||
if (addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments, $original_message_file)) {
|
||||
$email_processed = true;
|
||||
}
|
||||
|
||||
|
|
@ -523,11 +535,16 @@ if ($emails) {
|
|||
imap_setflag_full($imap, $email, "\\Seen");
|
||||
imap_mail_move($imap, $email, $imap_folder);
|
||||
} else {
|
||||
// Basically just flags all emails keep them unread and it doesnt move closed tickets
|
||||
// Basically just flags all emails to be manually checked
|
||||
echo "Failed to process email - flagging for manual review.";
|
||||
imap_setflag_full($imap, $email, "\\Flagged");
|
||||
}
|
||||
|
||||
// Remove temp original message if still there
|
||||
if (file_exists("uploads/tmp/{$original_message_file}")) {
|
||||
unlink("uploads/tmp/{$original_message_file}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue