mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-07 13:46:38 +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;
|
namespace Monolog\Handler;
|
||||||
|
|
||||||
|
use Monolog\Formatter\FormatterInterface;
|
||||||
|
use Monolog\Formatter\HtmlFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for all mail handlers
|
* Base class for all mail handlers
|
||||||
*
|
*
|
||||||
@@ -64,4 +67,19 @@ abstract class MailHandler extends AbstractProcessingHandler
|
|||||||
|
|
||||||
return $highestRecord;
|
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)
|
protected function send($content, array $records)
|
||||||
{
|
{
|
||||||
|
$mime = null;
|
||||||
|
if ($this->isHtmlBody($content)) {
|
||||||
|
$mime = 'text/html';
|
||||||
|
}
|
||||||
|
|
||||||
$message = clone $this->message;
|
$message = clone $this->message;
|
||||||
$message->setBody($content);
|
$message->setBody($content, $mime);
|
||||||
$message->setDate(time());
|
$message->setDate(time());
|
||||||
|
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
@@ -56,7 +56,7 @@ class NativeMailerHandler extends MailHandler
|
|||||||
* The Content-type for the message
|
* The Content-type for the message
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $contentType = 'text/plain';
|
protected $contentType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The encoding for the message
|
* The encoding for the message
|
||||||
@@ -117,10 +117,15 @@ class NativeMailerHandler extends MailHandler
|
|||||||
*/
|
*/
|
||||||
protected function send($content, array $records)
|
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 = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n");
|
||||||
$headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n";
|
$headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n";
|
||||||
if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) {
|
if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) {
|
||||||
$headers .= 'MIME-Version: 1.0' . "\r\n";
|
$headers .= 'MIME-Version: 1.0' . "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -82,9 +82,14 @@ class SendGridHandler extends MailHandler
|
|||||||
$message['to[]'] = $recipient;
|
$message['to[]'] = $recipient;
|
||||||
}
|
}
|
||||||
$message['subject'] = $this->subject;
|
$message['subject'] = $this->subject;
|
||||||
$message['text'] = $content;
|
|
||||||
$message['date'] = date('r');
|
$message['date'] = date('r');
|
||||||
|
|
||||||
|
if ($this->isHtmlBody($content)) {
|
||||||
|
$message['html'] = $content;
|
||||||
|
} else {
|
||||||
|
$message['text'] = $content;
|
||||||
|
}
|
||||||
|
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json');
|
curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json');
|
||||||
curl_setopt($ch, CURLOPT_POST, 1);
|
curl_setopt($ch, CURLOPT_POST, 1);
|
||||||
|
@@ -72,7 +72,12 @@ class SwiftMailerHandler extends MailHandler
|
|||||||
$message->setSubject($subjectFormatter->format($this->getHighestRecord($records)));
|
$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());
|
$message->setDate(time());
|
||||||
|
|
||||||
return $message;
|
return $message;
|
||||||
|
@@ -61,6 +61,7 @@ class MailHandlerTest extends TestCase
|
|||||||
public function testHandle()
|
public function testHandle()
|
||||||
{
|
{
|
||||||
$handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler');
|
$handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler');
|
||||||
|
$handler->setFormatter(new \Monolog\Formatter\LineFormatter);
|
||||||
|
|
||||||
$record = $this->getRecord();
|
$record = $this->getRecord();
|
||||||
$records = [$record];
|
$records = [$record];
|
||||||
|
@@ -78,6 +78,7 @@ class NativeMailerHandlerTest extends TestCase
|
|||||||
$from = 'receiver@example.org';
|
$from = 'receiver@example.org';
|
||||||
|
|
||||||
$mailer = new NativeMailerHandler($to, $subject, $from);
|
$mailer = new NativeMailerHandler($to, $subject, $from);
|
||||||
|
$mailer->setFormatter(new \Monolog\Formatter\LineFormatter);
|
||||||
$mailer->handleBatch([]);
|
$mailer->handleBatch([]);
|
||||||
|
|
||||||
// batch is empty, nothing sent
|
// batch is empty, nothing sent
|
||||||
|
Reference in New Issue
Block a user