Skip to content

Commit

Permalink
Provide an option to disable HTML emails
Browse files Browse the repository at this point in the history
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
  • Loading branch information
MorrisJobke committed Apr 18, 2018
1 parent fa65aaf commit 889c096
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 15 deletions.
19 changes: 12 additions & 7 deletions config/config.sample.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
*
Expand Down
1 change: 1 addition & 0 deletions lib/private/Mail/Mailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ public function __construct(IConfig $config,
* @return IMessage
*/
public function createMessage() {
$plainTextOnly = $this->config->getSystemValue('mail_send_plaintext_only', false);
return new Message(new \Swift_Message());
}

Expand Down
20 changes: 13 additions & 7 deletions lib/private/Mail/Message.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/**
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand All @@ -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;
}
}
5 changes: 5 additions & 0 deletions tests/lib/Mail/MailerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand Down
49 changes: 48 additions & 1 deletion tests/lib/Mail/MessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
namespace Test\Mail;

use OC\Mail\Message;
use OCP\Mail\IEMailTemplate;
use Swift_Message;
use Test\TestCase;

Expand Down Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -180,4 +181,50 @@ public function testSetHtmlBody() {
$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);
}

}

0 comments on commit 889c096

Please sign in to comment.