From ce27e8cf34daea23117a9e5e0134957889aac332 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Oct 2017 15:39:22 +0200 Subject: [PATCH 1/4] Add attachment support to emails Signed-off-by: Joas Schilling --- lib/composer/composer/autoload_classmap.php | 2 + lib/composer/composer/autoload_static.php | 2 + lib/private/Mail/Attachment.php | 78 +++++++++++++++++++++ lib/private/Mail/Message.php | 20 ++++++ lib/public/Mail/IAttachment.php | 53 ++++++++++++++ lib/public/Mail/IMessage.php | 16 ++++- 6 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 lib/private/Mail/Attachment.php create mode 100644 lib/public/Mail/IAttachment.php diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 489b9b3dc14..4f3326e2d74 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -224,6 +224,7 @@ return array( 'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php', 'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php', + 'OCP\\Mail\\IAttachment' => $baseDir . '/lib/public/Mail/IAttachment.php', 'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php', 'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php', 'OCP\\Mail\\IMessage' => $baseDir . '/lib/public/Mail/IMessage.php', @@ -705,6 +706,7 @@ return array( 'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php', 'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php', + 'OC\\Mail\\Attachment' => $baseDir . '/lib/private/Mail/Attachment.php', 'OC\\Mail\\EMailTemplate' => $baseDir . '/lib/private/Mail/EMailTemplate.php', 'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php', 'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 1297f4606f6..b9c5c004164 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -254,6 +254,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php', 'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php', + 'OCP\\Mail\\IAttachment' => __DIR__ . '/../../..' . '/lib/public/Mail/IAttachment.php', 'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php', 'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php', 'OCP\\Mail\\IMessage' => __DIR__ . '/../../..' . '/lib/public/Mail/IMessage.php', @@ -735,6 +736,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php', 'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php', + 'OC\\Mail\\Attachment' => __DIR__ . '/../../..' . '/lib/private/Mail/Attachment.php', 'OC\\Mail\\EMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/EMailTemplate.php', 'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php', 'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php', diff --git a/lib/private/Mail/Attachment.php b/lib/private/Mail/Attachment.php new file mode 100644 index 00000000000..7b85ad1dbb9 --- /dev/null +++ b/lib/private/Mail/Attachment.php @@ -0,0 +1,78 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OC\Mail; + +use OCP\Mail\IAttachment; + +/** + * Class Attachment + * + * @package OC\Mail + * @since 13.0.0 + */ +class Attachment implements IAttachment { + + /** @var \Swift_Mime_Attachment */ + protected $swiftAttachment; + + public function __construct(\Swift_Mime_Attachment $attachment) { + $this->swiftAttachment = $attachment; + } + + /** + * @param string $filename + * @return $this + * @since 13.0.0 + */ + public function setFilename($filename) { + $this->swiftAttachment->setFilename($filename); + return $this; + } + + /** + * @param string $contentType + * @return $this + * @since 13.0.0 + */ + public function setContentType($contentType) { + $this->swiftAttachment->setContentType($contentType); + return $this; + } + + /** + * @param string $body + * @return $this + * @since 13.0.0 + */ + public function setBody($body) { + $this->swiftAttachment->setBody($body); + return $this; + } + + /** + * @return \Swift_Mime_Attachment + */ + public function getSwiftAttachment() { + return $this->swiftAttachment; + } + +} diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index b4d1e4dbe7a..35c2c2d84ea 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -23,6 +23,7 @@ namespace OC\Mail; +use OCP\Mail\IAttachment; use OCP\Mail\IEMailTemplate; use OCP\Mail\IMessage; use Swift_Message; @@ -43,6 +44,25 @@ class Message implements IMessage { $this->swiftMessage = $swiftMessage; } + /** + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachment() { + return new Attachment(\Swift_Attachment::newInstance()); + } + + /** + * @param IAttachment $attachment + * @return $this + * @since 13.0.0 + */ + public function attach(IAttachment $attachment) { + /** @var Attachment $attachment */ + $this->swiftMessage->attach($attachment->getSwiftAttachment()); + return $this; + } + /** * SwiftMailer does currently not work with IDN domains, this function therefore converts the domains * FIXME: Remove this once SwiftMailer supports IDN diff --git a/lib/public/Mail/IAttachment.php b/lib/public/Mail/IAttachment.php new file mode 100644 index 00000000000..32348e7a309 --- /dev/null +++ b/lib/public/Mail/IAttachment.php @@ -0,0 +1,53 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCP\Mail; + +/** + * Interface IAttachment + * + * @package OCP\Mail + * @since 13.0.0 + */ +interface IAttachment { + + /** + * @param string $filename + * @return $this + * @since 13.0.0 + */ + public function setFilename($filename); + + /** + * @param string $contentType + * @return $this + * @since 13.0.0 + */ + public function setContentType($contentType); + + /** + * @param string $body + * @return $this + * @since 13.0.0 + */ + public function setBody($body); + +} diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 20e4ea19c4c..7f061cece05 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -22,12 +22,26 @@ namespace OCP\Mail; /** - * Class Message + * Interface IMessage * * @package OCP\Mail * @since 13.0.0 */ interface IMessage { + + /** + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachment(); + + /** + * @param IAttachment $attachment + * @return $this + * @since 13.0.0 + */ + public function attach(IAttachment $attachment); + /** * Set the from address of this message. * From dcb322a6b330b7bd797f8a9faf63114129c56f75 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 19 Oct 2017 11:05:47 +0200 Subject: [PATCH 2/4] Extend the API with teh parameters from Swift Signed-off-by: Joas Schilling --- lib/private/Mail/Message.php | 17 +++++++++++++++-- lib/public/Mail/IMessage.php | 13 ++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index 35c2c2d84ea..7b198e91b36 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -45,11 +45,24 @@ class Message implements IMessage { } /** + * @param string $data + * @param string $filename + * @param string $contentType * @return IAttachment * @since 13.0.0 */ - public function createAttachment() { - return new Attachment(\Swift_Attachment::newInstance()); + public function createAttachment($data = null, $filename = null, $contentType = null) { + return new Attachment(\Swift_Attachment::newInstance($data, $filename, $contentType)); + } + + /** + * @param string $path + * @param string $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachmentFromPath($path, $contentType = null) { + return new Attachment(\Swift_Attachment::fromPath($path, $contentType)); } /** diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 7f061cece05..6ae50ca8842 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -30,10 +30,21 @@ namespace OCP\Mail; interface IMessage { /** + * @param string $data + * @param string $filename + * @param string $contentType * @return IAttachment * @since 13.0.0 */ - public function createAttachment(); + public function createAttachment($data = null, $filename = null, $contentType = null); + + /** + * @param string $path + * @param string $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachmentFromPath($path, $contentType = null); /** * @param IAttachment $attachment From 65e938c4fdbda3c88e79c83e43e7ea8a22789408 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 19 Oct 2017 11:18:21 +0200 Subject: [PATCH 3/4] Fix docs Signed-off-by: Joas Schilling --- lib/private/Mail/Message.php | 8 ++++---- lib/public/Mail/IMessage.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index 7b198e91b36..fb16c59c51e 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -45,9 +45,9 @@ class Message implements IMessage { } /** - * @param string $data - * @param string $filename - * @param string $contentType + * @param string|null $data + * @param string|null $filename + * @param string|null $contentType * @return IAttachment * @since 13.0.0 */ @@ -57,7 +57,7 @@ class Message implements IMessage { /** * @param string $path - * @param string $contentType + * @param string|null $contentType * @return IAttachment * @since 13.0.0 */ diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 6ae50ca8842..45c01b7079f 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -30,9 +30,9 @@ namespace OCP\Mail; interface IMessage { /** - * @param string $data - * @param string $filename - * @param string $contentType + * @param string|null $data + * @param string|null $filename + * @param string|null $contentType * @return IAttachment * @since 13.0.0 */ @@ -40,7 +40,7 @@ interface IMessage { /** * @param string $path - * @param string $contentType + * @param string|null $contentType * @return IAttachment * @since 13.0.0 */ From 6a035bd0a0ea3f7a8811a2a970dcb22450fa26e0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 25 Oct 2017 09:26:57 +0200 Subject: [PATCH 4/4] Move attachment creators to mailer class Signed-off-by: Joas Schilling --- lib/private/Mail/Mailer.php | 22 ++++++++++++++++++++++ lib/private/Mail/Message.php | 21 --------------------- lib/public/Mail/IMailer.php | 17 +++++++++++++++++ lib/public/Mail/IMessage.php | 17 ----------------- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index 43fdb07b810..ad59d640b3e 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -26,6 +26,7 @@ use OCP\Defaults; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Mail\IAttachment; use OCP\Mail\IEMailTemplate; use OCP\Mail\IMailer; use OCP\ILogger; @@ -91,6 +92,27 @@ class Mailer implements IMailer { return new Message(new \Swift_Message()); } + /** + * @param string|null $data + * @param string|null $filename + * @param string|null $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachment($data = null, $filename = null, $contentType = null) { + return new Attachment(\Swift_Attachment::newInstance($data, $filename, $contentType)); + } + + /** + * @param string $path + * @param string|null $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachmentFromPath($path, $contentType = null) { + return new Attachment(\Swift_Attachment::fromPath($path, $contentType)); + } + /** * Creates a new email template object * diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index fb16c59c51e..dcd4a66e996 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -44,27 +44,6 @@ class Message implements IMessage { $this->swiftMessage = $swiftMessage; } - /** - * @param string|null $data - * @param string|null $filename - * @param string|null $contentType - * @return IAttachment - * @since 13.0.0 - */ - public function createAttachment($data = null, $filename = null, $contentType = null) { - return new Attachment(\Swift_Attachment::newInstance($data, $filename, $contentType)); - } - - /** - * @param string $path - * @param string|null $contentType - * @return IAttachment - * @since 13.0.0 - */ - public function createAttachmentFromPath($path, $contentType = null) { - return new Attachment(\Swift_Attachment::fromPath($path, $contentType)); - } - /** * @param IAttachment $attachment * @return $this diff --git a/lib/public/Mail/IMailer.php b/lib/public/Mail/IMailer.php index 35189c22a69..10096548256 100644 --- a/lib/public/Mail/IMailer.php +++ b/lib/public/Mail/IMailer.php @@ -53,6 +53,23 @@ interface IMailer { */ public function createMessage(); + /** + * @param string|null $data + * @param string|null $filename + * @param string|null $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachment($data = null, $filename = null, $contentType = null); + + /** + * @param string $path + * @param string|null $contentType + * @return IAttachment + * @since 13.0.0 + */ + public function createAttachmentFromPath($path, $contentType = null); + /** * Creates a new email template object * diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 45c01b7079f..e82b4ff93a9 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -29,23 +29,6 @@ namespace OCP\Mail; */ interface IMessage { - /** - * @param string|null $data - * @param string|null $filename - * @param string|null $contentType - * @return IAttachment - * @since 13.0.0 - */ - public function createAttachment($data = null, $filename = null, $contentType = null); - - /** - * @param string $path - * @param string|null $contentType - * @return IAttachment - * @since 13.0.0 - */ - public function createAttachmentFromPath($path, $contentType = null); - /** * @param IAttachment $attachment * @return $this