Php “配置SwiftMailer”;“本地域”;在Symfony 2中轻松设置

Php “配置SwiftMailer”;“本地域”;在Symfony 2中轻松设置,php,symfony,swiftmailer,Php,Symfony,Swiftmailer,SwiftMailer是从Symfony 2项目发送电子邮件的默认方式,我希望在应用程序中使用它。我把它指向了我的互联网提供商(英国的维珍媒体)提供的SMTP服务器,但我的电子邮件没有成功发送。抛出的异常表示 预期响应代码为250,但获得代码“501”,消息“501 HELO需要有效地址 响应SMTP命令 HELO[::1] [::1]对应于IPv6中的localhost,如果SMTP服务器需要正确的域名,它会拒绝该请求也就不足为奇了。通过Swiftmailer源跟踪执行,我发现该值来自Abst

SwiftMailer是从Symfony 2项目发送电子邮件的默认方式,我希望在应用程序中使用它。我把它指向了我的互联网提供商(英国的维珍媒体)提供的SMTP服务器,但我的电子邮件没有成功发送。抛出的异常表示

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

响应SMTP命令

HELO[::1]

[::1]对应于IPv6中的localhost,如果SMTP服务器需要正确的域名,它会拒绝该请求也就不足为奇了。通过Swiftmailer源跟踪执行,我发现该值来自AbstractSmtpTransport上的_domain;在调试会话期间更改该值可以发送电子邮件可以使用public setLocalDomain()方法设置一个值,它不在Symfony 2框架中的任何位置,因此似乎没有办法(至少对我来说是显而易见的)简单地通过更改Symfony配置文件来配置该值

所以我的问题是:有没有其他方法可以改变这个值,理想情况下使用config,而不必深入Symfony代码和改变不需要改变的位?如果有,怎么办?

不幸的是没有

在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打开了一个问题,以便执行此操作:


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

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

这个问题几乎在4年后得到了解决……等待发布……[gasp]太棒了!:)