如何将代理添加到symfony邮件中?

How to add a proxy to a symfony mailer?

提问人:Elikill58 提问时间:3/24/2023 更新时间:3/25/2023 访问量:210

问:

我正在使用 symfony。我想发送邮件。在开发模式下,我使用的是工作正常的特定 SMTP 服务器,但在生产环境中:我有一个没有身份验证的 SMTP 服务器,需要代理才能使用。

我的代码是:

$mailer->send((new Email())->from("[email protected]")
            ->to("[email protected]")
            ->subject("Subject")
            ->html("Here is my content"));

在我的 I 中,其值是 ..envMAILER_DSNsmtp://from%40my-email.com:@smtp.my-email.com:25

我收到此错误:

Expected response code "220" but got code "554", with message "554 5.7.1 <unknown[1.2.3.4]>: Client host rejected: Access denied".

我搜索了如何添加代理,但symfony文档只是关于cloudflare客户端之类的反向代理(这里我想要一些服务器端的东西)。

如何添加代理来修复它?

symfony 电子邮件 代理 SMTP 邮件程序

评论


答:

0赞 vodevel 3/25/2023 #1

我自己没有做过,但我猜的方式如下:

  1. 使用 with config like default 或 scopeping 客户端symfony/http-client
#framework.yaml
framework:
  http_client:
    proxy:
      host: YOUR_HOST
      port: YOUR_PORT
  1. 使用 DSN 创建自己的传输实例(如 smtp-proxy)并设置 proxy-client:
# in __constructor of custom Transport

$httpClient = new NativeHttpClient();
$this->setClient($httpClient);
/*
#And other settings if needed:
$this
    ->setUsername('your_username')
    ->setPassword('your_password')
    ->setStreamOptions([
        'ssl' => [
            'allow_self_signed' => true,
            'verify_peer' => false,
        ],
    ])
    ->setLocalDomain('[127.0.0.1]')
*/
  1. 在 [dev] .env 中设置MAILER_DSN,例如smtp-proxy://...

因此,代码不会改变,只是在其中使用带有代理 http-client 的传输实例。$mailer->send((new Email())...

评论

0赞 Elikill58 3/27/2023
给定的 yaml 配置似乎在 symfony 6.2 上创建了错误。我用了.然后,它说“不支持 smtp-proxy 方案”。由于我不知道我在哪里添加了我的“自己的交通工具”(所以没有添加),它可以相关吗?http_client: default_options: proxy: '%env(PROXY_URL)%:%env(PROXY_PORT)%'
0赞 vodevel 3/28/2023
以下是有关如何创建自己的传输的第三方示例。不幸的是,我没有代理服务器来创建用于设置它的完全有效的指令。但主要思想是为传输实例安装代理客户端,而不是为邮件程序安装代理客户端。也许,除了symfony/http-client之外,还有一些其他的客户端库,借助它们,创建代理客户端会更容易。