Skip to content

Commit 9ab06e2

Browse files
Merge branch '4.4'
* 4.4: [Serializer] fix typo Add context options to handle BOM [Mailer] Fix Message ID for Postmark SMTP [HttpClient] resolve promise chains on HttplugClient::wait() Add Message-Id to SentMessage when sending an email [Cache] fix 2RTT + race condition in AbstractTagAwareAdapter::deleteItems() [Mailer] added ReplyTo option for PostmarkApiTransport
2 parents 82c226a + 03b34da commit 9ab06e2

24 files changed

+142
-43
lines changed

AbstractApiTransport.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525
abstract class AbstractApiTransport extends AbstractHttpTransport
2626
{
27-
abstract protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface;
27+
abstract protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface;
2828

2929
protected function doSendHttp(SentMessage $message): ResponseInterface
3030
{
@@ -34,7 +34,7 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
3434
throw new RuntimeException(sprintf('Unable to send message with the "%s" transport: %s', __CLASS__, $e->getMessage()), 0, $e);
3535
}
3636

37-
return $this->doSendApi($email, $message->getEnvelope());
37+
return $this->doSendApi($message, $email, $message->getEnvelope());
3838
}
3939

4040
protected function getRecipients(Email $email, Envelope $envelope): array

Amazon/Transport/SesApiTransport.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\Mailer\Envelope;
1616
use Symfony\Component\Mailer\Exception\HttpTransportException;
17+
use Symfony\Component\Mailer\SentMessage;
1718
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
1819
use Symfony\Component\Mime\Email;
1920
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -48,7 +49,7 @@ public function __toString(): string
4849
return sprintf('ses+api://%s@%s', $this->accessKey, $this->getEndpoint());
4950
}
5051

51-
protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface
52+
protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface
5253
{
5354
$date = gmdate('D, d M Y H:i:s e');
5455
$auth = sprintf('AWS3-HTTPS AWSAccessKeyId=%s,Algorithm=HmacSHA256,Signature=%s', $this->accessKey, $this->getSignature($date));
@@ -62,12 +63,13 @@ protected function doSendApi(Email $email, Envelope $envelope): ResponseInterfac
6263
'body' => $this->getPayload($email, $envelope),
6364
]);
6465

66+
$result = new \SimpleXMLElement($response->getContent(false));
6567
if (200 !== $response->getStatusCode()) {
66-
$error = new \SimpleXMLElement($response->getContent(false));
67-
68-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $error->Error->Message, $error->Error->Code), $response);
68+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result->Error->Message, $result->Error->Code), $response);
6969
}
7070

71+
$sentMessage->setMessageId($result->SendEmailResult->MessageId);
72+
7173
return $response;
7274
}
7375

Amazon/Transport/SesHttpTransport.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,13 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
6363
],
6464
]);
6565

66+
$result = new \SimpleXMLElement($response->getContent(false));
6667
if (200 !== $response->getStatusCode()) {
67-
$error = new \SimpleXMLElement($response->getContent(false));
68-
69-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $error->Error->Message, $error->Error->Code), $response);
68+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result->Error->Message, $result->Error->Code), $response);
7069
}
7170

71+
$message->setMessageId($result->SendEmailResult->MessageId);
72+
7273
return $response;
7374
}
7475

Mailchimp/Transport/MandrillApiTransport.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\Mailer\Envelope;
1616
use Symfony\Component\Mailer\Exception\HttpTransportException;
17+
use Symfony\Component\Mailer\SentMessage;
1718
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
1819
use Symfony\Component\Mime\Email;
1920
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -41,21 +42,23 @@ public function __toString(): string
4142
return sprintf('mandrill+api://%s', $this->getEndpoint());
4243
}
4344

44-
protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface
45+
protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface
4546
{
4647
$response = $this->client->request('POST', 'https://'.$this->getEndpoint().'/api/1.0/messages/send.json', [
4748
'json' => $this->getPayload($email, $envelope),
4849
]);
4950

51+
$result = $response->toArray(false);
5052
if (200 !== $response->getStatusCode()) {
51-
$result = $response->toArray(false);
5253
if ('error' === ($result['status'] ?? false)) {
5354
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $result['code']), $response);
5455
}
5556

5657
throw new HttpTransportException(sprintf('Unable to send an email (code %s).', $result['code']), $response);
5758
}
5859

60+
$sentMessage->setMessageId($result['_id']);
61+
5962
return $response;
6063
}
6164

Mailchimp/Transport/MandrillHttpTransport.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,17 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
5151
],
5252
]);
5353

54+
$result = $response->toArray(false);
5455
if (200 !== $response->getStatusCode()) {
55-
$result = $response->toArray(false);
5656
if ('error' === ($result['status'] ?? false)) {
5757
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $result['code']), $response);
5858
}
5959

6060
throw new HttpTransportException(sprintf('Unable to send an email (code %s).', $result['code']), $response);
6161
}
6262

63+
$message->setMessageId($result['_id']);
64+
6365
return $response;
6466
}
6567

