diff options
-rw-r--r-- | apps/dav/lib/CalDAV/Schedule/IMipPlugin.php | 10 | ||||
-rw-r--r-- | lib/private/Mail/Message.php | 16 | ||||
-rw-r--r-- | lib/public/Mail/IMessage.php | 12 |
3 files changed, 32 insertions, 6 deletions
diff --git a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php index d4c2976fc1a..bbe6b1ec740 100644 --- a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php +++ b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php @@ -285,14 +285,12 @@ class IMipPlugin extends SabreIMipPlugin { $message->useTemplate($template); - $vCalendar = $this->imipService->generateVCalendar($iTipMessage, $vEvent); - - $attachment = $this->mailer->createAttachment( - $vCalendar->serialize(), + $itip_msg = $iTipMessage->message->serialize(); + $message->attachInline( + $itip_msg, 'event.ics', - 'text/calendar; method=' . $iTipMessage->method + 'text/calendar; method=' . $iTipMessage->method, ); - $message->attach($attachment); try { $failed = $this->mailer->send($message); diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index 01beefcc6d6..35d6f96d33a 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -76,6 +76,22 @@ class Message implements IMessage { } /** + * Can be used to "attach content inline" as message parts with specific MIME type and encoding. + * {@inheritDoc} + * @since 26.0.0 + */ + public function attachInline(string $body, string $name, string $contentType = null): IMessage { + # To be sure this works with iCalendar messages, we encode with 8bit instead of + # quoted-printable encoding. We save the current encoder, replace the current + # encoder with an 8bit encoder and after we've finished, we reset the encoder + # to the previous one. Originally intended to be added after the message body, + # as it is curently unknown if all mail clients handle this properly if added + # before. + $this->symfonyEmail->embed($body, $name, $contentType); + return $this; + } + + /** * Converts the [['displayName' => 'email'], ['displayName2' => 'email2']] arrays to valid Adresses * * @param array $addresses Array of mail addresses diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 35a67bc4bb8..b3cc86839f1 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -40,6 +40,18 @@ interface IMessage { public function attach(IAttachment $attachment): IMessage; /** + * Can be used to "attach content inline" as message parts with specific MIME type and encoding. + * + * @param string $body body of the MIME part + * @param string $name the file name + * @param string|null $contentType MIME Content-Type (e.g. text/plain or text/calendar) + * + * @return IMessage + * @since 26.0.0 + */ + public function attachInline(string $body, string $name, string $contentType = null): IMessage; + + /** * Set the from address of this message. * * If no "From" address is used \OC\Mail\Mailer will use mail_from_address and mail_domain from config.php |