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; } /** 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());