|
13 | 13 |
|
14 | 14 | use Symfony\Component\RemoteEvent\Event\Mailer\AbstractMailerEvent; |
15 | 15 | use Symfony\Component\RemoteEvent\Event\Mailer\MailerDeliveryEvent; |
| 16 | +use Symfony\Component\RemoteEvent\Event\Mailer\MailerEngagementEvent; |
16 | 17 | use Symfony\Component\RemoteEvent\Exception\ParseException; |
17 | 18 | use Symfony\Component\RemoteEvent\PayloadConverterInterface; |
18 | 19 |
|
19 | 20 | final class SweegoPayloadConverter implements PayloadConverterInterface |
20 | 21 | { |
21 | 22 | public function convert(array $payload): AbstractMailerEvent |
22 | 23 | { |
23 | | - if (\in_array($payload['event_type'], ['email_sent', 'delivered'], true)) { |
| 24 | + if (\in_array($payload['event_type'], ['email_sent', 'delivered', 'soft-bounce', 'hard_bounce'], true)) { |
24 | 25 | $name = match ($payload['event_type']) { |
25 | 26 | 'email_sent' => MailerDeliveryEvent::RECEIVED, |
26 | 27 | 'delivered' => MailerDeliveryEvent::DELIVERED, |
| 28 | + 'soft-bounce', 'hard_bounce' => MailerDeliveryEvent::BOUNCE, |
27 | 29 | }; |
28 | 30 |
|
29 | 31 | $event = new MailerDeliveryEvent($name, $payload['headers']['x-transaction-id'], $payload); |
| 32 | + } else { |
| 33 | + $name = match ($payload['event_type']) { |
| 34 | + 'list_unsub' => MailerEngagementEvent::UNSUBSCRIBE, |
| 35 | + 'complaint' => MailerEngagementEvent::SPAM, |
| 36 | + 'email_clicked' => MailerEngagementEvent::CLICK, |
| 37 | + 'email_opened' => MailerEngagementEvent::OPEN, |
| 38 | + default => throw new ParseException(\sprintf('Unsupported event "%s".', $payload['event_type'])), |
| 39 | + }; |
| 40 | + |
| 41 | + $event = new MailerEngagementEvent($name, $payload['headers']['x-transaction-id'], $payload); |
30 | 42 | } |
31 | 43 |
|
32 | 44 | if (!$date = \DateTimeImmutable::createFromFormat(\DATE_ATOM, $payload['timestamp'])) { |
|
0 commit comments