From 25ad8e744caf48b26e0b3bedac64ff691882e64a Mon Sep 17 00:00:00 2001 From: matidau <65836048+matidau@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:53:09 +1100 Subject: [PATCH] AS16 - Imap Drafts functions --- src/backend/imap/imap.php | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/backend/imap/imap.php b/src/backend/imap/imap.php index 8220d5da..5844a044 100644 --- a/src/backend/imap/imap.php +++ b/src/backend/imap/imap.php @@ -3231,4 +3231,57 @@ public function getRecentDraft() { return $id; } + /** + * Saves a copy of a message in the Draft folder + * + * @access public + * @param $finalHeaders Array of headers + * @param $finalBody Body part + * @return boolean If the message is saved + */ + private function saveDraftMessage($finalHeaders, $finalBody) { + ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->saveDraftMessage(): saving message in Draft Items folder")); + + $headers = ""; + foreach ($finalHeaders as $k => $v) { + if (strlen($headers) > 0) { + $headers .= "\n"; + } + $headers .= "$k: $v"; + } + + if ($this->draftID === false) { + $this->draftID = $this->getFolderIdFromImapId($this->create_name_folder(IMAP_FOLDER_DRAFT), false); + } + + $saved = false; + if ($this->draftID) { + $imapid = $this->getImapIdFromFolderId($this->draftID); + $saved = $this->addDraftMessage($imapid, $headers, $finalBody); + ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->saveDraftMessage(): Outgoing mail saved in 'Draft' folder '%s' ['%s']", $imapid, $this->draftID)); + } + else { + ZLog::Write(LOGLEVEL_ERROR, "BackendIMAP->saveDraftMessage(): The email could not be saved to Draft Items folder. Check your configuration."); + } + unset($headers); + + return $saved; + } + + /** + * Adds a message with draft and seen flag to a specified folder (used for saving draft items) + * + * @param string $folderid id of the folder + * @param string $header header of the message + * @param long $body body of the message + * + * @access protected + * @return boolean status + */ + protected function addDraftMessage($folderid, $header, $body) { + $header_body = str_replace("\n", "\r\n", str_replace("\r", "", $header . "\n\n" . $body)); + + return @imap_append($this->mbox, $this->server . $folderid, $header_body, "\\Seen\\Draft"); + } + };