From e69de9fa5956cff40a32be7da91d2801982b5fd4 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Mon, 4 Dec 2017 11:10:30 +0100 Subject: [PATCH] Message: fixed wrong content type for .eml files added as attachment [Closes #47] --- src/Mail/Message.php | 11 ++++- tests/Mail/Mail.attachment.eml.phpt | 63 +++++++++++++++++++++++++++++ tests/Mail/files/example.eml | 39 ++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 tests/Mail/Mail.attachment.eml.phpt create mode 100644 tests/Mail/files/example.eml diff --git a/src/Mail/Message.php b/src/Mail/Message.php index 7fe4470..c2d11e4 100644 --- a/src/Mail/Message.php +++ b/src/Mail/Message.php @@ -298,9 +298,16 @@ private function createAttachment(string $file, string $content = null, string $ throw new Nette\FileNotFoundException("Unable to read file '$file'."); } } + if (!$contentType) { + $contentType = finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $content); + } + if (!strcasecmp($contentType, 'message/rfc822')) { // not allowed for attached files + $contentType = 'application/octet-stream'; + } + $part->setBody($content); - $part->setContentType($contentType ? $contentType : finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $content)); - $part->setEncoding($contentType && preg_match('#(multipart|message)/#A', $contentType) ? self::ENCODING_8BIT : self::ENCODING_BASE64); + $part->setContentType($contentType); + $part->setEncoding(preg_match('#(multipart|message)/#A', $contentType) ? self::ENCODING_8BIT : self::ENCODING_BASE64); $part->setHeader('Content-Disposition', $disposition . '; filename="' . Strings::fixEncoding(basename($file)) . '"'); return $part; } diff --git a/tests/Mail/Mail.attachment.eml.phpt b/tests/Mail/Mail.attachment.eml.phpt new file mode 100644 index 0000000..7053b53 --- /dev/null +++ b/tests/Mail/Mail.attachment.eml.phpt @@ -0,0 +1,63 @@ +addAttachment(__DIR__ . '/files/example.eml', null, 'MESSAGE/RFC822'); +$mailer->send($mail); + +Assert::match(<<<'EOD' +MIME-Version: 1.0 +X-Mailer: Nette Framework +Date: %a% +Message-ID: <%S%@%S%> +Content-Type: multipart/mixed; + boundary="--------%S%" + +----------%S% +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 7bit + + +----------%S% +Content-Type: application/octet-stream +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="example.eml" + +UmV0dXJuLVBhdGg6IDxleGFtcGxlQGFjbS5vcmc+DQpUbzogRXhhbXBsZSA8ZXhhbXBsZUBsaW51 +eC5sb2NhbD4NClN1YmplY3Q6IFRlc3RpbmcNCkZyb206IGV4YW1wbGUgPGV4YW1wbGVAYWNtLm9y +Zz4NClJlcGx5LVRvOiBleGFtcGxlIDxleGFtcGxlQGFjbS5vcmc+DQpTZW5kZXI6IGV4YW1wbGVA +YWNtLm9yZw0KTUlNRS1WZXJzaW9uOiAxLjANCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVk +OyBib3VuZGFyeT0iNjUyYjhjNGRjYjAwY2RjZGRhMWUxNmFmMzY3ODFjYWYiDQpNZXNzYWdlLUlE +OiA8MjAwNTA0MzAxOTI4MjkuMDQ4OS5leGFtcGxlQGFjbS5vcmc+DQpEYXRlOiBTYXQsIDMwIEFw +ciAyMDA1IDE5OjI4OjI5IC0wMzAwDQoNCg0KLS02NTJiOGM0ZGNiMDBjZGNkZGExZTE2YWYzNjc4 +MWNhZg0KQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9IjZhODJmYjQ1 +OWRjYWFjZDQwYWIzNDA0NTI5ZTgwOGRjIg0KDQoNCi0tNmE4MmZiNDU5ZGNhYWNkNDBhYjM0MDQ1 +MjllODA4ZGMNCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0i +NjljMTY4M2EzZWUxNmVmN2NmMTZlZGQ3MDA2OTRhMmYiDQoNCg0KLS02OWMxNjgzYTNlZTE2ZWY3 +Y2YxNmVkZDcwMDY5NGEyZg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04 +ODU5LTENCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUNCg0KVGhp +cyBpcyBhbiBIVE1MIG1lc3NhZ2UuIFBsZWFzZSB1c2UgYW4gSFRNTCBjYXBhYmxlIG1haWwgcHJv +Z3JhbSB0byByZWFkDQp0aGlzIG1lc3NhZ2UuDQoNCi0tNjljMTY4M2EzZWUxNmVmN2NmMTZlZGQ3 +MDA2OTRhMmYNCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENCkNv +bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUNCg0KPGh0bWw+DQo8aGVh +ZD4NCjxQPkhlbGxvPC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0KLS02OWMxNjgzYTNlZTE2ZWY3Y2Yx +NmVkZDcwMDY5NGEyZi0tDQoNCi0tNjUyYjhjNGRjYjAwY2RjZGRhMWUxNmFmMzY3ODFjYWYtLQ== +----------%S%-- +EOD +, TestMailer::$output); diff --git a/tests/Mail/files/example.eml b/tests/Mail/files/example.eml new file mode 100644 index 0000000..843befd --- /dev/null +++ b/tests/Mail/files/example.eml @@ -0,0 +1,39 @@ +Return-Path: +To: Example +Subject: Testing +From: example +Reply-To: example +Sender: example@acm.org +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf" +Message-ID: <20050430192829.0489.example@acm.org> +Date: Sat, 30 Apr 2005 19:28:29 -0300 + + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc" + + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f" + + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +This is an HTML message. Please use an HTML capable mail program to read +this message. + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + + + +

Hello

+ + +--69c1683a3ee16ef7cf16edd700694a2f-- + +--652b8c4dcb00cdcdda1e16af36781caf-- \ No newline at end of file