Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “如何禁用”;验证“对等”;使用Symfony Mailer组件?_Php_Symfony_Symfony4_Symfony Mailer - Fatal编程技术网

Php “如何禁用”;验证“对等”;使用Symfony Mailer组件?

Php “如何禁用”;验证“对等”;使用Symfony Mailer组件?,php,symfony,symfony4,symfony-mailer,Php,Symfony,Symfony4,Symfony Mailer,我正在配置一个带有自签名证书的邮件服务器(postfix),而这个自签名证书似乎是Symfony Mailer组件的一个问题 在Swiftmailer上,使用一些配置,例如: transport: stream_options: ssl: allow_self_signed: true 或 可能会修复它,但我无法在mailer上找到这样做的方法(如果可能的话,我希望使用YAML配置文件) 此选项将在已合并到主控中的文件被标记并释放时启用 因此,您

我正在配置一个带有自签名证书的邮件服务器(postfix),而这个自签名证书似乎是Symfony Mailer组件的一个问题

在Swiftmailer上,使用一些配置,例如:

transport:
    stream_options:
        ssl:
            allow_self_signed: true


可能会修复它,但我无法在mailer上找到这样做的方法(如果可能的话,我希望使用YAML配置文件)

此选项将在已合并到主控中的文件被标记并释放时启用

因此,您似乎必须等待下一个Symfony发行版(该版本已合并到5.1分支中,因此看起来它在4.x分支中根本不可用),然后您可以通过向Mailer DSN配置中添加
verify_peer
来完成此操作

您可以定期配置Mailer(通常在
.env
文件之一上设置值就足够了)

在不久的将来,您将能够做到这一点:

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

但是现在(从4.4.4和5.0.4开始),您无法使用Symfony Mailer以本机方式完成此操作。

不幸的是,请验证@yivi正确说明的Symfony 4.4中没有对等功能

我尝试将composer中的symfony/mailer更新为dev master,但symfony flex约束不允许这样做,因为:

将“symfony/symfony”中列出的包限制为“4.4.*”

因此,我最终覆盖了
mailer.transport\u factory.smtp

mailer.transport_factory.smtp:
    class: App\Mailer\EsmtpTransportFactory
    tags:
      - { name: 'mailer.transport_factory', priority: "-100" }
使用包含此功能的自定义ESMTPTTransportFactory:

<?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会更好,但只要我使用此解决方法。

您可以使用:

MAILER_DSN="smtp://user:pass@localhost?encryption=ssl&stream_options[ssl][verify_peer]=false&stream_options[ssl][verify_peer_name]=false&stream_options[ssl][allow_self_signed]=true"

最简单的解决方案是显式指定端口:

MAILER_DSN=smtp://127.0.0.1:25

看起来很完美!但它似乎还没有被贴上标签,是吗?我目前在4.4上,没有可用的更新,我没有这个…你是对的,它似乎没有被合并。它存在于上,但不存在于上。我将修改答案以反映这一点。我确信4.4.5应该尽快发布。你的意思是这个问题将在4.4.5中解决,而不是在4.4.4中解决?因为我有同样的问题,我使用的是最后一个lTS(4.4.4)@hous-Yup,正如答案和评论中所解释的;4.4.4尚未包括此功能。因为它已经合并到master,下一个版本应该包括它。@yivi,是的,我会的;)但是你知道4.4.5什么时候发布吗?因为我要用4.4.4做一个项目,在迁移到5.2之前,我不喜欢使用SwiftMailerThanks来解决这个工作环境,我没有投票反对或关闭您的其他问题。。。我真的很讨厌人们那样做。。。
MAILER_DSN="smtp://user:pass@localhost?encryption=ssl&stream_options[ssl][verify_peer]=false&stream_options[ssl][verify_peer_name]=false&stream_options[ssl][allow_self_signed]=true"
MAILER_DSN=smtp://127.0.0.1:25