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());