SwiftMailer – это способ отправки электронной почты по умолчанию из проекта Symfony 2, и я хотел бы использовать его в приложении. Я указал его на SMTP-сервер, предоставленный моим интернет-провайдером (Virgin Media, в Великобритании), но мои письма не отправлены успешно. Исключенное исключение говорит
Ожидаемый код ответа 250, но получил код «501», с сообщением «501 HELO» требует действительного адреса
- Symfony2 Twig переопределяет функцию пути по умолчанию
- Symfony: Как заставить JMS Serializer работать со строгими типами?
- ClassNotFoundException: Попытка загрузить класс «Mongo» из ... (с сохранением) symfony2
- Значение входного значения FormType по умолчанию в той же форме
- Сбой Symfony2 после обновления композитора
в ответ на команду SMTP
HELO [:: 1]
[:: 1] соответствует localhost в IPv6, и не удивительно, что SMTP-сервер отклонил это, если он ожидает правильное имя домена. Отслеживая выполнение через источник Swiftmailer, я считаю, что это значение происходит от _domain на AbstractSmtpTransport; изменение значения во время сеанса отладки позволяет отправить электронное письмо. Хотя он может быть установлен с использованием общедоступного метода 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 проблему:
Изнутри контроллера Symfony вы можете настроить имя HELO / EHLO следующим образом: $this->get('swiftmailer.transport')->setLocalDomain('your.domain');