Skip to content

Commit

Permalink
Fix calendar emails to be outlook compatible
Browse files Browse the repository at this point in the history
Signed-off-by: Anna Larch <anna@nextcloud.com>
  • Loading branch information
miaulalala committed Feb 20, 2023
1 parent 3204f97 commit 460a8b2
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
10 changes: 4 additions & 6 deletions apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -285,14 +285,12 @@ public function schedule(Message $iTipMessage) {

$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);
Expand Down
20 changes: 20 additions & 0 deletions lib/private/Mail/Message.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,26 @@ public function attach(IAttachment $attachment): IMessage {
return $this;
}

/**
* Can be used to "attach content inline" as message parts with specific MIME type and encoding.
*
* @param $body: body of the MIME part
* @param $content-type: MIME Content-Type (e.g. text/plain or text/calendar)
* @param $charset: Character Set (e.g. UTF-8)
* @return IMessage
* @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
*
Expand Down
11 changes: 11 additions & 0 deletions lib/public/Mail/IMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ 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 $body: body of the MIME part
* @param $content-type: MIME Content-Type (e.g. text/plain or text/calendar)
* @param $charset: Character Set (e.g. UTF-8)
* @return IMessage
* @since 26.0.0
*/
public function attachInline(string $body, string $name, string $contentType = null): IMessage;

/**
* Set the from address of this message.
*
Expand Down

0 comments on commit 460a8b2

Please sign in to comment.