Merge pull request #6867 from nextcloud/imessage-attachments

Add attachment support to emails
This commit is contained in:
Georg Ehrke 2017-10-30 18:33:50 +01:00 committed by GitHub
commit c8323f822d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 195 additions and 1 deletions

View File

@ -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',
@ -706,6 +707,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',

View File

@ -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',
@ -736,6 +737,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',

View File

@ -0,0 +1,78 @@
<?php
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
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;
}
}

View File

@ -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
*

View File

@ -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,17 @@ class Message implements IMessage {
$this->swiftMessage = $swiftMessage;
}
/**
* @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

View File

@ -0,0 +1,53 @@
<?php
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
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);
}

View File

@ -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
*

View File

@ -22,12 +22,20 @@
namespace OCP\Mail;
/**
* Class Message
* Interface IMessage
*
* @package OCP\Mail
* @since 13.0.0
*/
interface IMessage {
/**
* @param IAttachment $attachment
* @return $this
* @since 13.0.0
*/
public function attach(IAttachment $attachment);
/**
* Set the from address of this message.
*