【问题标题】:Configure SwiftMailer "Local Domain" setting easily, in Symfony 2在 Symfony 2 中轻松配置 SwiftMailer “本地域”设置
【发布时间】:2023-03-21 00:27:01
【问题描述】:

SwiftMailer 是从 Symfony 2 项目发送电子邮件的默认方式,我想在应用程序中使用它。我已将其指向我的互联网提供商(英国的 Virgin Media)提供的 SMTP 服务器,但我的电子邮件未成功发送。抛出的异常说

预期的响应代码为 250,但得到代码“501”,消息为“501 HELO 需要有效地址

响应 SMTP 命令

HELO [::1]

[::1] 对应于 IPv6 中的 localhost,如果 SMTP 服务器期望正确的域名,它会拒绝它也就不足为奇了。通过Swiftmailer源码跟踪执行,发现这个值来自AbstractSmtpTransport上的_domain;在调试会话期间更改值允许发送电子邮件。虽然它可以使用公共的 setLocalDomain() 方法设置,但它不在 Symfony 2 框架中的任何地方,所以似乎没有办法(至少对我来说很明显)简单地配置这个值,例如,更改 Symfony 配置文件。

所以我的问题是:有没有其他方法可以改变这个值,最好是使用配置,而不需要深入研究 Symfony 代码并改变不应该改变的位?如果有,是什么?

【问题讨论】:

  • 这个问题已经解决了将近 4 年...等待发布..
  • [喘气] 太棒了! :)

标签: php symfony swiftmailer


【解决方案1】:

在 Symfony 控制器内部,您可以像这样配置 HELO/EHLO 名称: $this->get('swiftmailer.transport')->setLocalDomain('your.domain');

【讨论】:

    【解决方案2】:

    很遗憾没有。

    在 SwiftMailer 中获取本地域的代码是:

    /** Try to determine the hostname of the server this is run on */
    private function _lookupHostname()
    {
        if (!empty($_SERVER['SERVER_NAME'])
            && $this->_isFqdn($_SERVER['SERVER_NAME']))
        {
            $this->_domain = $_SERVER['SERVER_NAME'];
        } elseif (!empty($_SERVER['SERVER_ADDR'])) {
            $this->_domain = sprintf('[%s]', $_SERVER['SERVER_ADDR']);
        }
    }
    

    所以,猜测是服务器配置。

    我为 SwiftMailer 打开了一个问题:

    https://github.com/swiftmailer/swiftmailer/issues/453

    更新:问题已于 2018 年 2 月 27 日解决。

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多