Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Mail\Transport;use Aws\Exception\AwsException;use Aws\SesV2\SesV2Client;use Exception;use Symfony\Component\Mailer\Header\MetadataHeader;use Symfony\Component\Mailer\SentMessage;use Symfony\Component\Mailer\Transport\AbstractTransport;use Symfony\Component\Mime\Message;class SesV2Transport extends AbstractTransport{/*** The Amazon SES V2 instance.** @var \Aws\SesV2\SesV2Client*/protected $ses;/*** The Amazon SES transmission options.** @var array*/protected $options = [];/*** Create a new SES V2 transport instance.** @param \Aws\SesV2\SesV2Client $ses* @param array $options* @return void*/public function __construct(SesV2Client $ses, $options = []){$this->ses = $ses;$this->options = $options;parent::__construct();}/*** {@inheritDoc}*/protected function doSend(SentMessage $message): void{$options = $this->options;if ($message->getOriginalMessage() instanceof Message) {foreach ($message->getOriginalMessage()->getHeaders()->all() as $header) {if ($header instanceof MetadataHeader) {$options['Tags'][] = ['Name' => $header->getKey(), 'Value' => $header->getValue()];}}}try {$result = $this->ses->sendEmail(array_merge($options, ['ReplyToAddresses' => [$message->getEnvelope()->getSender()->toString()],'Destination' => ['ToAddresses' => collect($message->getEnvelope()->getRecipients())->map->toString()->values()->all(),],'Content' => ['Raw' => ['Data' => $message->toString(),],],]));} catch (AwsException $e) {$reason = $e->getAwsErrorMessage() ?? $e->getMessage();throw new Exception(sprintf('Request to AWS SES V2 API failed. Reason: %s.', $reason),is_int($e->getCode()) ? $e->getCode() : 0,$e);}$messageId = $result->get('MessageId');$message->getOriginalMessage()->getHeaders()->addHeader('X-Message-ID', $messageId);$message->getOriginalMessage()->getHeaders()->addHeader('X-SES-Message-ID', $messageId);}/*** Get the Amazon SES V2 client for the SesV2Transport instance.** @return \Aws\SesV2\SesV2Client*/public function ses(){return $this->ses;}/*** Get the transmission options being used by the transport.** @return array*/public function getOptions(){return $this->options;}/*** Set the transmission options being used by the transport.** @param array $options* @return array*/public function setOptions(array $options){return $this->options = $options;}/*** Get the string representation of the transport.** @return string*/public function __toString(): string{return 'ses-v2';}}