Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

EsmtpTransportFactory.php

Namespace

Symfony\Component\Mailer\Transport\Smtp

File

vendor/symfony/mailer/Transport/Smtp/EsmtpTransportFactory.php

View source
<?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\Smtp;

use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream;
use Symfony\Component\Mailer\Transport\TransportInterface;

/**
 * @author Konstantin Myakshin <molodchick@gmail.com>
 */
final class EsmtpTransportFactory extends AbstractTransportFactory {
    public function create(Dsn $dsn) : TransportInterface {
        if (!\in_array($dsn->getScheme(), $this->getSupportedSchemes(), true)) {
            throw new UnsupportedSchemeException($dsn, 'smtp', $this->getSupportedSchemes());
        }
        $autoTls = '' === $dsn->getOption('auto_tls') || filter_var($dsn->getOption('auto_tls', true), \FILTER_VALIDATE_BOOL);
        $tls = 'smtps' === $dsn->getScheme() ? true : ($autoTls ? null : false);
        $port = $dsn->getPort(0);
        $host = $dsn->getHost();
        $transport = new EsmtpTransport($host, $port, $tls, $this->dispatcher, $this->logger);
        $transport->setAutoTls($autoTls);
        
        /** @var SocketStream $stream */
        $stream = $transport->getStream();
        $streamOptions = $stream->getStreamOptions();
        if ('' !== $dsn->getOption('verify_peer') && !filter_var($dsn->getOption('verify_peer', true), \FILTER_VALIDATE_BOOL)) {
            $streamOptions['ssl']['verify_peer'] = false;
            $streamOptions['ssl']['verify_peer_name'] = false;
        }
        if (null !== ($peerFingerprint = $dsn->getOption('peer_fingerprint'))) {
            $streamOptions['ssl']['peer_fingerprint'] = $peerFingerprint;
        }
        $stream->setStreamOptions($streamOptions);
        if ($user = $dsn->getUser()) {
            $transport->setUsername($user);
        }
        if ($password = $dsn->getPassword()) {
            $transport->setPassword($password);
        }
        if (null !== ($localDomain = $dsn->getOption('local_domain'))) {
            $transport->setLocalDomain($localDomain);
        }
        if (null !== ($maxPerSecond = $dsn->getOption('max_per_second'))) {
            $transport->setMaxPerSecond((double) $maxPerSecond);
        }
        if (null !== ($restartThreshold = $dsn->getOption('restart_threshold'))) {
            $transport->setRestartThreshold((int) $restartThreshold, (int) $dsn->getOption('restart_threshold_sleep', 0));
        }
        if (null !== ($pingThreshold = $dsn->getOption('ping_threshold'))) {
            $transport->setPingThreshold((int) $pingThreshold);
        }
        return $transport;
    }
    protected function getSupportedSchemes() : array {
        return [
            'smtp',
            'smtps',
        ];
    }

}

Classes

Title Deprecated Summary
EsmtpTransportFactory @author Konstantin Myakshin <molodchick@gmail.com>
RSS feed
Powered by Drupal