1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-06 13:16:39 +02:00

Auto-detecting of mime type for emails and switched to HtmlFormatter for emails by default, fixes #577

This commit is contained in:
Jordi Boggiano
2016-05-26 22:41:26 +01:00
parent af7c0a7bda
commit 8a45ed75cc
7 changed files with 47 additions and 7 deletions

View File

@@ -11,6 +11,9 @@
namespace Monolog\Handler;
use Monolog\Formatter\FormatterInterface;
use Monolog\Formatter\HtmlFormatter;
/**
* Base class for all mail handlers
*
@@ -64,4 +67,19 @@ abstract class MailHandler extends AbstractProcessingHandler
return $highestRecord;
}
protected function isHtmlBody($body)
{
return substr($body, 0, 1) === '<';
}
/**
* Gets the default formatter.
*
* @return FormatterInterface
*/
protected function getDefaultFormatter(): FormatterInterface
{
return new HtmlFormatter();
}
}

View File

@@ -48,8 +48,13 @@ class MandrillHandler extends MailHandler
*/
protected function send($content, array $records)
{
$mime = null;
if ($this->isHtmlBody($content)) {
$mime = 'text/html';
}
$message = clone $this->message;
$message->setBody($content);
$message->setBody($content, $mime);
$message->setDate(time());
$ch = curl_init();

View File

@@ -56,7 +56,7 @@ class NativeMailerHandler extends MailHandler
* The Content-type for the message
* @var string
*/
protected $contentType = 'text/plain';
protected $contentType;
/**
* The encoding for the message
@@ -117,10 +117,15 @@ class NativeMailerHandler extends MailHandler
*/
protected function send($content, array $records)
{
$content = wordwrap($content, $this->maxColumnWidth);
$contentType = $this->getContentType() ?: ($this->isHtmlBody($content) ? 'text/html' : 'text/plain');
if ($contentType !== 'text/html') {
$content = wordwrap($content, $this->maxColumnWidth);
}
$headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n");
$headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n";
if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) {
$headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n";
if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) {
$headers .= 'MIME-Version: 1.0' . "\r\n";
}

View File

@@ -82,9 +82,14 @@ class SendGridHandler extends MailHandler
$message['to[]'] = $recipient;
}
$message['subject'] = $this->subject;
$message['text'] = $content;
$message['date'] = date('r');
if ($this->isHtmlBody($content)) {
$message['html'] = $content;
} else {
$message['text'] = $content;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json');
curl_setopt($ch, CURLOPT_POST, 1);

View File

@@ -72,7 +72,12 @@ class SwiftMailerHandler extends MailHandler
$message->setSubject($subjectFormatter->format($this->getHighestRecord($records)));
}
$message->setBody($content);
$mime = null;
if ($this->isHtmlBody($content)) {
$mime = 'text/html';
}
$message->setBody($content, $mime);
$message->setDate(time());
return $message;

View File

@@ -61,6 +61,7 @@ class MailHandlerTest extends TestCase
public function testHandle()
{
$handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler');
$handler->setFormatter(new \Monolog\Formatter\LineFormatter);
$record = $this->getRecord();
$records = [$record];

View File

@@ -78,6 +78,7 @@ class NativeMailerHandlerTest extends TestCase
$from = 'receiver@example.org';
$mailer = new NativeMailerHandler($to, $subject, $from);
$mailer->setFormatter(new \Monolog\Formatter\LineFormatter);
$mailer->handleBatch([]);
// batch is empty, nothing sent