From 1211fbedf33db47d000a0ad876b2f1825269371e Mon Sep 17 00:00:00 2001 From: Sherin Bloemendaal Date: Fri, 3 May 2024 18:54:46 +0200 Subject: [PATCH] [Mailer] [Sendgrid] Use DataPart::getContentId() when DataPart::setContentId() is used. --- .../Transport/SendgridApiTransportTest.php | 41 +++++++++++++++++++ .../Transport/SendgridApiTransport.php | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php index 86d33241a1816..4196d0897172f 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php @@ -245,4 +245,45 @@ public function testTagAndMetadataHeaders() $this->assertSame('blue', $payload['personalizations'][0]['custom_args']['Color']); $this->assertSame('12345', $payload['personalizations'][0]['custom_args']['Client-ID']); } + + public function testInlineWithCustomContentId() + { + $imagePart = (new DataPart('text-contents', 'text.txt')); + $imagePart->asInline(); + $imagePart->setContentId('content-identifier@symfony'); + + $email = new Email(); + $email->addPart($imagePart); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new SendgridApiTransport('ACCESS_KEY'); + $method = new \ReflectionMethod(SendgridApiTransport::class, 'getPayload'); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('attachments', $payload); + $this->assertCount(1, $payload['attachments']); + $this->assertArrayHasKey('content_id', $payload['attachments'][0]); + + $this->assertSame('content-identifier@symfony', $payload['attachments'][0]['content_id']); + } + + public function testInlineWithoutCustomContentId() + { + $imagePart = (new DataPart('text-contents', 'text.txt')); + $imagePart->asInline(); + + $email = new Email(); + $email->addPart($imagePart); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new SendgridApiTransport('ACCESS_KEY'); + $method = new \ReflectionMethod(SendgridApiTransport::class, 'getPayload'); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('attachments', $payload); + $this->assertCount(1, $payload['attachments']); + $this->assertArrayHasKey('content_id', $payload['attachments'][0]); + + $this->assertSame('text.txt', $payload['attachments'][0]['content_id']); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php index 08a337ec412ab..a59255b37ce6e 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php @@ -179,7 +179,7 @@ private function getAttachments(Email $email): array ]; if ('inline' === $disposition) { - $att['content_id'] = $filename; + $att['content_id'] = $attachment->hasContentId() ? $attachment->getContentId() : $filename; } $attachments[] = $att;