diff --git a/Transport.php b/Transport.php index f24df83..aa3016b 100644 --- a/Transport.php +++ b/Transport.php @@ -107,8 +107,7 @@ public function fromStrings(#[\SensitiveParameter] array $dsns): Transports public function fromString(#[\SensitiveParameter] string $dsn): TransportInterface { [$transport, $offset] = $this->parseDsn($dsn); - $dnsWithoutMainOptions = preg_replace('/[?&]retry_period=\d+/', '', $dsn); - if ($offset !== \strlen($dnsWithoutMainOptions)) { + if ($offset !== \strlen($dsn)) { throw new InvalidArgumentException('The mailer DSN has some garbage at the end.'); } @@ -122,10 +121,6 @@ private function parseDsn(#[\SensitiveParameter] string $dsn, int $offset = 0): 'roundrobin' => RoundRobinTransport::class, ]; - $parsedUrl = parse_url($dsn); - parse_str($parsedUrl['query'] ?? '', $query); - $retryPeriod = min((int) ($query['retry_period'] ?? 60), 60); - while (true) { foreach ($keywords as $name => $class) { $name .= '('; @@ -150,7 +145,12 @@ private function parseDsn(#[\SensitiveParameter] string $dsn, int $offset = 0): } } - return [new $class($args, $retryPeriod), $offset]; + parse_str(substr($dsn, $offset + 1), $query); + if ($period = $query['retry_period'] ?? 0) { + return [new $class($args, (int) $period), $offset + \strlen('retry_period='.$period) + 1]; + } + + return [new $class($args), $offset]; } }