diff options
Diffstat (limited to 'plugins/ScheduledReports')
7 files changed, 119 insertions, 92 deletions
diff --git a/plugins/ScheduledReports/ReportEmailGenerator.php b/plugins/ScheduledReports/ReportEmailGenerator.php index 117d624654..d51f9df098 100644 --- a/plugins/ScheduledReports/ReportEmailGenerator.php +++ b/plugins/ScheduledReports/ReportEmailGenerator.php @@ -10,8 +10,6 @@ namespace Piwik\Plugins\ScheduledReports; use Piwik\Mail; -use Piwik\Piwik; -use Zend_Mime; abstract class ReportEmailGenerator { @@ -22,23 +20,18 @@ abstract class ReportEmailGenerator $mail->setSubject($report->getReportDescription()); if (!empty($customReplyTo)) { - $mail->setReplyTo($customReplyTo['email'], $customReplyTo['login']); + $mail->addReplyTo($customReplyTo['email'], $customReplyTo['login']); } $this->configureEmail($mail, $report); foreach ($report->getAdditionalFiles() as $additionalFile) { - $fileContent = $additionalFile['content']; - $at = $mail->createAttachment( - $fileContent, + $mail->addAttachment( + $additionalFile['content'], $additionalFile['mimeType'], - Zend_Mime::DISPOSITION_INLINE, - $additionalFile['encoding'], - $additionalFile['filename'] + $additionalFile['filename'], + $additionalFile['cid'] ?? null ); - $at->id = $additionalFile['cid']; - - unset($fileContent); } return $mail; diff --git a/plugins/ScheduledReports/ReportEmailGenerator/AttachedFileReportEmailGenerator.php b/plugins/ScheduledReports/ReportEmailGenerator/AttachedFileReportEmailGenerator.php index db8d8e61c2..c4494e5a03 100644 --- a/plugins/ScheduledReports/ReportEmailGenerator/AttachedFileReportEmailGenerator.php +++ b/plugins/ScheduledReports/ReportEmailGenerator/AttachedFileReportEmailGenerator.php @@ -16,7 +16,6 @@ use Piwik\Plugins\ScheduledReports\ReportEmailGenerator; use Piwik\ReportRenderer\Html; use Piwik\SettingsPiwik; use Piwik\View; -use Zend_Mime; class AttachedFileReportEmailGenerator extends ReportEmailGenerator { @@ -47,11 +46,9 @@ class AttachedFileReportEmailGenerator extends ReportEmailGenerator $message = $this->getMessageBody($report); $mail->setBodyHtml($message); - $mail->createAttachment( + $mail->addAttachment( $report->getContents(), $this->attachedFileMimeType, - Zend_Mime::DISPOSITION_INLINE, - Zend_Mime::ENCODING_BASE64, $report->getReportDescription() . $this->attachedFileExtension ); } diff --git a/plugins/ScheduledReports/ReportEmailGenerator/HtmlReportEmailGenerator.php b/plugins/ScheduledReports/ReportEmailGenerator/HtmlReportEmailGenerator.php index 1038d47288..bf77e79222 100644 --- a/plugins/ScheduledReports/ReportEmailGenerator/HtmlReportEmailGenerator.php +++ b/plugins/ScheduledReports/ReportEmailGenerator/HtmlReportEmailGenerator.php @@ -12,14 +12,12 @@ namespace Piwik\Plugins\ScheduledReports\ReportEmailGenerator; use Piwik\Mail; use Piwik\Plugins\ScheduledReports\GeneratedReport; use Piwik\Plugins\ScheduledReports\ReportEmailGenerator; -use Zend_Mime; class HtmlReportEmailGenerator extends ReportEmailGenerator { protected function configureEmail(Mail $mail, GeneratedReport $report) { // Needed when using images as attachment with cid - $mail->setType(Zend_Mime::MULTIPART_RELATED); $mail->setBodyHtml($report->getContents()); } }
\ No newline at end of file diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php index a3a5e228ae..a2c62b2700 100644 --- a/plugins/ScheduledReports/ScheduledReports.php +++ b/plugins/ScheduledReports/ScheduledReports.php @@ -356,9 +356,6 @@ class ScheduledReports extends \Piwik\Plugin $textContent = $mail->getBodyText(); $htmlContent = $mail->getBodyHtml(); - if ($htmlContent instanceof \Zend_Mime_Part) { - $htmlContent = $htmlContent->getRawContent(); - } foreach ($emails as $email) { if (empty($email)) { @@ -391,7 +388,7 @@ class ScheduledReports extends \Piwik\Plugin ". Error was '" . $e->getMessage() . "'"); } } - $mail->clearRecipients(); + $mail->clearAllRecipients(); } } diff --git a/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php b/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php index b46866fe9f..623fa75eb8 100644 --- a/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php +++ b/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php @@ -10,6 +10,7 @@ namespace Piwik\Plugins\ScheduledReports\tests\Integration\ReportEmailGenerator; +use PHPMailer\PHPMailer\PHPMailer; use Piwik\Mail; use Piwik\Plugins\ScheduledReports\GeneratedReport; use Piwik\Plugins\ScheduledReports\ReportEmailGenerator\AttachedFileReportEmailGenerator; @@ -17,6 +18,11 @@ use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; use Piwik\Plugins\SegmentEditor\API as APISegmentEditor; +/** + * @group AttachedFileReportEmailGeneratorTest + * @group ScheduledReports + * @group Plugins + */ class AttachedFileReportEmailGeneratorTest extends IntegrationTestCase { /** @@ -24,6 +30,11 @@ class AttachedFileReportEmailGeneratorTest extends IntegrationTestCase */ private $testInstance; + /** + * @var PHPMailer + */ + private $mail; + public function setUp(): void { parent::setUp(); @@ -52,30 +63,27 @@ class AttachedFileReportEmailGeneratorTest extends IntegrationTestCase $mail = $this->testInstance->makeEmail($generatedReport); $mailContent = $this->getMailContent($mail); - $this->assertStringStartsWith('<html', $mail->getBodyHtml()->getContent()); + $this->assertStringStartsWith('<html', $mail->getBodyHtml()); $this->assertEquals('General_Report report - pretty date', $mail->getSubject()); self::assertStringContainsString('ScheduledReports_PleaseFindAttachedFile', $mailContent); self::assertStringContainsString('ScheduledReports_SentFromX', $mailContent); - $this->assertEquals('Content-Type: text/html; charset=utf-8 + $this->assertStringContainsString("Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable -Content-Disposition: inline -', $mail->getBodyHtml()->getHeaders()); - - $parts = array_map(function (\Zend_Mime_Part $part) { - return [ - 'content' => $part->getContent(), - 'headers' => $part->getHeaders(), - ]; - }, $mail->getParts()); +", $this->mail->createBody()); + + $attachments = $this->mail->getAttachments(); $this->assertEquals([ [ - 'content' => 'cmVwb3J0IGNvbnRlbnRz', - 'headers' => 'Content-Type: generic/thing -Content-Transfer-Encoding: base64 -Content-Disposition: inline; filename="General_Report report - pretty date.thing" -', + 'report contents', + 'General_Report report - pretty date.thing', + 'General_Report report - pretty date.thing', + 'base64', + 'generic/thing', + true, + 'attachment', + 0 ], - ], $parts); + ], $attachments); } public function test_makeEmail_OmitsSentFrom_IfPiwikUrlDoesNotExist() @@ -101,10 +109,9 @@ Content-Disposition: inline; filename="General_Report report - pretty date.thing $this->assertStringStartsWith('<html', $mailContent); self::assertStringContainsString('ScheduledReports_PleaseFindAttachedFile', $mailContent); - $this->assertEquals('Content-Type: text/html; charset=utf-8 + $this->assertStringContainsString("Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable -Content-Disposition: inline -', $mail->getBodyHtml()->getHeaders()); +", $this->mail->createBody()); } public function test_makeEmail_AddsSegmentInformation_IfReportIsForSavedSegment() @@ -131,16 +138,31 @@ Content-Disposition: inline $this->assertStringStartsWith('<html', $mailContent); self::assertStringContainsString("ScheduledReports_PleaseFindAttachedFile", $mailContent); - self::assertStringContainsString('ScheduledReports_SentFromX=', $mailContent); + self::assertStringContainsString('ScheduledReports_SentFromX', $mailContent); self::assertStringContainsString('ScheduledReports_CustomVisitorSegment', $mailContent); - $this->assertEquals('Content-Type: text/html; charset=utf-8 + $this->assertStringContainsString("Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable -Content-Disposition: inline -', $mail->getBodyHtml()->getHeaders()); +", $this->mail->createBody()); } private function getMailContent(Mail $mail) { - return str_replace("=\n", '', $mail->getBodyHtml()->getContent()); + $mail->addTo('noreply@localhost'); + $mail->send(); + return $mail->getBodyHtml(); } + + + public function provideContainerConfig() + { + return [ + 'observers.global' => \DI\add([ + ['Test.Mail.send', function (PHPMailer $mail) { + $this->mail = $mail; + $this->mail->preSend(); + }], + ]), + ]; + } + }
\ No newline at end of file diff --git a/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php b/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php index c5e3817002..55c44383a3 100644 --- a/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php +++ b/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php @@ -9,11 +9,14 @@ namespace Piwik\Plugins\ScheduledReports\tests\Integration\ReportEmailGenerator; +use PHPMailer\PHPMailer\PHPMailer; use Piwik\Plugins\ScheduledReports\GeneratedReport; use Piwik\Plugins\ScheduledReports\ReportEmailGenerator\HtmlReportEmailGenerator; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; -use Zend_Mime; +/** + * @group HtmlReportEmailGeneratorTest + */ class HtmlReportEmailGeneratorTest extends IntegrationTestCase { /** @@ -21,6 +24,11 @@ class HtmlReportEmailGeneratorTest extends IntegrationTestCase */ private $testInstance; + /** + * @var PHPMailer + */ + private $mail; + public function setUp(): void { parent::setUp(); @@ -42,13 +50,24 @@ class HtmlReportEmailGeneratorTest extends IntegrationTestCase ); $mail = $this->testInstance->makeEmail($generatedReport); + $mail->addTo('noreply@localhost'); + $mail->send(); - $this->assertEquals('General_Report report - pretty date', $mail->getSubject()); - $this->assertEquals(Zend_Mime::MULTIPART_RELATED, $mail->getType()); - $this->assertEquals('report contents', $mail->getBodyHtml()->getContent()); - $this->assertEquals('Content-Type: text/html; charset=utf-8 -Content-Transfer-Encoding: quoted-printable -Content-Disposition: inline -', $mail->getBodyHtml()->getHeaders()); + $this->assertEquals('General_Report report - pretty date', $this->mail->Subject); + $this->assertEquals(PHPMailer::CONTENT_TYPE_MULTIPART_ALTERNATIVE, $this->mail->ContentType); + $this->assertEquals('report contents', $this->mail->Body); + } + + + public function provideContainerConfig() + { + return [ + 'observers.global' => \DI\add([ + ['Test.Mail.send', function (PHPMailer $mail) { + $this->mail = $mail; + $this->mail->preSend(); + }], + ]), + ]; } } diff --git a/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php b/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php index 72d557c265..dad7af3b85 100644 --- a/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php +++ b/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php @@ -15,6 +15,7 @@ namespace Piwik\Plugins\ScheduledReports\tests\Integration; +use PHPMailer\PHPMailer\PHPMailer; use Piwik\Mail; use Piwik\Plugins\ScheduledReports\GeneratedReport; use Piwik\Plugins\ScheduledReports\ReportEmailGenerator; @@ -28,7 +29,11 @@ class TestReportEmailGenerator extends ReportEmailGenerator } } - +/** + * @group ReportEmailGeneratorTest + * @group ScheduledReports + * @group Plugins + */ class ReportEmailGeneratorTest extends IntegrationTestCase { /** @@ -36,6 +41,11 @@ class ReportEmailGeneratorTest extends IntegrationTestCase */ private $testInstance; + /** + * @var PHPMailer + */ + private $mail; + public function setUp(): void { parent::setUp(); @@ -55,17 +65,14 @@ class ReportEmailGeneratorTest extends IntegrationTestCase [ [ 'mimeType' => 'mimetype1', - 'encoding' => 'utf-8', 'content' => 'content 1', 'filename' => 'file1.txt', - 'cid' => 'cid1', ], [ + 'cid' => 'file1', 'mimeType' => 'mimetype2', - 'encoding' => 'utf-8', 'content' => 'content 2', 'filename' => 'file2.txt', - 'cid' => 'cid2', ], ] ); @@ -74,30 +81,21 @@ class ReportEmailGeneratorTest extends IntegrationTestCase $this->assertEquals('General_Report report - pretty date', $mail->getSubject()); - $parts = array_map(function (\Zend_Mime_Part $part) { - return [ - 'content' => $part->getContent(), - 'headers' => $part->getHeaders(), - ]; - }, $mail->getParts()); + $attachments = $mail->getAttachments(); $this->assertEquals([ [ 'content' => 'content 1', - 'headers' => 'Content-Type: mimetype1 -Content-Transfer-Encoding: utf-8 -Content-ID: <cid1> -Content-Disposition: inline; filename="file1.txt" -', + 'filename' => 'file1.txt', + 'mimetype' => 'mimetype1', + 'cid' => null ], [ 'content' => 'content 2', - 'headers' => 'Content-Type: mimetype2 -Content-Transfer-Encoding: utf-8 -Content-ID: <cid2> -Content-Disposition: inline; filename="file2.txt" -', + 'filename' => 'file2.txt', + 'mimetype' => 'mimetype2', + 'cid' => 'file1' ], - ], $parts); + ], $attachments); } public function test_makeEmail_UsesCustomReplyTo_IfSupplied() @@ -116,22 +114,25 @@ Content-Disposition: inline; filename="file2.txt" 'email' => 'test@testytesterson.com', 'login' => 'test person', ]); + $mail->send(); $this->assertEquals('General_Report report - pretty date', $mail->getSubject()); - $this->assertEquals('test@testytesterson.com', $mail->getReplyTo()); - $this->assertEquals([ - 'From' => [ - 0 => 'TagManager_MatomoTagName <noreply@localhost>', - 'append' => true, - ], - 'Subject' => [ - 0 => 'General_Report report - pretty date', - ], - 'Reply-To' => [ - 0 => 'test person <test@testytesterson.com>', - 'append' => true, - ], - ], $mail->getHeaders()); - $this->assertEquals([], $mail->getParts()); + $this->assertEquals(['test@testytesterson.com'], array_keys($mail->getReplyTos())); + $header = $this->mail->createHeader(); + $this->assertStringContainsString('From: TagManager_MatomoTagName <noreply@', $header); + $this->assertStringContainsString('Reply-To: test person <test@testytesterson.com>', $header); + $this->assertEquals([], $mail->getAttachments()); + } + + + public function provideContainerConfig() + { + return [ + 'observers.global' => \DI\add([ + ['Test.Mail.send', function (PHPMailer $mail) { + $this->mail = $mail; + }], + ]), + ]; } } |