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, ''; } 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);