diff --git a/appinfo/info.xml b/appinfo/info.xml
index 16fe56fec1..b49c72ebb7 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -34,7 +34,7 @@ The rating depends on the installed text processing backend. See [the rating ove
Learn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).
]]>
- 4.2.0-beta.1
+ 4.2.0-beta.2
agpl
Christoph Wurst
GretaD
diff --git a/lib/Controller/DraftsController.php b/lib/Controller/DraftsController.php
index dd12ccb790..a7351f8bde 100644
--- a/lib/Controller/DraftsController.php
+++ b/lib/Controller/DraftsController.php
@@ -76,8 +76,9 @@ public function __construct(string $appName,
public function create(
int $accountId,
string $subject,
- string $body,
- string $editorBody,
+ ?string $bodyPlain,
+ ?string $bodyHtml,
+ ?string $editorBody,
bool $isHtml,
?bool $smimeSign,
?bool $smimeEncrypt,
@@ -101,9 +102,10 @@ public function create(
$message->setAccountId($accountId);
$message->setAliasId($aliasId);
$message->setSubject($subject);
- $message->setBody($body);
- $message->setEditorBody($editorBody);
+ $message->setBodyPlain($bodyPlain);
+ $message->setBodyHtml($bodyHtml);
$message->setHtml($isHtml);
+ $message->setEditorBody($editorBody);
$message->setInReplyToMessageId($inReplyToMessageId);
$message->setUpdatedAt($this->timeFactory->getTime());
$message->setSendAt($sendAt);
@@ -146,8 +148,9 @@ public function create(
public function update(int $id,
int $accountId,
string $subject,
- string $body,
- string $editorBody,
+ ?string $bodyPlain,
+ ?string $bodyHtml,
+ ?string $editorBody,
bool $isHtml,
?bool $smimeSign,
?bool $smimeEncrypt,
@@ -169,9 +172,10 @@ public function update(int $id,
$message->setAccountId($accountId);
$message->setAliasId($aliasId);
$message->setSubject($subject);
- $message->setBody($body);
- $message->setEditorBody($editorBody);
+ $message->setBodyPlain($bodyPlain);
+ $message->setBodyHtml($bodyHtml);
$message->setHtml($isHtml);
+ $message->setEditorBody($editorBody);
$message->setFailed($failed);
$message->setInReplyToMessageId($inReplyToMessageId);
$message->setSendAt($sendAt);
diff --git a/lib/Controller/MessageApiController.php b/lib/Controller/MessageApiController.php
index 38230139d9..b2748349de 100644
--- a/lib/Controller/MessageApiController.php
+++ b/lib/Controller/MessageApiController.php
@@ -151,9 +151,16 @@ public function send(
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($accountId);
$message->setSubject($subject);
- $message->setBody($body);
+ if ($isHtml) {
+ $message->setBodyPlain(null);
+ $message->setBodyHtml($body);
+ $message->setHtml(true);
+ } else {
+ $message->setBodyPlain($body);
+ $message->setBodyHtml(null);
+ $message->setHtml(false);
+ }
$message->setEditorBody($body);
- $message->setHtml($isHtml);
$message->setSendAt($this->time->getTime());
$message->setType(LocalMessage::TYPE_OUTGOING);
diff --git a/lib/Controller/OutboxController.php b/lib/Controller/OutboxController.php
index af4ab9cb72..382333dabc 100644
--- a/lib/Controller/OutboxController.php
+++ b/lib/Controller/OutboxController.php
@@ -90,8 +90,9 @@ public function show(int $id): JsonResponse {
public function create(
int $accountId,
string $subject,
- string $body,
- string $editorBody,
+ ?string $bodyPlain,
+ ?string $bodyHtml,
+ ?string $editorBody,
bool $isHtml,
bool $smimeSign,
bool $smimeEncrypt,
@@ -118,9 +119,10 @@ public function create(
$message->setAccountId($accountId);
$message->setAliasId($aliasId);
$message->setSubject($subject);
- $message->setBody($body);
- $message->setEditorBody($editorBody);
+ $message->setBodyPlain($bodyPlain);
+ $message->setBodyHtml($bodyHtml);
$message->setHtml($isHtml);
+ $message->setEditorBody($editorBody);
$message->setInReplyToMessageId($inReplyToMessageId);
$message->setSendAt($sendAt);
$message->setPgpMime($isPgpMime);
@@ -181,7 +183,8 @@ public function update(
int $id,
int $accountId,
string $subject,
- string $body,
+ ?string $bodyPlain,
+ ?string $bodyHtml,
?string $editorBody,
bool $isHtml,
bool $smimeSign,
@@ -207,9 +210,10 @@ public function update(
$message->setAccountId($accountId);
$message->setAliasId($aliasId);
$message->setSubject($subject);
- $message->setBody($body);
- $message->setEditorBody($editorBody);
+ $message->setBodyPlain($bodyPlain);
+ $message->setBodyHtml($bodyHtml);
$message->setHtml($isHtml);
+ $message->setEditorBody($editorBody);
$message->setInReplyToMessageId($inReplyToMessageId);
$message->setSendAt($sendAt);
$message->setPgpMime($isPgpMime);
diff --git a/lib/Db/LocalMessage.php b/lib/Db/LocalMessage.php
index 8ce349ca8c..34fe9aa5fe 100644
--- a/lib/Db/LocalMessage.php
+++ b/lib/Db/LocalMessage.php
@@ -25,10 +25,12 @@
* @method void setSendAt(?int $sendAt)
* @method string getSubject()
* @method void setSubject(string $subject)
- * @method string getBody()
- * @method void setBody(?string $body)
+ * @method string getBodyPlain()
+ * @method void setBodyPlain(?string $bodyPlain)
+ * @method string getBodyHtml()
+ * @method void setBodyHtml(?string $bodyHtml)
* @method string|null getEditorBody()
- * @method void setEditorBody(string $body)
+ * @method void setEditorBody(?string $body)
* @method bool isHtml()
* @method void setHtml(bool $html)
* @method bool|null isFailed()
@@ -88,8 +90,11 @@ class LocalMessage extends Entity implements JsonSerializable {
/** @var string */
protected $subject;
- /** @var string */
- protected $body;
+ /** @var string|null */
+ protected $bodyPlain;
+
+ /** @var string|null */
+ protected $bodyHtml;
/** @var string|null */
protected $editorBody;
@@ -163,7 +168,8 @@ public function jsonSerialize() {
'sendAt' => $this->getSendAt(),
'updatedAt' => $this->getUpdatedAt(),
'subject' => $this->getSubject(),
- 'body' => $this->getBody(),
+ 'bodyPlain' => $this->getBodyPlain(),
+ 'bodyHtml' => $this->getBodyHtml(),
'editorBody' => $this->getEditorBody(),
'isHtml' => ($this->isHtml() === true),
'isPgpMime' => ($this->isPgpMime() === true),
diff --git a/lib/Migration/Version4200Date20241210000000.php b/lib/Migration/Version4200Date20241210000000.php
new file mode 100644
index 0000000000..c133932be9
--- /dev/null
+++ b/lib/Migration/Version4200Date20241210000000.php
@@ -0,0 +1,42 @@
+getTable('mail_local_messages');
+ if (!$outboxTable->hasColumn('body_plain')) {
+ $outboxTable->addColumn('body_plain', Types::TEXT, [
+ 'notnull' => false,
+ ]);
+ }
+ if (!$outboxTable->hasColumn('body_html')) {
+ $outboxTable->addColumn('body_html', Types::TEXT, [
+ 'notnull' => false,
+ ]);
+ }
+ return $schema;
+ }
+}
diff --git a/lib/Migration/Version4200Date20241210000001.php b/lib/Migration/Version4200Date20241210000001.php
new file mode 100644
index 0000000000..8597e65f6a
--- /dev/null
+++ b/lib/Migration/Version4200Date20241210000001.php
@@ -0,0 +1,75 @@
+getTable('mail_local_messages');
+ if ($outboxTable->hasColumn('body') && $outboxTable->hasColumn('body_plain') && $outboxTable->hasColumn('body_html')) {
+ // copy plain type content to proper column
+ $qb = $this->db->getQueryBuilder();
+ $qb->update('mail_local_messages')
+ ->set('body_plain', 'body')
+ ->where($qb->expr()->eq('html', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
+ ->executeStatement();
+ // copy html type content to proper column
+ $qb = $this->db->getQueryBuilder();
+ $qb->update('mail_local_messages')
+ ->set('body_html', 'body')
+ ->where($qb->expr()->eq('html', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT)))
+ ->executeStatement();
+ } else {
+ throw new Exception('Can not perform migration step, one of the following columns is missing body, body_plain, body_html', 1);
+ }
+ }
+
+ /**
+ * @param IOutput $output
+ * @param Closure(): ISchemaWrapper $schemaClosure
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+ $schema = $schemaClosure();
+
+ $outboxTable = $schema->getTable('mail_local_messages');
+ if ($outboxTable->hasColumn('body')) {
+ $outboxTable->dropColumn('body');
+ }
+ return $schema;
+ }
+}
diff --git a/lib/Provider/Command/MessageSend.php b/lib/Provider/Command/MessageSend.php
index 4d5275da6e..870970c710 100644
--- a/lib/Provider/Command/MessageSend.php
+++ b/lib/Provider/Command/MessageSend.php
@@ -75,10 +75,13 @@ public function perform(string $userId, string $serviceId, IMessage $message, ar
$localMessage->setType($localMessage::TYPE_OUTGOING);
$localMessage->setAccountId($account->getId());
$localMessage->setSubject((string)$message->getSubject());
- $localMessage->setBody((string)$message->getBody());
- // disabled due to issues caused by opening these messages in gui
- //$localMessage->setEditorBody($message->getBody());
- $localMessage->setHtml(true);
+ $localMessage->setBodyPlain($message->getBodyPlain());
+ $localMessage->setBodyHtml($message->getBodyHtml());
+ if (!empty($message->getBodyHtml())) {
+ $localMessage->setHtml(true);
+ } else {
+ $localMessage->setHtml(false);
+ }
$localMessage->setSendAt($this->time->getTime());
// convert mail provider addresses to recipient addresses
$to = $this->convertAddressArray($message->getTo());
diff --git a/lib/Service/AntiSpamService.php b/lib/Service/AntiSpamService.php
index 4147abe619..d991f036c9 100644
--- a/lib/Service/AntiSpamService.php
+++ b/lib/Service/AntiSpamService.php
@@ -158,7 +158,7 @@ public function sendReportEmail(Account $account, Mailbox $mailbox, int $uid, st
new DataUriParser()
);
$mimePart = $mimeMessage->build(
- true,
+ null,
$message->getContent(),
$message->getAttachments()
);
diff --git a/lib/Service/MailTransmission.php b/lib/Service/MailTransmission.php
index ff1f7765eb..480c4164a2 100644
--- a/lib/Service/MailTransmission.php
+++ b/lib/Service/MailTransmission.php
@@ -122,8 +122,8 @@ public function sendMessage(Account $account, LocalMessage $localMessage): void
new DataUriParser()
);
$mimePart = $mimeMessage->build(
- $localMessage->isHtml(),
- $localMessage->getBody(),
+ $localMessage->getBodyPlain(),
+ $localMessage->getBodyHtml(),
$attachmentParts,
$localMessage->isPgpMime() === true
);
@@ -183,7 +183,11 @@ public function saveLocalDraft(Account $account, LocalMessage $message): void {
$imapMessage->setFrom($from);
$imapMessage->setCC($cc);
$imapMessage->setBcc($bcc);
- $imapMessage->setContent($message->getBody());
+ if ($message->isHtml() === true) {
+ $imapMessage->setContent($message->getBodyHtml());
+ } else {
+ $imapMessage->setContent($message->getBodyPlain());
+ }
foreach ($attachments as $attachment) {
$this->transmissionService->handleAttachment($account, $attachment);
diff --git a/lib/Service/MimeMessage.php b/lib/Service/MimeMessage.php
index f120618a6f..5e2a0a2666 100644
--- a/lib/Service/MimeMessage.php
+++ b/lib/Service/MimeMessage.php
@@ -25,151 +25,181 @@ public function __construct(DataUriParser $uriParser) {
}
/**
- * @param bool $isHtml
- * @param string $content
+ * generates mime message
+ *
+ * @param string $contentPlain
+ * @param string $contentHtml
* @param Horde_Mime_Part[] $attachments
+ *
* @return Horde_Mime_Part
*/
- public function build(bool $isHtml, string $content, array $attachments, bool $isPgpMime = false): Horde_Mime_Part {
- if ($isHtml) {
- $imageParts = [];
- if (empty($content)) {
- $htmlContent = $textContent = $content;
+ public function build(?string $contentPlain, ?string $contentHtml, array $attachments, bool $isPgpEncrypted = false): Horde_Mime_Part {
+
+ if ($isPgpEncrypted === true && isset($contentPlain)) {
+ $basePart = $this->buildPgpPart($contentPlain);
+ } elseif (count($attachments) > 0) {
+ /*
+ * Messages with non embedded attachments need to be wrap in a multipart/mixed part
+ */
+ $basePart = new Horde_Mime_Part();
+ $basePart->setType('multipart/mixed');
+ $basePart[] = $this->buildMessagePart($contentPlain, $contentHtml);
+ foreach ($attachments as $attachment) {
+ $basePart[] = $attachment;
+ }
+ } else {
+ $basePart = $this->buildMessagePart($contentPlain, $contentHtml);
+ }
+
+ $basePart->isBasePart(true);
+
+ return $basePart;
+ }
+
+ /**
+ * generates html/plain message part
+ *
+ * @return Horde_Mime_Part
+ */
+ private function buildMessagePart(?string $contentPlain, ?string $contentHtml): Horde_Mime_Part {
+
+ if (isset($contentHtml)) {
+
+ // determine if content is wrapped properly in a html tag, otherwise we need to wrap it properly
+ if (mb_strpos($contentHtml, '
' . $contentHtml . '';
} else {
- $source = '' . $content . '';
-
- $doc = new DOMDocument();
- $doc->loadHTML($source, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
-
- $images = $doc->getElementsByTagName('img');
-
- for ($i = 0; $i < $images->count(); $i++) {
- $image = $images->item($i);
- if (!($image instanceof DOMElement)) {
- continue;
- }
-
- $src = $image->getAttribute('src');
- if ($src === '') {
- continue;
- }
-
- try {
- $dataUri = $this->uriParser->parse($src);
- } catch (InvalidDataUriException $e) {
- continue;
- }
-
- $part = new Horde_Mime_Part();
- $part->setType($dataUri->getMediaType());
- $part->setCharset($dataUri->getParameters()['charset']);
- $part->setName('embedded_image_' . $i);
- $part->setDisposition('inline');
- if ($dataUri->isBase64()) {
- $part->setTransferEncoding('base64');
- }
- $part->setContents($dataUri->getData());
-
- $cid = $part->setContentId();
- $imageParts[] = $part;
-
- $image->setAttribute('src', 'cid:' . $cid);
+ $source = ' ' . $contentHtml;
+ }
+
+ $doc = new DOMDocument();
+ $doc->loadHTML($source, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
+ // determine if content has any embedded images
+ $embeddedParts = [];
+ foreach ($doc->getElementsByTagName('img') as $id => $image) {
+ if (!($image instanceof DOMElement)) {
+ continue;
}
- $htmlContent = $doc->saveHTML();
- $textContent = Horde_Text_Filter::filter($htmlContent, 'Html2text', ['callback' => [$this, 'htmlToTextCallback']]);
- }
+ $src = $image->getAttribute('src');
+ if ($src === '') {
+ continue;
+ }
+ try {
+ $dataUri = $this->uriParser->parse($src);
+ } catch (InvalidDataUriException $e) {
+ continue;
+ }
+
+ $part = new Horde_Mime_Part();
+ $part->setType($dataUri->getMediaType());
+ $part->setCharset($dataUri->getParameters()['charset']);
+ $part->setName('embedded_image_' . $id);
+ $part->setDisposition('inline');
+ if ($dataUri->isBase64()) {
+ $part->setTransferEncoding('base64');
+ }
+ $part->setContents($dataUri->getData());
- $alternativePart = new Horde_Mime_Part();
- $alternativePart->setType('multipart/alternative');
+ $cid = $part->setContentId();
+ $embeddedParts[] = $part;
+
+ $image->setAttribute('src', 'cid:' . $cid);
+ }
+ $htmlContent = $doc->saveHTML();
$htmlPart = new Horde_Mime_Part();
$htmlPart->setType('text/html');
$htmlPart->setCharset('UTF-8');
$htmlPart->setContents($htmlContent);
- $htmlPart->setDescription('HTML Version of Message');
-
- $textPart = new Horde_Mime_Part();
- $textPart->setType('text/plain');
- $textPart->setCharset('UTF-8');
- $textPart->setContents($textContent);
- $textPart->setDescription('Plaintext Version of Message');
-
- /*
- * RFC1341: In general, user agents that compose multipart/alternative entities should place the
- * body parts in increasing order of preference, that is, with the preferred format last.
- */
- $alternativePart[] = $textPart;
- $alternativePart[] = $htmlPart;
+ }
+
+ if (isset($contentPlain)) {
+ $plainPart = new Horde_Mime_Part();
+ $plainPart->setType('text/plain');
+ $plainPart->setCharset('UTF-8');
+ $plainPart->setContents($contentPlain);
+ } elseif (!isset($contentPlain) && isset($contentHtml)) {
+ $plainPart = new Horde_Mime_Part();
+ $plainPart->setType('text/plain');
+ $plainPart->setCharset('UTF-8');
+ $plainPart->setContents(
+ Horde_Text_Filter::filter($contentHtml, 'Html2text', ['callback' => [$this, 'htmlToTextCallback']])
+ );
+ }
+ if (isset($plainPart, $htmlPart)) {
/*
- * Wrap the multipart/alternative parts in multipart/related when inline images are found.
- */
- if (count($imageParts) > 0) {
- $bodyPart = new Horde_Mime_Part();
- $bodyPart->setType('multipart/related');
- $bodyPart[] = $alternativePart;
- foreach ($imageParts as $imagePart) {
- $bodyPart[] = $imagePart;
- }
- } else {
- $bodyPart = $alternativePart;
- }
- } elseif ($isPgpMime) {
- $contentPart = new Horde_Mime_Part();
- $contentPart->setType('application/octet-stream');
- $contentPart->setContentTypeParameter('name', 'encrypted.asc');
- $contentPart->setTransferEncoding('7bit');
- $contentPart->setDisposition('inline');
- $contentPart->setDispositionParameter('filename', 'encrypted.asc');
- $contentPart->setDescription('OpenPGP encrypted message');
- $contentPart->setContents($content);
-
- $pgpIdentPart = new Horde_Mime_Part();
- $pgpIdentPart->setType('application/pgp-encrypted');
- $pgpIdentPart->setTransferEncoding('7bit');
- $pgpIdentPart->setDescription('PGP/MIME Versions Identification');
- $pgpIdentPart->setContents('Version: 1');
-
- $bodyPart = new Horde_Mime_Part();
- $bodyPart->setType('multipart/encrypted');
- $bodyPart->setContentTypeParameter('protocol', 'application/pgp-encrypted');
- $bodyPart[] = $pgpIdentPart;
- $bodyPart[] = $contentPart;
+ * RFC1341: Multipart/alternative entities should place the body parts in
+ * increasing order of preference, that is, with the preferred format last.
+ */
+ $messagePart = new Horde_Mime_Part();
+ $messagePart->setType('multipart/alternative');
+ $messagePart[] = $plainPart;
+ $messagePart[] = $htmlPart;
+ } elseif (isset($htmlPart)) {
+ $messagePart = $htmlPart;
+ } elseif (isset($plainPart)) {
+ $messagePart = $plainPart;
} else {
- $bodyPart = new Horde_Mime_Part();
- $bodyPart->setType('text/plain');
- $bodyPart->setCharset('UTF-8');
- $bodyPart->setContents($content);
+ $messagePart = new Horde_Mime_Part();
}
- /*
- * For attachments wrap the body (multipart/related, multipart/alternative or text/plain) in
- * a multipart/mixed part.
- */
- if (count($attachments) > 0) {
+ if (isset($embeddedParts) && count($embeddedParts) > 0) {
+ /*
+ * Text parts with embedded content (e.g. inline images, etc) need be wrapped in multipart/related part
+ */
$basePart = new Horde_Mime_Part();
- $basePart->setType('multipart/mixed');
- $basePart[] = $bodyPart;
- foreach ($attachments as $attachment) {
- $basePart[] = $attachment;
+ $basePart->setType('multipart/related');
+ $basePart[] = $messagePart;
+ foreach ($embeddedParts as $part) {
+ $basePart[] = $part;
}
} else {
- $basePart = $bodyPart;
+ $basePart = $messagePart;
}
- /*
- * To add the Mime-Version-Header
- */
- $basePart->isBasePart(true);
+ return $basePart;
+ }
+
+ /**
+ * generates pgp encrypted message part
+ *
+ * @param string $content
+ *
+ * @return Horde_Mime_Part
+ */
+ private function buildPgpPart(string $content): Horde_Mime_Part {
+
+ $contentPart = new Horde_Mime_Part();
+ $contentPart->setType('application/octet-stream');
+ $contentPart->setContentTypeParameter('name', 'encrypted.asc');
+ $contentPart->setTransferEncoding('7bit');
+ $contentPart->setDisposition('inline');
+ $contentPart->setDispositionParameter('filename', 'encrypted.asc');
+ $contentPart->setDescription('OpenPGP encrypted message');
+ $contentPart->setContents($content);
+
+ $pgpIdentPart = new Horde_Mime_Part();
+ $pgpIdentPart->setType('application/pgp-encrypted');
+ $pgpIdentPart->setTransferEncoding('7bit');
+ $pgpIdentPart->setDescription('PGP/MIME Versions Identification');
+ $pgpIdentPart->setContents('Version: 1');
+
+ $basePart = new Horde_Mime_Part();
+ $basePart->setType('multipart/encrypted');
+ $basePart->setContentTypeParameter('protocol', 'application/pgp-encrypted');
+ $basePart[] = $pgpIdentPart;
+ $basePart[] = $contentPart;
return $basePart;
+
}
/**
* A callback for Horde_Text_Filter.
*
- * The purpose of this callback is to overwrite the default behaviour
+ * The purpose of this callback is to overwrite the default behavior
* of html2text filter to convert Hello
=> Hello\n\n with
* Hello
=> Hello\n.
*
diff --git a/package-lock.json b/package-lock.json
index e5a400563e..b36cd96ac8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "nextcloud-mail",
- "version": "4.2.0-beta1",
+ "version": "4.2.0-beta2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "nextcloud-mail",
- "version": "4.2.0-beta1",
+ "version": "4.2.0-beta2",
"license": "agpl",
"dependencies": {
"@ckeditor/ckeditor5-alignment": "37.1.0",
diff --git a/package.json b/package.json
index ed128cbeba..3c706e6383 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "nextcloud-mail",
"description": "Nextcloud Mail",
- "version": "4.2.0-beta1",
+ "version": "4.2.0-beta2",
"author": "Christoph Wurst ",
"license": "agpl",
"private": true,
diff --git a/src/components/NewMessageModal.vue b/src/components/NewMessageModal.vue
index 7cc30fb14c..5e79f5c606 100644
--- a/src/components/NewMessageModal.vue
+++ b/src/components/NewMessageModal.vue
@@ -363,11 +363,10 @@ export default {
return this.draftsPromise
},
getDataForServer(data) {
- return {
+ const dataForServer = {
...data,
id: data.id,
accountId: data.accountId,
- body: data.isHtml ? data.body.value : toPlain(data.body).value,
editorBody: data.body.value,
to: data.to,
cc: data.cc,
@@ -378,6 +377,12 @@ export default {
sendAt: data.sendAt,
draftId: this.composerData?.draftId,
}
+ if (data.isHtml) {
+ dataForServer.bodyHtml = data.body.value
+ } else {
+ dataForServer.bodyPlain = toPlain(data.body).value
+ }
+ return dataForServer
},
onAttachmentUploading(done, data) {
this.attachmentsPromise = this.attachmentsPromise
diff --git a/src/components/OutboxMessageListItem.vue b/src/components/OutboxMessageListItem.vue
index faeb0709cc..feddea1270 100644
--- a/src/components/OutboxMessageListItem.vue
+++ b/src/components/OutboxMessageListItem.vue
@@ -173,11 +173,17 @@ export default {
if (this.message.editorBody === null) {
return
}
+ const bodyData = {}
+ if (this.message.isHtml) {
+ bodyData.bodyHtml = html(this.message.body)
+ } else {
+ bodyData.bodyPlain = plain(this.message.body)
+ }
await this.mainStore.startComposerSession({
type: 'outbox',
data: {
...this.message,
- body: this.message.isHtml ? html(this.message.body) : plain(this.message.body),
+ ...bodyData,
},
})
},
diff --git a/src/store/mainStore/actions.js b/src/store/mainStore/actions.js
index 138e856a24..02cffdd26d 100644
--- a/src/store/mainStore/actions.js
+++ b/src/store/mainStore/actions.js
@@ -555,9 +555,11 @@ export default function mainStoreActions() {
let originalSendAt
if (type === 'outbox' && data.id && data.sendAt) {
originalSendAt = data.sendAt
- const message = {
- ...data,
- body: data.isHtml ? data.body.value : toPlain(data.body).value,
+ const message = { ...data }
+ if (data.isHtml) {
+ message.bodyHtml = data.body.value
+ } else {
+ message.bodyPlain = toPlain(data.body).value
}
const outboxStore = useOutboxStore()
await outboxStore.stopMessage({ message })
@@ -588,7 +590,11 @@ export default function mainStoreActions() {
const message = this.composerMessage
if (restoreOriginalSendAt && message.type === 'outbox' && message.options?.originalSendAt) {
const body = message.data.body
- message.body = message.data.isHtml ? body.value : toPlain(body).value
+ if (message.data.isHtml) {
+ message.bodyHtml = body.value
+ } else {
+ message.bodyPlain = toPlain(body).value
+ }
message.sendAt = message.options.originalSendAt
updateDraft(message)
}
diff --git a/src/store/outboxStore.js b/src/store/outboxStore.js
index 84500cdf7c..9cb143a891 100644
--- a/src/store/outboxStore.js
+++ b/src/store/outboxStore.js
@@ -184,12 +184,18 @@ export default defineStore('outbox', {
logger.info('Attempting to stop sending message ' + message.id)
const stopped = await this.stopMessage({ message })
logger.info('Message ' + message.id + ' stopped', { message: stopped })
+ // The composer expects rich body data and not just a string
+ const bodyData = {}
+ if (message.isHtml) {
+ bodyData.bodyHtml = html(message.body)
+ } else {
+ bodyData.bodyPlain = plain(message.body)
+ }
await this.mainStore.startComposerSession({
type: 'outbox',
data: {
...message,
- // The composer expects rich body data and not just a string
- body: message.isHtml ? html(message.body) : plain(message.body),
+ ...bodyData,
},
}, { root: true })
}, {
diff --git a/tests/Integration/Db/LocalAttachmentMapperTest.php b/tests/Integration/Db/LocalAttachmentMapperTest.php
index 3e35df903a..0a249ef50b 100644
--- a/tests/Integration/Db/LocalAttachmentMapperTest.php
+++ b/tests/Integration/Db/LocalAttachmentMapperTest.php
@@ -97,7 +97,7 @@ protected function setUp(): void {
$message1->setAliasId(3);
$message1->setSendAt(3);
$message1->setSubject('testSaveLocalAttachments');
- $message1->setBody('message');
+ $message1->setBodyHtml('message');
$message1->setHtml(true);
$message1->setInReplyToMessageId('abcdefg');
$message1 = $this->localMessageMapper->insert($message1);
@@ -107,7 +107,7 @@ protected function setUp(): void {
$message2->setAliasId(3);
$message2->setSendAt(3);
$message2->setSubject('testSaveLocalAttachments');
- $message2->setBody('message');
+ $message2->setBodyHtml('message');
$message2->setHtml(true);
$message2->setInReplyToMessageId('abcdefg');
$message2 = $this->localMessageMapper->insert($message2);
diff --git a/tests/Integration/Db/LocalMessageMapperTest.php b/tests/Integration/Db/LocalMessageMapperTest.php
index 60f3dde674..2da4be95fc 100644
--- a/tests/Integration/Db/LocalMessageMapperTest.php
+++ b/tests/Integration/Db/LocalMessageMapperTest.php
@@ -67,7 +67,7 @@ protected function setUp(): void {
$message->setAliasId(2);
$message->setSendAt(123);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
$this->entity = $this->mapper->insert($message);
@@ -82,7 +82,7 @@ public function testFindAllForUser(): void {
$this->assertEquals(2, $row->getAliasId());
$this->assertEquals($this->account->getId(), $row->getAccountId());
$this->assertEquals('subject', $row->getSubject());
- $this->assertEquals('message', $row->getBody());
+ $this->assertEquals('message', $row->getBodyHtml());
$this->assertEquals('abc', $row->getInReplyToMessageId());
$this->assertTrue($row->isHtml());
$this->assertEmpty($row->getAttachments());
@@ -99,7 +99,7 @@ public function testFindById(): void {
$this->assertEquals(2, $row->getAliasId());
$this->assertEquals($this->account->getId(), $row->getAccountId());
$this->assertEquals('subject', $row->getSubject());
- $this->assertEquals('message', $row->getBody());
+ $this->assertEquals('message', $row->getBodyHtml());
$this->assertEquals('abc', $row->getInReplyToMessageId());
$this->assertTrue($row->isHtml());
$this->assertEmpty($row->getAttachments());
@@ -134,7 +134,7 @@ public function testSaveWithRecipient(): void {
$message->setAliasId(3);
$message->setSendAt(3);
$message->setSubject('savedWithRelated');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abcdefg');
$recipient = new Recipient();
@@ -151,7 +151,7 @@ public function testSaveWithRecipient(): void {
$this->assertEquals(3, $row->getAliasId());
$this->assertEquals($this->account->getId(), $row->getAccountId());
$this->assertEquals('savedWithRelated', $row->getSubject());
- $this->assertEquals('message', $row->getBody());
+ $this->assertEquals('message', $row->getBodyHtml());
$this->assertEquals('abcdefg', $row->getInReplyToMessageId());
$this->assertTrue($row->isHtml());
$this->assertEmpty($row->getAttachments());
@@ -185,7 +185,7 @@ public function testUpdateWithRecipientOnlyOne(): void {
$message->setAliasId(3);
$message->setSendAt(3);
$message->setSubject('savedWithRelated');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abcdefg');
$recipient = new Recipient();
diff --git a/tests/Integration/Db/LocalMessageTest.php b/tests/Integration/Db/LocalMessageTest.php
index da6c5cdbad..54a6cb709e 100644
--- a/tests/Integration/Db/LocalMessageTest.php
+++ b/tests/Integration/Db/LocalMessageTest.php
@@ -31,7 +31,7 @@ public function testGettersSetters(): void {
$message->setAliasId(2);
$message->setSendAt($time);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('');
@@ -40,7 +40,7 @@ public function testGettersSetters(): void {
$this->assertEquals(2, $message->getAliasId());
$this->assertEquals($time, $message->getSendAt());
$this->assertEquals('subject', $message->getSubject());
- $this->assertEquals('message', $message->getBody());
+ $this->assertEquals('message', $message->getBodyHtml());
$this->assertTrue($message->isHtml());
$this->assertEquals('', $message->getInReplyToMessageId());
$this->assertNull($message->getAttachments());
diff --git a/tests/Integration/Db/RecipientMapperTest.php b/tests/Integration/Db/RecipientMapperTest.php
index 3422621e25..4df0901bb4 100644
--- a/tests/Integration/Db/RecipientMapperTest.php
+++ b/tests/Integration/Db/RecipientMapperTest.php
@@ -74,7 +74,7 @@ protected function setUp(): void {
$message->setAliasId(2);
$message->setSendAt(123);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$this->message = $this->localMessageMapper->insert($message);
@@ -134,7 +134,7 @@ public function testSaveRecipients(): void {
$message->setAliasId(2);
$message->setSendAt(123);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message = $this->localMessageMapper->insert($message);
@@ -163,7 +163,7 @@ public function testUpdateRecipients(): void {
$message->setAccountId($this->account->getId());
$message->setSendAt(123);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message = $this->localMessageMapper->insert($message);
diff --git a/tests/Integration/Service/DraftServiceIntegrationTest.php b/tests/Integration/Service/DraftServiceIntegrationTest.php
index 8556c4fed8..2439c40cfa 100644
--- a/tests/Integration/Service/DraftServiceIntegrationTest.php
+++ b/tests/Integration/Service/DraftServiceIntegrationTest.php
@@ -129,7 +129,7 @@ public function testSaveAndGetMessage(): void {
$message->setType(LocalMessage::TYPE_DRAFT);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -153,7 +153,7 @@ public function testSaveAndDeleteMessage(): void {
$message->setType(LocalMessage::TYPE_DRAFT);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -176,7 +176,7 @@ public function testSaveAndUpdateMessage(): void {
$message->setType(LocalMessage::TYPE_DRAFT);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -205,7 +205,7 @@ public function testSaveAndConvertToOutboxMessage(): void {
$message->setType(LocalMessage::TYPE_DRAFT);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -239,7 +239,7 @@ public function testSaveAndSendMessage(): void {
$message->setType(LocalMessage::TYPE_DRAFT);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
diff --git a/tests/Integration/Service/MailTransmissionIntegrationTest.php b/tests/Integration/Service/MailTransmissionIntegrationTest.php
index 66653c1565..6db4922d23 100644
--- a/tests/Integration/Service/MailTransmissionIntegrationTest.php
+++ b/tests/Integration/Service/MailTransmissionIntegrationTest.php
@@ -109,7 +109,7 @@ protected function setUp(): void {
$this->message = new LocalMessage();
$this->message->setAccountId($this->account->getId());
$this->message->setSubject('greetings');
- $this->message->setBody('hello there');
+ $this->message->setBodyHtml('hello there');
$this->message->setType(LocalMessage::TYPE_OUTGOING);
$this->message->setHtml(false);
$this->message->setRecipients([$recipient]);
diff --git a/tests/Integration/Service/OutboxServiceIntegrationTest.php b/tests/Integration/Service/OutboxServiceIntegrationTest.php
index 31c59e8776..1a6cc27a92 100644
--- a/tests/Integration/Service/OutboxServiceIntegrationTest.php
+++ b/tests/Integration/Service/OutboxServiceIntegrationTest.php
@@ -135,7 +135,7 @@ public function testSaveAndGetMessage(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -159,7 +159,7 @@ public function testSaveAndGetMessages(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$saved = $this->outbox->saveMessage(new Account($this->account), $message, [], [], []);
@@ -170,7 +170,7 @@ public function testSaveAndGetMessages(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$saved = $this->outbox->saveMessage(new Account($this->account), $message, [], [], []);
@@ -186,7 +186,7 @@ public function testSaveAndGetMessageWithMessageAttachment(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
/** @var \Horde_Imap_Client_Mailbox[] $mailBoxes */
@@ -249,7 +249,7 @@ public function testSaveAndGetMessageWithCloudAttachmentt(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$this->userFolder->newFile('/test.txt', file_get_contents(__DIR__ . '/../../data/test.txt'));
$attachments = [
@@ -281,7 +281,7 @@ public function testSaveAndDeleteMessage(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -304,7 +304,7 @@ public function testSaveAndUpdateMessage(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -334,7 +334,7 @@ public function testSaveAndSendMessage(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$to = [[
@@ -358,7 +358,7 @@ public function testSaveAndFlush(): void {
$message->setType(LocalMessage::TYPE_OUTGOING);
$message->setAccountId($this->account->getId());
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message');
$message->setHtml(true);
$message->setSendAt(100);
diff --git a/tests/Unit/Controller/DraftsControllerTest.php b/tests/Unit/Controller/DraftsControllerTest.php
index f8f304ab2c..e1f672aff1 100644
--- a/tests/Unit/Controller/DraftsControllerTest.php
+++ b/tests/Unit/Controller/DraftsControllerTest.php
@@ -194,7 +194,8 @@ public function testCreate(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -222,7 +223,8 @@ public function testCreate(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -243,7 +245,8 @@ public function testCreateFromDraft(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -273,7 +276,8 @@ public function testCreateFromDraft(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -298,7 +302,8 @@ public function testCreateWithEmptyRecipients(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -324,7 +329,8 @@ public function testCreateWithEmptyRecipients(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -345,7 +351,8 @@ public function testCreateAccountNotFound(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -365,7 +372,8 @@ public function testCreateAccountNotFound(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -384,7 +392,8 @@ public function testCreateDbException(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -403,7 +412,8 @@ public function testCreateDbException(): void {
$this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -423,7 +433,8 @@ public function testUpdate(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -451,7 +462,8 @@ public function testUpdate(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -474,7 +486,8 @@ public function testUpdateMoveToOutbox(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -503,7 +516,8 @@ public function testUpdateMoveToOutbox(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -528,7 +542,8 @@ public function testUpdateMessageNotFound(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -551,7 +566,8 @@ public function testUpdateMessageNotFound(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
@@ -574,7 +590,8 @@ public function testUpdateDbException(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abc');
@@ -602,7 +619,8 @@ public function testUpdateDbException(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
null,
diff --git a/tests/Unit/Controller/MessageApiControllerTest.php b/tests/Unit/Controller/MessageApiControllerTest.php
index 5f243c4fc3..7b06ac01d1 100644
--- a/tests/Unit/Controller/MessageApiControllerTest.php
+++ b/tests/Unit/Controller/MessageApiControllerTest.php
@@ -109,7 +109,7 @@ protected function setUp(): void {
$this->message = new LocalMessage();
$this->message->setAccountId($this->accountId);
$this->message->setSubject('');
- $this->message->setBody('');
+ $this->message->setBodyHtml('');
$this->message->setHtml(true);
$this->message->setType(LocalMessage::TYPE_OUTGOING);
}
diff --git a/tests/Unit/Controller/OutboxControllerTest.php b/tests/Unit/Controller/OutboxControllerTest.php
index 7e55c292c3..51f25603cf 100644
--- a/tests/Unit/Controller/OutboxControllerTest.php
+++ b/tests/Unit/Controller/OutboxControllerTest.php
@@ -259,7 +259,8 @@ public function testCreate(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -284,7 +285,8 @@ public function testCreate(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -306,7 +308,7 @@ public function testCreateAccountNotFound(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -327,7 +329,8 @@ public function testCreateAccountNotFound(): void {
$actual = $this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -347,7 +350,8 @@ public function testCreateDbException(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -368,7 +372,8 @@ public function testCreateDbException(): void {
$this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -389,7 +394,8 @@ public function testUpdate(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -419,7 +425,8 @@ public function testUpdate(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -442,7 +449,8 @@ public function testUpdateMessageNotFound(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -467,7 +475,8 @@ public function testUpdateMessageNotFound(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -490,7 +499,8 @@ public function testUpdateDbException(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -520,7 +530,8 @@ public function testUpdateDbException(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -540,7 +551,8 @@ public function testCreateValidateCertificateId(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -564,7 +576,8 @@ public function testCreateValidateCertificateId(): void {
$this->controller->create(
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
@@ -586,7 +599,8 @@ public function testUpdateValidateCertificateId(): void {
$message->setAccountId(1);
$message->setAliasId(2);
$message->setSubject('subject');
- $message->setBody('message');
+ $message->setBodyPlain(null);
+ $message->setBodyHtml('message
');
$message->setEditorBody('message
');
$message->setHtml(true);
$message->setSmimeSign(false);
@@ -616,7 +630,8 @@ public function testUpdateValidateCertificateId(): void {
$message->getId(),
$message->getAccountId(),
$message->getSubject(),
- $message->getBody(),
+ $message->getBodyPlain(),
+ $message->getBodyHtml(),
'message
',
$message->isHtml(),
$message->getSmimeSign(),
diff --git a/tests/Unit/Provider/Command/MessageSendTest.php b/tests/Unit/Provider/Command/MessageSendTest.php
index 229f51d7a1..34cb5e0d3c 100644
--- a/tests/Unit/Provider/Command/MessageSendTest.php
+++ b/tests/Unit/Provider/Command/MessageSendTest.php
@@ -80,8 +80,8 @@ protected function setUp(): void {
'type' => 0,
'accountId' => 100,
'subject' => 'World domination',
- 'body' => 'I have the most brilliant plan. Let me tell you all about it. What we do is, we',
- 'html' => true
+ 'bodyPlain' => 'I have the most brilliant plan. Let me tell you all about it. What we do is, we',
+ 'html' => false
];
// construct mail app attachment object
$this->localAttachmentData = [
diff --git a/tests/Unit/Service/DraftsServiceTest.php b/tests/Unit/Service/DraftsServiceTest.php
index 4965715a08..43b44f918d 100644
--- a/tests/Unit/Service/DraftsServiceTest.php
+++ b/tests/Unit/Service/DraftsServiceTest.php
@@ -101,7 +101,7 @@ public function testGetMessage(): void {
$message->setSendAt(null);
$message->setUpdatedAt(123456);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
@@ -129,7 +129,7 @@ public function testDeleteMessage(): void {
$message->setAccountId(1);
$message->setSendAt(null);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
@@ -148,7 +148,7 @@ public function testSaveMessage(): void {
$message->setAccountId(1);
$message->setSendAt(null);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_DRAFT);
@@ -199,7 +199,7 @@ public function testSaveMessageNoAttachments(): void {
$message->setAccountId(1);
$message->setSendAt(null);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_DRAFT);
@@ -246,7 +246,7 @@ public function testUpdateMessage(): void {
$message->setAccountId(1);
$message->setSendAt(null);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_DRAFT);
@@ -304,7 +304,7 @@ public function testConvertToOutboxMessage(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_OUTGOING);
@@ -362,7 +362,7 @@ public function testUpdateMessageNoAttachments(): void {
$message->setAccountId(1);
$message->setSendAt(null);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_DRAFT);
@@ -412,7 +412,7 @@ public function testSaveMessageError(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('laskdjhsakjh33233928@startdewvalley.com');
$message->setType(LocalMessage::TYPE_OUTGOING);
diff --git a/tests/Unit/Service/MailTransmissionTest.php b/tests/Unit/Service/MailTransmissionTest.php
index 3e43b6f538..0dbf103e33 100644
--- a/tests/Unit/Service/MailTransmissionTest.php
+++ b/tests/Unit/Service/MailTransmissionTest.php
@@ -86,7 +86,7 @@ public function testSendNewMessage() {
$account->method('getEMailAddress')->willReturn('test@user');
$localMessage = new LocalMessage();
$localMessage->setSubject('Test');
- $localMessage->setBody('Test');
+ $localMessage->setBodyPlain('Test');
$localMessage->setHtml(false);
$transport = $this->createMock(Horde_Mail_Transport::class);
@@ -115,7 +115,7 @@ public function testSendNewMessageSmimeError() {
$account->method('getEMailAddress')->willReturn('test@user');
$localMessage = new LocalMessage();
$localMessage->setSubject('Test');
- $localMessage->setBody('Test');
+ $localMessage->setBodyPlain('Test');
$localMessage->setHtml(false);
$transport = $this->createMock(Horde_Mail_Transport::class);
@@ -147,7 +147,7 @@ public function testSendMessageFromAlias() {
$alias->setAlias('a@d.com');
$localMessage = new LocalMessage();
$localMessage->setSubject('Test');
- $localMessage->setBody('Test');
+ $localMessage->setBodyPlain('Test');
$localMessage->setHtml(false);
$localMessage->setAliasId(1);
$transport = $this->createMock(Horde_Mail_Transport::class);
@@ -186,7 +186,7 @@ public function testSendNewMessageWithMessageAsAttachment() {
$account->method('getUserId')->willReturn($userId);
$localMessage = new LocalMessage();
$localMessage->setSubject('Test');
- $localMessage->setBody('Test');
+ $localMessage->setBodyPlain('Test');
$localMessage->setHtml(false);
$attachment = new LocalAttachment();
$attachment->setId(1);
@@ -236,7 +236,7 @@ public function testReplyToAnExistingMessage() {
$account->method('getEMailAddress')->willReturn('test@user');
$localMessage = new LocalMessage();
$localMessage->setSubject('Test');
- $localMessage->setBody('Test');
+ $localMessage->setBodyPlain('Test');
$localMessage->setHtml(false);
$localMessage->setInReplyToMessageId('321');
$repliedMessageUid = 321;
@@ -306,7 +306,7 @@ public function testSendLocalDraft(): void {
$localMessage->setAliasId(2);
$localMessage->setSendAt(123);
$localMessage->setSubject('subject');
- $localMessage->setBody('message');
+ $localMessage->setBodyHtml('message');
$localMessage->setHtml(true);
$localMessage->setInReplyToMessageId('abc');
$localMessage->setAttachments([]);
diff --git a/tests/Unit/Service/MimeMessageTest.php b/tests/Unit/Service/MimeMessageTest.php
index 683c57c2b7..5d1bce61d0 100644
--- a/tests/Unit/Service/MimeMessageTest.php
+++ b/tests/Unit/Service/MimeMessageTest.php
@@ -45,8 +45,8 @@ public function testTextPlain() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
$messageData->getBody(),
+ null,
[],
);
@@ -67,7 +67,7 @@ public function testMultipartAlternative() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
+ $messageData->getBody(),
$messageData->getBody(),
[],
);
@@ -95,7 +95,7 @@ public function testMultipartAlternativeEmptyContent() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
+ $messageData->getBody(),
$messageData->getBody(),
[],
);
@@ -129,7 +129,7 @@ public function testMultipartMixedAlternative() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
+ $messageData->getBody(),
$messageData->getBody(),
[$attachment1],
);
@@ -180,7 +180,7 @@ public function testMultipartMixedRelated() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
+ $messageData->getBody(),
$messageData->getBody(),
[$attachment1, $attachment2],
);
@@ -238,7 +238,7 @@ public function testMultipartAlternativeGreek() {
);
$part = $this->mimeMessage->build(
- $messageData->isHtml(),
+ null,
$messageData->getBody(),
[],
);
diff --git a/tests/Unit/Service/OutboxServiceTest.php b/tests/Unit/Service/OutboxServiceTest.php
index 3cbc78c5f8..d5d1f1a130 100644
--- a/tests/Unit/Service/OutboxServiceTest.php
+++ b/tests/Unit/Service/OutboxServiceTest.php
@@ -146,7 +146,7 @@ public function testGetMessage(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
@@ -174,7 +174,7 @@ public function testDeleteMessage(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
@@ -193,7 +193,7 @@ public function testSaveMessage(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$to = [
@@ -243,7 +243,7 @@ public function testSaveMessageNoAttachments(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$to = [
@@ -289,7 +289,7 @@ public function testUpdateMessage(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$old = Recipient::fromParams([
@@ -346,7 +346,7 @@ public function testUpdateMessageNoAttachments(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$old = Recipient::fromParams([
@@ -397,7 +397,7 @@ public function testSaveMessageError(): void {
$message->setAccountId(1);
$message->setSendAt($this->time->getTime());
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('laskdjhsakjh33233928@startdewvalley.com');
$to = [
@@ -514,7 +514,7 @@ public function testConvertToOutboxMessageNoRecipients(): void {
$sentAt = $this->time->getTime();
$message->setSendAt($sentAt);
$message->setSubject('Test');
- $message->setBody('Test Test Test');
+ $message->setBodyHtml('message
');
$message->setHtml(true);
$message->setInReplyToMessageId('abcd');
$message->setType(LocalMessage::TYPE_DRAFT);