Как отключить «verify_peer» с Symfony компонентом Mailer? - PullRequest
6 голосов
/ 21 февраля 2020

Я настраиваю почтовый сервер (postfix) с самозаверяющим сертификатом, и кажется, что самозаверяющий сертификат является проблемой для Symfony компонента Mailer.

В Swiftmailer, используя некоторую конфигурацию такие как:

transport:
    stream_options:
        ssl:
            allow_self_signed: true

или

stream_options:
    ssl:
        verify_peer: false
        verify_peer_name: false

может исправить это, но я не могу найти способ сделать это на почтовой программе (я хочу использовать файлы конфигурации YAML, если это возможно) ).

Ответы [ 2 ]

6 голосов
/ 21 февраля 2020

Эта опция будет включена, когда этот запрос на извлечение , который уже был объединен с главным, помечен и выпущен.

Так что, похоже, вам придется подождать следующего Symfony релиза (он был объединен с веткой 5.1, поэтому не похоже, что он вообще будет доступен в ветке 4.x). ), а затем вы сможете сделать это, добавив verify_peer к вашей конфигурации DSN Mailer.

Регулярно вы сможете настраивать Mailer, вам нужно только создать среду MAILER_DSN переменная (обычно достаточно установить значение для одного из ваших файлов .env).

В ближайшее время вы сможете сделать это:

MAILER_DSN=smtp://user:pass@localhost?verify_peer=false

Но сейчас (с 4.4.4 и 5.0.4) вы не можете сделать это изначально с Symfony Mailer.

0 голосов
/ 07 мая 2020

К сожалению, функция verify_peer отсутствует в symfony 4.4 (пока), так как @yivi утверждает правильно.

Я пытался обновить symfony / mailer в composer до dev-master, но ограничения symfony flex не позволяют этого из-за:

Ограничение пакетов, перечисленных в "symfony / symfony "to" 4.4. * "

Итак, я переопределил mailer.transport_factory.smtp:

mailer.transport_factory.smtp:
    class: App\Mailer\EsmtpTransportFactory
    tags:
      - { name: 'mailer.transport_factory', priority: "-100" }

с помощью пользовательского EsmtpTransportFactory, который содержит эту функцию:

<?php


namespace App\Mailer;

use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mailer\Transport\TransportInterface;

final class EsmtpTransportFactory extends AbstractTransportFactory
{
    public function create(Dsn $dsn): TransportInterface
    {
        $tls = 'smtps' === $dsn->getScheme() ? true : null;
        $port = $dsn->getPort(0);
        $host = $dsn->getHost();

        $transport = new EsmtpTransport($host, $port, $tls, $this->dispatcher, $this->logger);

        if (!$dsn->getOption('verify_peer', true)) {
            /** @var SocketStream $stream */
            $stream = $transport->getStream();
            $streamOptions = $stream->getStreamOptions();

            $streamOptions['ssl']['verify_peer'] = false;
            $streamOptions['ssl']['verify_peer_name'] = false;

            $stream->setStreamOptions($streamOptions);
        }

        if ($user = $dsn->getUser()) {
            $transport->setUsername($user);
        }

        if ($password = $dsn->getPassword()) {
            $transport->setPassword($password);
        }

        return $transport;
    }

    protected function getSupportedSchemes(): array
    {
        return ['smtp', 'smtps'];
    }
}

Полагаю, было бы лучше, если бы эта функция была портирована на 4.4, но пока я использую этот обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...