mirror of
https://github.com/Seldaek/monolog.git
synced 2025-10-25 10:36:33 +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;
|
||||
|
||||
Reference in New Issue
Block a user