diff --git a/src/Symfony/Component/Mailer/Bridge/Sweego/CHANGELOG.md b/src/Symfony/Component/Mailer/Bridge/Sweego/CHANGELOG.md index 00149ea5ac6f5..8acc7e1121592 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sweego/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/Bridge/Sweego/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.3 +--- + + * Add support for attachments + 7.2 --- diff --git a/src/Symfony/Component/Mailer/Bridge/Sweego/README.md b/src/Symfony/Component/Mailer/Bridge/Sweego/README.md index 0845037fb7cca..b7b2f37948ca1 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sweego/README.md +++ b/src/Symfony/Component/Mailer/Bridge/Sweego/README.md @@ -24,6 +24,30 @@ MAILER_DSN=sweego+api://API_KEY@default where: - `API_KEY` is your Sweego API Key +Features +-------- + +### Attachments + +The bridge supports both regular attachments and inline attachments (for embedding images in HTML emails): + +```php +use Symfony\Component\Mime\Email; + +$email = new Email(); +$email + ->to('to@example.com') + ->from('from@example.com') + ->subject('Email with attachments') + ->text('Here is the text version') + ->html('
Here is the HTML content
') + // Regular attachment + ->attach('Hello world!', 'test.txt', 'text/plain') + // Inline attachment (embedded image) + ->embed(fopen('image.jpg', 'r'), 'image.jpg', 'image/jpeg') +; +``` + Webhook ------- diff --git a/src/Symfony/Component/Mailer/Bridge/Sweego/Transport/SweegoApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Sweego/Transport/SweegoApiTransport.php index b25b7e5b725a6..3b43fa8bc14f7 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sweego/Transport/SweegoApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Sweego/Transport/SweegoApiTransport.php @@ -100,6 +100,10 @@ private function getPayload(Email $email, Envelope $envelope): array $payload['message-html'] = $email->getHtmlBody(); } + if ($email->getAttachments()) { + $payload['attachments'] = $this->getAttachments($email); + } + if ($payload['headers'] = $this->prepareHeaders($email->getHeaders())) { if (\count($payload['headers']) > 5) { throw new InvalidArgumentException('Sweego API supports up to 5 headers.'); @@ -111,6 +115,30 @@ private function getPayload(Email $email, Envelope $envelope): array return $payload; } + private function getAttachments(Email $email): array + { + $attachments = []; + foreach ($email->getAttachments() as $attachment) { + $headers = $attachment->getPreparedHeaders(); + $filename = $headers->getHeaderParameter('Content-Disposition', 'filename'); + $disposition = $headers->getHeaderBody('Content-Disposition'); + + $att = [ + 'content' => $attachment->bodyToString(), + 'filename' => $filename, + 'disposition' => $disposition, + ]; + + if ('inline' === $disposition) { + $att['content_id'] = $attachment->hasContentId() ? $attachment->getContentId() : $filename; + } + + $attachments[] = $att; + } + + return $attachments; + } + private function prepareHeaders(Headers $headers): array { $headersPrepared = [];