From 602dc0f793e9de3eaa778294e8348f0e2533bb2d Mon Sep 17 00:00:00 2001 From: Maximilian Martin Date: Wed, 24 Dec 2025 22:54:39 +0000 Subject: [PATCH 1/2] fix(IMAP): don't add whitespaces to drafts Signed-off-by: Maximilian Martin --- lib/IMAP/ImapMessageFetcher.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/IMAP/ImapMessageFetcher.php b/lib/IMAP/ImapMessageFetcher.php index fb09c6e703..be2ae9dda4 100644 --- a/lib/IMAP/ImapMessageFetcher.php +++ b/lib/IMAP/ImapMessageFetcher.php @@ -388,7 +388,10 @@ private function getPart(Horde_Mime_Part $p, string $partNo, bool $isFetched): v // so this just appends the raw source to the main message. if ($p[0] === 'message') { $data = $this->loadBodyData($p, $partNo, $isFetched); - $this->plainMessage .= trim($data) . "\n\n"; + if (!empty($this->plainMessage)) { + $this->plainMessage .= "\n\n"; + } + $this->plainMessage .= $data; } } @@ -422,7 +425,10 @@ private function handleMultiPartMessage(Horde_Mime_Part $part, string $partNo, b */ private function handleTextMessage(Horde_Mime_Part $p, string $partNo, bool $isFetched): void { $data = $this->loadBodyData($p, $partNo, $isFetched); - $this->plainMessage .= trim($data) . "\n\n"; + if (!empty($this->plainMessage)) { + $this->plainMessage .= "\n\n"; + } + $this->plainMessage .= $data; } /** @@ -438,7 +444,10 @@ private function handleTextMessage(Horde_Mime_Part $p, string $partNo, bool $isF private function handleHtmlMessage(Horde_Mime_Part $p, string $partNo, bool $isFetched): void { $this->hasHtmlMessage = true; $data = $this->loadBodyData($p, $partNo, $isFetched); - $this->htmlMessage .= $data . '

'; + if (!empty($this->htmlMessage)) { + $this->htmlMessage .= '

'; + } + $this->htmlMessage .= $data; } /** From 76fb4f97415fc21c1fc586a7d8385a7dd8d6150e Mon Sep 17 00:00:00 2001 From: Maximilian Martin Date: Fri, 2 Jan 2026 10:01:34 +0100 Subject: [PATCH 2/2] fix: IMAP tests don't expect newlines Signed-off-by: Maximilian Martin --- .../IMAP/ImapMessageFetcherIntegrationTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Integration/IMAP/ImapMessageFetcherIntegrationTest.php b/tests/Integration/IMAP/ImapMessageFetcherIntegrationTest.php index 70eb9e26a9..7ab8db834b 100644 --- a/tests/Integration/IMAP/ImapMessageFetcherIntegrationTest.php +++ b/tests/Integration/IMAP/ImapMessageFetcherIntegrationTest.php @@ -97,7 +97,7 @@ public function testFetchMessageWithEncryptedMessage(): void { $message = $fetcher->fetchMessage(); - $this->assertEquals(self::LOREM . "\n\n", $message->getPlainBody()); + $this->assertEquals(self::LOREM, $message->getPlainBody()); $this->assertCount(1, $message->attachments); $this->assertTrue($message->isEncrypted()); $this->assertTrue($message->isSigned()); @@ -121,7 +121,7 @@ public function testFetchMessageWithEncryptedUnverifiedMessage(): void { $message = $fetcher->fetchMessage(); - $this->assertEquals(self::LOREM . "\n\n", $message->getPlainBody()); + $this->assertEquals(self::LOREM, $message->getPlainBody()); $this->assertCount(1, $message->attachments); $this->assertTrue($message->isEncrypted()); $this->assertTrue($message->isSigned()); @@ -142,7 +142,7 @@ public function testFetchMessageWithEncryptedSignedOpaqueMessage(): void { $message = $fetcher->fetchMessage(); - $this->assertEquals(self::LOREM . "\n\n", $message->getPlainBody()); + $this->assertEquals(self::LOREM, $message->getPlainBody()); $this->assertTrue($message->isEncrypted()); $this->assertTrue($message->isSigned()); $this->assertTrue($message->isSignatureValid()); @@ -162,7 +162,7 @@ public function testFetchMessageWithSignedMessage(): void { $message = $fetcher->fetchMessage(); - $this->assertEquals(self::LOREM . "\n\n", $message->getPlainBody()); + $this->assertEquals(self::LOREM, $message->getPlainBody()); $this->assertFalse($message->isEncrypted()); $this->assertTrue($message->isSigned()); $this->assertTrue($message->isSignatureValid()); @@ -182,7 +182,7 @@ public function testFetchMessageWithOpaqueSignedMessage(): void { $message = $fetcher->fetchMessage(); - $this->assertEquals(self::LOREM . "\n\n", $message->getPlainBody()); + $this->assertEquals(self::LOREM, $message->getPlainBody()); $this->assertFalse($message->isEncrypted()); $this->assertTrue($message->isSigned()); $this->assertTrue($message->isSignatureValid());