Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 99f2827

Browse filesBrowse files
driesvintsfabpot
authored andcommitted
[Mailer] Implement EmailTags for Amazon Mailer
1 parent 4834d9e commit 99f2827
Copy full SHA for 99f2827

File tree

Expand file treeCollapse file tree

7 files changed

+95
-0
lines changed
Filter options
Expand file treeCollapse file tree

7 files changed

+95
-0
lines changed

‎src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
6.1
5+
---
6+
7+
* Add support for `X-SES-MESSAGE-TAGS`
8+
49
6.0
510
---
611

‎src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\HttpClient\Response\MockResponse;
2020
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesApiAsyncAwsTransport;
2121
use Symfony\Component\Mailer\Exception\HttpTransportException;
22+
use Symfony\Component\Mailer\Header\MetadataHeader;
2223
use Symfony\Component\Mime\Address;
2324
use Symfony\Component\Mime\Email;
2425
use Symfony\Contracts\HttpClient\ResponseInterface;
@@ -89,6 +90,7 @@ public function testSend()
8990
$this->assertSame('aws-configuration-set-name', $content['ConfigurationSetName']);
9091
$this->assertSame('aws-source-arn', $content['FromEmailAddressIdentityArn']);
9192
$this->assertSame('bounces@example.com', $content['FeedbackForwardingEmailAddress']);
93+
$this->assertSame([['Name' => 'tagName1', 'Value' => 'tag Value1'], ['Name' => 'tagName2', 'Value' => 'tag Value2']], $content['EmailTags']);
9294

9395
$json = '{"MessageId": "foobar"}';
9496

@@ -111,6 +113,8 @@ public function testSend()
111113

112114
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
113115
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
116+
$mail->getHeaders()->add(new MetadataHeader('tagName1', 'tag Value1'));
117+
$mail->getHeaders()->add(new MetadataHeader('tagName2', 'tag Value2'));
114118

115119
$message = $transport->send($mail);
116120

‎src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\HttpClient\Response\MockResponse;
2020
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesHttpAsyncAwsTransport;
2121
use Symfony\Component\Mailer\Exception\HttpTransportException;
22+
use Symfony\Component\Mailer\Header\MetadataHeader;
2223
use Symfony\Component\Mime\Address;
2324
use Symfony\Component\Mime\Email;
2425
use Symfony\Contracts\HttpClient\ResponseInterface;
@@ -86,6 +87,7 @@ public function testSend()
8687
$this->assertStringContainsString('Hello There!', $content);
8788
$this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
8889
$this->assertSame('aws-source-arn', $body['FromEmailAddressIdentityArn']);
90+
$this->assertSame([['Name' => 'tagName1', 'Value' => 'tag Value1'], ['Name' => 'tagName2', 'Value' => 'tag Value2']], $body['EmailTags']);
8991

9092
$json = '{"MessageId": "foobar"}';
9193

@@ -104,6 +106,8 @@ public function testSend()
104106

105107
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
106108
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
109+
$mail->getHeaders()->add(new MetadataHeader('tagName1', 'tag Value1'));
110+
$mail->getHeaders()->add(new MetadataHeader('tagName2', 'tag Value2'));
107111

108112
$message = $transport->send($mail);
109113

+36Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Amazon\Tests\Transport;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesSmtpTransport;
16+
use Symfony\Component\Mailer\Header\MetadataHeader;
17+
use Symfony\Component\Mime\Email;
18+
19+
class SesSmtpTransportTest extends TestCase
20+
{
21+
public function testTagAndMetadataAndMessageStreamHeaders()
22+
{
23+
$email = new Email();
24+
$email->getHeaders()->add(new MetadataHeader('tagName1', 'tag Value1'));
25+
$email->getHeaders()->add(new MetadataHeader('tagName2', 'tag Value2'));
26+
27+
$transport = new SesSmtpTransport('user', 'pass');
28+
$method = new \ReflectionMethod(SesSmtpTransport::class, 'addSesHeaders');
29+
$method->setAccessible(true);
30+
$method->invoke($transport, $email);
31+
32+
$this->assertCount(1, $email->getHeaders()->toArray());
33+
$this->assertTrue($email->getHeaders()->has('X-SES-MESSAGE-TAGS'));
34+
$this->assertSame('X-SES-MESSAGE-TAGS: tagName1=tag Value1, tagName2=tag Value2', $email->getHeaders()->get('X-SES-MESSAGE-TAGS')->toString());
35+
}
36+
}