Mailgun/Transport/MailgunApiTransport.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\Mailer\Envelope;
1616
use Symfony\Component\Mailer\Exception\HttpTransportException;
17+
use Symfony\Component\Mailer\SentMessage;
1718
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
1819
use Symfony\Component\Mime\Email;
1920
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
@@ -46,7 +47,7 @@ public function __toString(): string
4647
return sprintf('mailgun+api://%s?domain=%s', $this->getEndpoint(), $this->domain);
4748
}
4849

49-
protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface
50+
protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface
5051
{
5152
$body = new FormDataPart($this->getPayload($email, $envelope));
5253
$headers = [];
@@ -61,14 +62,17 @@ protected function doSendApi(Email $email, Envelope $envelope): ResponseInterfac
6162
'body' => $body->bodyToIterable(),
6263
]);
6364

65+
$result = $response->toArray(false);
6466
if (200 !== $response->getStatusCode()) {
6567
if ('application/json' === $response->getHeaders(false)['content-type'][0]) {
66-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->toArray(false)['message'], $response->getStatusCode()), $response);
68+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $response->getStatusCode()), $response);
6769
}
6870

6971
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->getContent(false), $response->getStatusCode()), $response);
7072
}
7173

74+
$sentMessage->setMessageId($result['id']);
75+
7276
return $response;
7377
}
7478

Mailgun/Transport/MailgunHttpTransport.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,17 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
6464
'body' => $body->bodyToIterable(),
6565
]);
6666

67+
$result = $response->toArray(false);
6768
if (200 !== $response->getStatusCode()) {
6869
if ('application/json' === $response->getHeaders(false)['content-type'][0]) {
69-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->toArray(false)['message'], $response->getStatusCode()), $response);
70+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $response->getStatusCode()), $response);
7071
}
7172

7273
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->getContent(false), $response->getStatusCode()), $response);
7374
}
7475

76+
$message->setMessageId($result['id']);
77+
7578
return $response;
7679
}
7780

MailgunApiTransport.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\Mailer\Envelope;
1616
use Symfony\Component\Mailer\Exception\HttpTransportException;
17+
use Symfony\Component\Mailer\SentMessage;
1718
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
1819
use Symfony\Component\Mime\Email;
1920
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
@@ -46,7 +47,7 @@ public function __toString(): string
4647
return sprintf('mailgun+api://%s?domain=%s', $this->getEndpoint(), $this->domain);
4748
}
4849

49-
protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface
50+
protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface
5051
{
5152
$body = new FormDataPart($this->getPayload($email, $envelope));
5253
$headers = [];
@@ -61,14 +62,17 @@ protected function doSendApi(Email $email, Envelope $envelope): ResponseInterfac
6162
'body' => $body->bodyToIterable(),
6263
]);
6364

65+
$result = $response->toArray(false);
6466
if (200 !== $response->getStatusCode()) {
6567
if ('application/json' === $response->getHeaders(false)['content-type'][0]) {
66-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->toArray(false)['message'], $response->getStatusCode()), $response);
68+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $response->getStatusCode()), $response);
6769
}
6870

6971
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->getContent(false), $response->getStatusCode()), $response);
7072
}
7173

74+
$sentMessage->setMessageId($result['id']);
75+
7276
return $response;
7377
}
7478

MailgunHttpTransport.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,17 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
6464
'body' => $body->bodyToIterable(),
6565
]);
6666

67+
$result = $response->toArray(false);
6768
if (200 !== $response->getStatusCode()) {
6869
if ('application/json' === $response->getHeaders(false)['content-type'][0]) {
69-
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->toArray(false)['message'], $response->getStatusCode()), $response);
70+
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $response->getStatusCode()), $response);
7071
}
7172

7273
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $response->getContent(false), $response->getStatusCode()), $response);
7374
}
7475

76+
$message->setMessageId($result['id']);
77+
7578
return $response;
7679
}
7780

MandrillApiTransport.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\Mailer\Envelope;
1616
use Symfony\Component\Mailer\Exception\HttpTransportException;
17+
use Symfony\Component\Mailer\SentMessage;
1718
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
1819
use Symfony\Component\Mime\Email;
1920
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -41,21 +42,23 @@ public function __toString(): string
4142
return sprintf('mandrill+api://%s', $this->getEndpoint());
4243
}
4344

44-
protected function doSendApi(Email $email, Envelope $envelope): ResponseInterface
45+
protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $envelope): ResponseInterface
4546
{
4647
$response = $this->client->request('POST', 'https://'.$this->getEndpoint().'/api/1.0/messages/send.json', [
4748
'json' => $this->getPayload($email, $envelope),
4849
]);
4950

51+
$result = $response->toArray(false);
5052
if (200 !== $response->getStatusCode()) {
51-
$result = $response->toArray(false);
5253
if ('error' === ($result['status'] ?? false)) {
5354
throw new HttpTransportException(sprintf('Unable to send an email: %s (code %s).', $result['message'], $result['code']), $response);
5455
}
5556

5657
throw new HttpTransportException(sprintf('Unable to send an email (code %s).', $result['code']), $response);
5758
}
5859

60+
$sentMessage->setMessageId($result['_id']);
61+
5962
return $response;
6063
}
6164

0 commit comments

Comments
 (0)