Skip to content

Commit 0a6cabb

Browse files
committed
fix(backend): enhance header processing and improve uploaded file cleanup for EWS drafts
1 parent f9d3842 commit 0a6cabb

File tree

2 files changed

+35
-32
lines changed

2 files changed

+35
-32
lines changed

modules/imap/hm-ews.php

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -732,40 +732,16 @@ public function get_message_headers($itemId) {
732732
$headers['From'] = null;
733733
}
734734
$headers['To'] = $this->extract_mailbox($message->getToRecipients());
735-
if(is_array($headers['To'])) {
736-
$headers['To'] = implode(', ', $headers['To']);
737-
}
738-
if ($message->getCcRecipients()) {
735+
$headers['To'] = flatten_headers_to_string($headers, 'To');
736+
if($message->getCcRecipients()) {
739737
$headers['Cc'] = $this->extract_mailbox($message->getCcRecipients());
740-
}
741-
if(is_array($headers['Cc'])) {
742-
$headers['Cc'] = implode(', ', $headers['Cc']);
738+
$headers['Cc'] = flatten_headers_to_string($headers, 'Cc');
743739
}
744740
if ($message->getBccRecipients()) {
745741
$headers['Bcc'] = $this->extract_mailbox($message->getBccRecipients());
746-
}
747-
if(is_array($headers['Bcc'])) {
748-
$headers['Bcc'] = implode(', ', $headers['Bcc']);
742+
$headers['Bcc'] = flatten_headers_to_string($headers, 'Bcc');
749743
}
750744
$headers['Flags'] = implode(' ', $this->extract_flags($message));
751-
752-
$mime = $message->getMimeContent();
753-
$content = base64_decode($mime);
754-
if (strtoupper($mime->getCharacterSet()) != 'UTF-8') {
755-
$content = mb_convert_encoding($content, 'UTF-8', $mime->getCharacterSet());
756-
}
757-
$parser = new MailMimeParser();
758-
$n = $parser->parse($content, false);
759-
// Get ONLY the headers
760-
$h = $n->getAllHeaders();
761-
762-
// Display headers
763-
foreach ($h as $header) {
764-
if(!isset($headers[$header->getName()])) {
765-
$headers[$header->getName()] = $header->getValue();
766-
}
767-
}
768-
769745
foreach ($message->getInternetMessageHeaders() as $header) {
770746
$name = $header->getHeaderName();
771747
if (isset($headers[$name])) {
@@ -1294,3 +1270,21 @@ protected function get_parent_folders_of_items($itemIds) {
12941270
return $folders;
12951271
}
12961272
}
1273+
1274+
if(!hm_exists('flatten_headers_to_string')) {
1275+
function flatten_headers_to_string($headers, $key) {
1276+
if (!isset($headers[$key]) || !is_array($headers[$key])) {
1277+
return isset($headers[$key]) ? $headers[$key] : '';
1278+
}
1279+
1280+
$flattened_header = [];
1281+
foreach ($headers[$key] as $to_item) {
1282+
if (is_array($to_item)) {
1283+
$flattened_header = array_merge($flattened_header, $to_item);
1284+
} else {
1285+
$flattened_header[] = $to_item;
1286+
}
1287+
}
1288+
return implode(', ', $flattened_header);
1289+
}
1290+
}

modules/smtp/modules.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -787,10 +787,19 @@ public function process() {
787787
$specials = get_special_folders($this, $imap_server);
788788
delete_draft($form['draft_id'], $this->cache, $imap_server, $specials['draft']);
789789
}
790-
791-
delete_uploaded_files($this->session, $form['draft_id']);
792-
if ($form['draft_id'] > 0) {
793-
delete_uploaded_files($this->session, 0);
790+
791+
/* Clean up uploaded files
792+
* Note: EWS server handles draft deletion differently than IMAP/SMTP.
793+
* For EWS, drafts are completely removed during delete_draft operation,
794+
* making uploaded file cleanup unnecessary as files are no longer accessible.
795+
* For IMAP/SMTP, drafts may remain flagged as deleted but still exist on server,
796+
* requiring explicit cleanup of associated uploaded files.
797+
*/
798+
if($mailbox->server_type() !== 'EWS') {
799+
delete_uploaded_files($this->session, $form['draft_id']);
800+
if ($form['draft_id'] > 0) {
801+
delete_uploaded_files($this->session, 0);
802+
}
794803
}
795804
}
796805
}

0 commit comments

Comments
 (0)