Skip to content

Commit 6d6309c

Browse files
committed
Add support for Monolog 2.x
1 parent 37cfcaf commit 6d6309c

5 files changed

+187
-77
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ MonologPHPMailer is a [PHPMailer][link-phpmailer] handler for [Monolog][link-mon
2020

2121
### Requirements
2222

23-
MonologPHPMailer requires *[PHP][link-php] 5.5.0* or higher, *[Monolog][link-monolog] 1.x* and *[PHPMailer][link-phpmailer] 6.x*. Monolog 2.x **is not** supported, but it will be supported in the future.
23+
MonologPHPMailer requires *[PHP][link-php] 5.5.0* or higher, *[Monolog][link-monolog] 1.x or 2.x* and *[PHPMailer][link-phpmailer] 6.x*.
2424

2525
### Using Composer
2626

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "filips123/monolog-phpmailer",
3-
"description": "PHPMailer handler for Monolog.",
3+
"description": "PHPMailer handler for Monolog",
44
"keywords": [
55
"log",
66
"logging",

src/PHPMailerHandler.php

+7-75
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
<?php
22

3-
namespace MonologPHPMailer;
4-
5-
use Monolog\Formatter\FormatterInterface;
6-
use Monolog\Formatter\LineFormatter;
7-
use Monolog\Handler\MailHandler;
8-
use Monolog\Logger;
9-
use PHPMailer\PHPMailer\PHPMailer;
10-
113
/**
12-
* PHPMailer handler for Monolog.
4+
* Loads required handler.
135
*
14-
* It uses [PHPMailer](https://github.com/PHPMailer/PHPMailer/) to send emails.
6+
* It loads required handler class for Monolog 1.x or 2.x depending on its version.
157
*
168
* @since 1.0.0
179
*
@@ -21,71 +13,11 @@
2113
*
2214
* @package MonologPHPMailer
2315
*/
24-
class PHPMailerHandler extends MailHandler
25-
{
26-
/**
27-
* A PHPMailer instance.
28-
*
29-
* @var PHPMailer $mailer
30-
*/
31-
protected $mailer;
32-
33-
/**
34-
* Constructs the PHPMailer handler.
35-
*
36-
* @param PHPMailer $mailer A PHPMailer instance to use.
37-
* @param int|string $level The minimum logging level at which this handler will be triggered.
38-
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not.
39-
*
40-
* @return void
41-
*/
42-
public function __construct(PHPMailer $mailer, $level = Logger::ERROR, $bubble = true)
43-
{
44-
parent::__construct($level, $bubble);
45-
$this->mailer = $mailer;
46-
}
47-
48-
/**
49-
* Sends a mail with the given content.
50-
*
51-
* @param string $content Formatted email body to be sent.
52-
* @param array $records The array of log records that formed this content.
53-
*
54-
* @return void
55-
*/
56-
protected function send($content, array $records)
57-
{
58-
$mailer = $this->buildMessage($content, $records);
59-
$mailer->send();
60-
}
6116

62-
/**
63-
* Builds a message to be sent.
64-
*
65-
* @param string $content Formatted email body to be sent.
66-
* @param array $records The array of log records that formed this content.
67-
*
68-
* @return PHPMailer Builded message.
69-
*/
70-
public function buildMessage($content, $records)
71-
{
72-
$mailer = clone $this->mailer;
73-
74-
if (substr($content, 0, 1) == '<') {
75-
$mailer->isHTML(true);
76-
}
77-
78-
// @codingStandardsIgnoreStart
79-
if ($records) {
80-
$subjectFormatter = new LineFormatter($mailer->Subject);
81-
$mailer->Subject = $subjectFormatter->format($this->getHighestRecord($records));
82-
}
83-
// @codingStandardsIgnoreEnd
84-
85-
// @codingStandardsIgnoreStart
86-
$mailer->Body = $content;
87-
// @codingStandardsIgnoreEnd
17+
use Monolog\Logger;
8818

89-
return $mailer;
90-
}
19+
if (Logger::API == 1) {
20+
class_alias('MonologPHPMailer\PHPMailerHandler1', 'MonologPHPMailer\PHPMailerHandler');
21+
} else {
22+
class_alias('MonologPHPMailer\PHPMailerHandler2', 'MonologPHPMailer\PHPMailerHandler');
9123
}

src/PHPMailerHandler1.php

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
namespace MonologPHPMailer;
4+
5+
use Monolog\Formatter\FormatterInterface;
6+
use Monolog\Formatter\LineFormatter;
7+
use Monolog\Handler\MailHandler;
8+
use Monolog\Logger;
9+
use PHPMailer\PHPMailer\PHPMailer;
10+
11+
/**
12+
* PHPMailer handler for Monolog 1.x.
13+
*
14+
* It uses [PHPMailer](https://github.com/PHPMailer/PHPMailer/) to send emails.
15+
*
16+
* @since 1.0.0
17+
*
18+
* @author Filip Š <[email protected]>
19+
*
20+
* @license MIT
21+
*
22+
* @package MonologPHPMailer
23+
*/
24+
class PHPMailerHandler1 extends MailHandler
25+
{
26+
/**
27+
* A PHPMailer instance.
28+
*
29+
* @var PHPMailer $mailer
30+
*/
31+
protected $mailer;
32+
33+
/**
34+
* Constructs the PHPMailer handler.
35+
*
36+
* @param PHPMailer $mailer A PHPMailer instance to use.
37+
* @param int|string $level The minimum logging level at which this handler will be triggered.
38+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not.
39+
*/
40+
public function __construct(PHPMailer $mailer, $level = Logger::ERROR, $bubble = true)
41+
{
42+
parent::__construct($level, $bubble);
43+
$this->mailer = $mailer;
44+
}
45+
46+
/**
47+
* Sends a mail with the given content.
48+
*
49+
* @param string $content Formatted email body to be sent.
50+
* @param array $records The array of log records that formed this content.
51+
*
52+
* @return void
53+
*/
54+
protected function send($content, array $records)
55+
{
56+
$mailer = $this->buildMessage($content, $records);
57+
$mailer->send();
58+
}
59+
60+
/**
61+
* Builds a message to be sent.
62+
*
63+
* @param string $content Formatted email body to be sent.
64+
* @param array $records The array of log records that formed this content.
65+
*
66+
* @return PHPMailer Builded message.
67+
*/
68+
public function buildMessage($content, array $records)
69+
{
70+
$mailer = clone $this->mailer;
71+
72+
if (substr($content, 0, 1) == '<') {
73+
$mailer->isHTML(true);
74+
}
75+
76+
// @codingStandardsIgnoreStart
77+
if ($records) {
78+
$subjectFormatter = new LineFormatter($mailer->Subject);
79+
$mailer->Subject = $subjectFormatter->format($this->getHighestRecord($records));
80+
}
81+
// @codingStandardsIgnoreEnd
82+
83+
// @codingStandardsIgnoreStart
84+
$mailer->Body = $content;
85+
// @codingStandardsIgnoreEnd
86+
87+
return $mailer;
88+
}
89+
}

src/PHPMailerHandler2.php

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
namespace MonologPHPMailer;
4+
5+
use Monolog\Formatter\FormatterInterface;
6+
use Monolog\Formatter\LineFormatter;
7+
use Monolog\Handler\MailHandler;
8+
use Monolog\Logger;
9+
use PHPMailer\PHPMailer\PHPMailer;
10+
11+
/**
12+
* PHPMailer handler for Monolog 2.x.
13+
*
14+
* It uses [PHPMailer](https://github.com/PHPMailer/PHPMailer/) to send emails.
15+
*
16+
* @since 1.0.0
17+
*
18+
* @author Filip Š <[email protected]>
19+
*
20+
* @license MIT
21+
*
22+
* @package MonologPHPMailer
23+
*/
24+
class PHPMailerHandler2 extends MailHandler
25+
{
26+
/**
27+
* A PHPMailer instance.
28+
*
29+
* @var PHPMailer $mailer
30+
*/
31+
protected $mailer;
32+
33+
/**
34+
* Constructs the PHPMailer handler.
35+
*
36+
* @param PHPMailer $mailer A PHPMailer instance to use.
37+
* @param int|string $level The minimum logging level at which this handler will be triggered.
38+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not.
39+
*/
40+
public function __construct(PHPMailer $mailer, $level = Logger::ERROR, bool $bubble = true)
41+
{
42+
parent::__construct($level, $bubble);
43+
$this->mailer = $mailer;
44+
}
45+
46+
/**
47+
* Sends a mail with the given content.
48+
*
49+
* @param string $content Formatted email body to be sent.
50+
* @param array $records The array of log records that formed this content.
51+
*
52+
* @return void
53+
*/
54+
protected function send(string $content, array $records): void
55+
{
56+
$mailer = $this->buildMessage($content, $records);
57+
$mailer->send();
58+
}
59+
60+
/**
61+
* Builds a message to be sent.
62+
*
63+
* @param string $content Formatted email body to be sent.
64+
* @param array $records The array of log records that formed this content.
65+
*
66+
* @return PHPMailer Builded message.
67+
*/
68+
public function buildMessage(string $content, array $records): PHPMailer
69+
{
70+
$mailer = clone $this->mailer;
71+
72+
if (substr($content, 0, 1) == '<') {
73+
$mailer->isHTML(true);
74+
}
75+
76+
// @codingStandardsIgnoreStart
77+
if ($records) {
78+
$subjectFormatter = new LineFormatter($mailer->Subject);
79+
$mailer->Subject = $subjectFormatter->format($this->getHighestRecord($records));
80+
}
81+
// @codingStandardsIgnoreEnd
82+
83+
// @codingStandardsIgnoreStart
84+
$mailer->Body = $content;
85+
// @codingStandardsIgnoreEnd
86+
87+
return $mailer;
88+
}
89+
}

0 commit comments

Comments
 (0)