‎src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use AsyncAws\Ses\ValueObject\Content;
1616
use Symfony\Component\Mailer\Envelope;
1717
use Symfony\Component\Mailer\Exception\RuntimeException;
18+
use Symfony\Component\Mailer\Header\MetadataHeader;
1819
use Symfony\Component\Mailer\SentMessage;
1920
use Symfony\Component\Mime\Address;
2021
use Symfony\Component\Mime\Email;
@@ -99,6 +100,12 @@ protected function getRequest(SentMessage $message): SendEmailRequest
99100
$request['FeedbackForwardingEmailAddress'] = $email->getReturnPath()->toString();
100101
}
101102

103+
foreach ($email->getHeaders()->all() as $header) {
104+
if ($header instanceof MetadataHeader) {
105+
$request['EmailTags'][] = ['Name' => $header->getKey(), 'Value' => $header->getValue()];
106+
}
107+
}
108+
102109
return new SendEmailRequest($request);
103110
}
104111

‎src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Psr\EventDispatcher\EventDispatcherInterface;
1919
use Psr\Log\LoggerInterface;
2020
use Symfony\Component\Mailer\Exception\HttpTransportException;
21+
use Symfony\Component\Mailer\Header\MetadataHeader;
2122
use Symfony\Component\Mailer\SentMessage;
2223
use Symfony\Component\Mailer\Transport\AbstractTransport;
2324
use Symfony\Component\Mime\Message;
@@ -87,6 +88,13 @@ protected function getRequest(SentMessage $message): SendEmailRequest
8788
&& $sourceArnHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-SOURCE-ARN')) {
8889
$request['FromEmailAddressIdentityArn'] = $sourceArnHeader->getBodyAsString();
8990
}
91+
if ($message->getOriginalMessage() instanceof Message) {
92+
foreach ($message->getOriginalMessage()->getHeaders()->all() as $header) {
93+
if ($header instanceof MetadataHeader) {
94+
$request['EmailTags'][] = ['Name' => $header->getKey(), 'Value' => $header->getValue()];
95+
}
96+
}
97+
}
9098

9199
return new SendEmailRequest($request);
92100
}

‎src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesSmtpTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesSmtpTransport.php
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@
1313

1414
use Psr\EventDispatcher\EventDispatcherInterface;
1515
use Psr\Log\LoggerInterface;
16+
use Symfony\Component\Mailer\Envelope;
17+
use Symfony\Component\Mailer\Header\MetadataHeader;
18+
use Symfony\Component\Mailer\SentMessage;
1619
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
20+
use Symfony\Component\Mime\Message;
21+
use Symfony\Component\Mime\RawMessage;
1722

1823
/**
1924
* @author Kevin Verschaeve
@@ -30,4 +35,30 @@ public function __construct(string $username, string $password, string $region =
3035
$this->setUsername($username);
3136
$this->setPassword($password);
3237
}
38+
39+
public function send(RawMessage $message, Envelope $envelope = null): ?SentMessage
40+
{
41+
if ($message instanceof Message) {
42+
$this->addSesHeaders($message);
43+
}
44+
45+
return parent::send($message, $envelope);
46+
}
47+
48+
private function addSesHeaders(Message $message): void
49+
{
50+
$metadata = [];
51+
$headers = $message->getHeaders();
52+
53+
foreach ($headers->all() as $name => $header) {
54+
if ($header instanceof MetadataHeader) {
55+
$metadata[] = "{$header->getKey()}={$header->getValue()}";
56+
$headers->remove($name);
57+
}
58+
}
59+
60+
if ($metadata) {
61+
$headers->addTextHeader('X-SES-MESSAGE-TAGS', implode(', ', $metadata));
62+
}
63+
}
3364
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.