2025-09-24 06:24:52 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Mailer\Transport ;
use Psr\EventDispatcher\EventDispatcherInterface ;
use Psr\Log\LoggerInterface ;
use Symfony\Component\HttpClient\HttpClient ;
use Symfony\Component\Mailer\Exception\HttpTransportException ;
use Symfony\Component\Mailer\SentMessage ;
use Symfony\Contracts\HttpClient\HttpClientInterface ;
use Symfony\Contracts\HttpClient\ResponseInterface ;
/**
* @ author Victor Bocharsky < victor @ symfonycasts . com >
*/
abstract class AbstractHttpTransport extends AbstractTransport
{
2025-10-03 11:00:05 +00:00
protected $host ;
protected $port ;
protected $client ;
2025-09-24 06:24:52 +00:00
2025-10-03 11:00:05 +00:00
public function __construct ( ? HttpClientInterface $client = null , ? EventDispatcherInterface $dispatcher = null , ? LoggerInterface $logger = null )
{
$this -> client = $client ;
2025-09-24 06:24:52 +00:00
if ( null === $client ) {
if ( ! class_exists ( HttpClient :: class )) {
2025-10-03 11:00:05 +00:00
throw new \LogicException ( sprintf ( 'You cannot use "%s" as the HttpClient component is not installed. Try running "composer require symfony/http-client".' , __CLASS__ ));
2025-09-24 06:24:52 +00:00
}
$this -> client = HttpClient :: create ();
}
parent :: __construct ( $dispatcher , $logger );
}
/**
* @ return $this
*/
2025-10-03 11:00:05 +00:00
public function setHost ( ? string $host )
2025-09-24 06:24:52 +00:00
{
$this -> host = $host ;
return $this ;
}
/**
* @ return $this
*/
2025-10-03 11:00:05 +00:00
public function setPort ( ? int $port )
2025-09-24 06:24:52 +00:00
{
$this -> port = $port ;
return $this ;
}
abstract protected function doSendHttp ( SentMessage $message ) : ResponseInterface ;
protected function doSend ( SentMessage $message ) : void
{
2025-10-03 11:00:05 +00:00
$response = null ;
2025-09-24 06:24:52 +00:00
try {
$response = $this -> doSendHttp ( $message );
$message -> appendDebug ( $response -> getInfo ( 'debug' ) ? ? '' );
} catch ( HttpTransportException $e ) {
$e -> appendDebug ( $e -> getResponse () -> getInfo ( 'debug' ) ? ? '' );
throw $e ;
}
}
}