1 | <?php |
||
2 | |||
3 | /* |
||
4 | * @copyright 2018 Mautic Contributors. All rights reserved |
||
5 | * @author Mautic |
||
6 | * |
||
7 | * @link http://mautic.org |
||
8 | * |
||
9 | * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html |
||
10 | */ |
||
11 | |||
12 | namespace Mautic\EmailBundle\Swiftmailer\Momentum\Service; |
||
13 | |||
14 | use Mautic\EmailBundle\Helper\PlainTextMessageHelper; |
||
15 | use Mautic\EmailBundle\Swiftmailer\Message\MauticMessage; |
||
16 | use Mautic\EmailBundle\Swiftmailer\Momentum\DTO\TransmissionDTO; |
||
17 | use Mautic\EmailBundle\Swiftmailer\Momentum\Metadata\MetadataProcessor; |
||
18 | |||
19 | final class SwiftMessageService implements SwiftMessageServiceInterface |
||
20 | { |
||
21 | private $reservedKeys = [ |
||
22 | 'MIME-Version', |
||
23 | 'Content-Type', |
||
24 | 'Content-Transfer-Encoding', |
||
25 | 'To', |
||
26 | 'From', |
||
27 | 'Subject', |
||
28 | 'Reply-To', |
||
29 | 'BCC', |
||
30 | ]; |
||
31 | |||
32 | /** |
||
33 | * @return TransmissionDTO |
||
34 | */ |
||
35 | public function transformToTransmission(\Swift_Mime_SimpleMessage $message) |
||
36 | { |
||
37 | $messageFrom = $message->getFrom(); |
||
38 | $messageFromEmail = current(array_keys($messageFrom)); |
||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
39 | $from = new TransmissionDTO\ContentDTO\FromDTO($messageFromEmail); |
||
40 | if (!empty($messageFrom[$messageFromEmail])) { |
||
41 | $from->setName($messageFrom[$messageFromEmail]); |
||
42 | } |
||
43 | |||
44 | // Process metadata before consuming subject, body, etc |
||
45 | $metadataProcessor = new MetadataProcessor($message); |
||
46 | |||
47 | $content = new TransmissionDTO\ContentDTO($message->getSubject(), $from); |
||
48 | if ($body = $message->getBody()) { |
||
49 | $content->setHtml($body); |
||
50 | } |
||
51 | |||
52 | $headers = $message->getHeaders()->getAll(); |
||
53 | /** @var \Swift_Mime_Header $header */ |
||
54 | foreach ($headers as $header) { |
||
55 | if (\Swift_Mime_Header::TYPE_TEXT == $header->getFieldType() && !in_array($header->getFieldName(), $this->reservedKeys)) { |
||
56 | $content->addHeader($header->getFieldName(), $header->getFieldBodyModel()); |
||
57 | } |
||
58 | } |
||
59 | |||
60 | if ($messageText = PlainTextMessageHelper::getPlainTextFromMessage($message)) { |
||
61 | $content->setText($messageText); |
||
62 | } |
||
63 | |||
64 | if ($message instanceof MauticMessage) { |
||
65 | foreach ($message->getAttachments() as $attachment) { |
||
66 | if (file_exists($attachment['filePath']) && is_readable($attachment['filePath'])) { |
||
67 | try { |
||
68 | $swiftAttachment = \Swift_Attachment::fromPath($attachment['filePath']); |
||
69 | |||
70 | if (!empty($attachment['fileName'])) { |
||
71 | $swiftAttachment->setFilename($attachment['fileName']); |
||
72 | } |
||
73 | |||
74 | if (!empty($attachment['contentType'])) { |
||
75 | $swiftAttachment->setContentType($attachment['contentType']); |
||
76 | } |
||
77 | |||
78 | if (!empty($attachment['inline'])) { |
||
79 | $swiftAttachment->setDisposition('inline'); |
||
80 | } |
||
81 | $attachmentContent = $swiftAttachment->getEncoder()->encodeString($swiftAttachment->getBody()); |
||
82 | $attachment = new TransmissionDTO\ContentDTO\AttachementDTO( |
||
83 | $swiftAttachment->getContentType(), |
||
84 | $swiftAttachment->getFilename(), |
||
85 | $attachmentContent |
||
86 | ); |
||
87 | $content->addAttachment($attachment); |
||
88 | } catch (\Exception $e) { |
||
89 | error_log($e); |
||
90 | } |
||
91 | } |
||
92 | } |
||
93 | } |
||
94 | |||
95 | $cssHeader = $message->getHeaders()->get('X-MC-InlineCSS'); |
||
96 | if (null !== $cssHeader) { |
||
97 | $content->setInlineCss($cssHeader); |
||
98 | } |
||
99 | |||
100 | $returnPath = $message->getReturnPath() ? $message->getReturnPath() : $messageFromEmail; |
||
101 | |||
102 | $transmission = new TransmissionDTO($content, $returnPath); |
||
103 | $transmission->setCampaignId($metadataProcessor->getCampaignId()); |
||
104 | |||
105 | $recipientsGrouped = [ |
||
106 | 'to' => (array) $message->getTo(), |
||
107 | 'cc' => (array) $message->getCc(), |
||
108 | 'bcc' => (array) $message->getBcc(), |
||
109 | ]; |
||
110 | |||
111 | foreach ($recipientsGrouped as $group => $recipients) { |
||
112 | $isBcc = ('bcc' === $group); |
||
113 | foreach ($recipients as $email => $name) { |
||
114 | $addressDTO = new TransmissionDTO\RecipientDTO\AddressDTO($email, $name, $isBcc); |
||
115 | $recipientDTO = new TransmissionDTO\RecipientDTO( |
||
116 | $addressDTO, |
||
117 | $metadataProcessor->getMetadata($email), |
||
118 | $metadataProcessor->getSubstitutionData($email) |
||
119 | ); |
||
120 | |||
121 | $transmission->addRecipient($recipientDTO); |
||
122 | } |
||
123 | } |
||
124 | |||
125 | if (count($recipientsGrouped['cc'])) { |
||
126 | $content->addHeader('CC', implode(',', array_keys($recipientsGrouped['cc']))); |
||
127 | } |
||
128 | |||
129 | return $transmission; |
||
130 | } |
||
131 | } |
||
132 |