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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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";
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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];
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user