diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-04-16 22:06:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-16 22:06:09 +0200 |
commit | 8c085e76451fb467732336a14dccd3bda8a47869 (patch) | |
tree | 801e215922f4337ce3fb068ec3cab5f96ef79b2e | |
parent | d93948426cc1ed1917706ab1e918a338829986eb (diff) | |
parent | 9ee1febf629fa4180c483fb4a2c82559f5c50392 (diff) | |
download | nextcloud-server-8c085e76451fb467732336a14dccd3bda8a47869.tar.gz nextcloud-server-8c085e76451fb467732336a14dccd3bda8a47869.zip |
Merge pull request #9205 from nextcloud/plaintext-emails
Provide an option to disable HTML emails
-rw-r--r-- | config/config.sample.php | 19 | ||||
-rw-r--r-- | lib/private/Mail/Mailer.php | 3 | ||||
-rw-r--r-- | lib/private/Mail/Message.php | 20 | ||||
-rw-r--r-- | tests/lib/Mail/MailerTest.php | 5 | ||||
-rw-r--r-- | tests/lib/Mail/MessageTest.php | 49 |
5 files changed, 80 insertions, 16 deletions
diff --git a/config/config.sample.php b/config/config.sample.php index d1341feb0d2..b0ed2e7aa67 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -390,6 +390,18 @@ $CONFIG = array( */ 'mail_smtppassword' => '', +/** + * Replaces the default mail template layout. This can be utilized if the + * options to modify the mail texts with the theming app is not enough. + * The class must extend ``\OC\Mail\EMailTemplate`` + */ +'mail_template_class' => '\OC\Mail\EMailTemplate', + +/** + * Email will be send by default with an HTML and a plain text body. This option + * allows to only send plain text emails. + */ +'mail_send_plaintext_only' => false, /** * Proxy Configurations @@ -986,13 +998,6 @@ $CONFIG = array( 'systemtags.managerFactory' => '\OC\SystemTag\ManagerFactory', /** - * Replaces the default mail template layout. This can be utilized if the - * options to modify the mail texts with the theming app is not enough. - * The class must extend ``\OC\Mail\EMailTemplate`` - */ -'mail_template_class' => '\OC\Mail\EMailTemplate', - -/** * Maintenance * * These options are for halting user activity when you are performing server diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index d55546769ee..001f7bd75c9 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -93,7 +93,8 @@ class Mailer implements IMailer { * @return IMessage */ public function createMessage(): IMessage { - return new Message(new \Swift_Message()); + $plainTextOnly = $this->config->getSystemValue('mail_send_plaintext_only', false); + return new Message(new \Swift_Message(), $plainTextOnly); } /** diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index 7c7ecae8578..8a13e2c108c 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -39,12 +39,12 @@ use Swift_Message; class Message implements IMessage { /** @var Swift_Message */ private $swiftMessage; + /** @var bool */ + private $plainTextOnly; - /** - * @param Swift_Message $swiftMessage - */ - public function __construct(Swift_Message $swiftMessage) { + public function __construct(Swift_Message $swiftMessage, bool $plainTextOnly) { $this->swiftMessage = $swiftMessage; + $this->plainTextOnly = $plainTextOnly; } /** @@ -246,7 +246,9 @@ class Message implements IMessage { * @return $this */ public function setHtmlBody($body) { - $this->swiftMessage->addPart($body, 'text/html'); + if (!$this->plainTextOnly) { + $this->swiftMessage->addPart($body, 'text/html'); + } return $this; } @@ -264,7 +266,9 @@ class Message implements IMessage { * @return $this */ public function setBody($body, $contentType) { - $this->swiftMessage->setBody($body, $contentType); + if (!$this->plainTextOnly || $contentType !== 'text/html') { + $this->swiftMessage->setBody($body, $contentType); + } return $this; } @@ -275,7 +279,9 @@ class Message implements IMessage { public function useTemplate(IEMailTemplate $emailTemplate): IMessage { $this->setSubject($emailTemplate->renderSubject()); $this->setPlainBody($emailTemplate->renderText()); - $this->setHtmlBody($emailTemplate->renderHtml()); + if (!$this->plainTextOnly) { + $this->setHtmlBody($emailTemplate->renderHtml()); + } return $this; } } diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php index b0955a5d2fe..2dd4bca5190 100644 --- a/tests/lib/Mail/MailerTest.php +++ b/tests/lib/Mail/MailerTest.php @@ -95,6 +95,11 @@ class MailerTest extends TestCase { } public function testCreateMessage() { + $this->config + ->expects($this->any()) + ->method('getSystemValue') + ->with('mail_send_plaintext_only', false) + ->will($this->returnValue(false)); $this->assertInstanceOf('\OC\Mail\Message', $this->mailer->createMessage()); } diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php index 78fd5f1bb8b..4b656938e48 100644 --- a/tests/lib/Mail/MessageTest.php +++ b/tests/lib/Mail/MessageTest.php @@ -9,6 +9,7 @@ namespace Test\Mail; use OC\Mail\Message; +use OCP\Mail\IEMailTemplate; use Swift_Message; use Test\TestCase; @@ -36,7 +37,7 @@ class MessageTest extends TestCase { $this->swiftMessage = $this->getMockBuilder('\Swift_Message') ->disableOriginalConstructor()->getMock(); - $this->message = new Message($this->swiftMessage); + $this->message = new Message($this->swiftMessage, false); } /** @@ -180,4 +181,50 @@ class MessageTest extends TestCase { $this->message->setHtmlBody('<blink>Fancy Body</blink>'); } + public function testPlainTextRenderOption() { + /** @var \PHPUnit_Framework_MockObject_MockObject|Swift_Message $swiftMessage */ + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor()->getMock(); + /** @var \PHPUnit_Framework_MockObject_MockObject|IEMailTemplate $template */ + $template = $this->getMockBuilder('\OCP\Mail\IEMailTemplate') + ->disableOriginalConstructor()->getMock(); + + $message = new Message($swiftMessage, true); + + $template + ->expects($this->never()) + ->method('renderHTML'); + $template + ->expects($this->once()) + ->method('renderText'); + $template + ->expects($this->once()) + ->method('renderSubject'); + + $message->useTemplate($template); + } + + public function testBothRenderingOptions() { + /** @var \PHPUnit_Framework_MockObject_MockObject|Swift_Message $swiftMessage */ + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor()->getMock(); + /** @var \PHPUnit_Framework_MockObject_MockObject|IEMailTemplate $template */ + $template = $this->getMockBuilder('\OCP\Mail\IEMailTemplate') + ->disableOriginalConstructor()->getMock(); + + $message = new Message($swiftMessage, false); + + $template + ->expects($this->once()) + ->method('renderHTML'); + $template + ->expects($this->once()) + ->method('renderText'); + $template + ->expects($this->once()) + ->method('renderSubject'); + + $message->useTemplate($template); + } + } |