diff --git a/config/config.sample.php b/config/config.sample.php index 5f29933ec6507..1f86aebc5d90f 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -390,6 +390,18 @@ */ '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 @@ -983,13 +995,6 @@ */ '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 * diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index 0590f3db12a5f..542d452afe8c4 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -92,7 +92,8 @@ public function __construct(IConfig $config, * @return IMessage */ public function createMessage() { - 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 4d9458fbd4056..4b42b64035692 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -38,12 +38,12 @@ 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, $plainTextOnly) { $this->swiftMessage = $swiftMessage; + $this->plainTextOnly = $plainTextOnly; } /** @@ -245,7 +245,9 @@ public function getPlainBody() { * @return $this */ public function setHtmlBody($body) { - $this->swiftMessage->addPart($body, 'text/html'); + if (!$this->plainTextOnly) { + $this->swiftMessage->addPart($body, 'text/html'); + } return $this; } @@ -263,7 +265,9 @@ public function getSwiftMessage() { * @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; } @@ -274,7 +278,9 @@ public function setBody($body, $contentType) { public function useTemplate(IEMailTemplate $emailTemplate) { $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 f647b966f1fef..abe3054afd629 100644 --- a/tests/lib/Mail/MailerTest.php +++ b/tests/lib/Mail/MailerTest.php @@ -95,6 +95,11 @@ public function testGetInstanceSendmail() { } 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 691168ce24c6a..336b5e8c3cae2 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 @@ function setUp() { $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 @@ public function testSetHtmlBody() { $this->message->setHtmlBody('Fancy Body'); } + 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); + } + }