Недавно я проверил веб-форму онлайн после тестирования в XAMPP с использованием ретранслятора SMTP и Swiftmailer. В ретрансляции Google не было никаких проблем с использованием моего собственного почтового ящика, однако при попытке переключиться на рекомендуемое ретранслятором и инструкциями моего провайдера хостинга (Siteground), используя также электронную почту на основе домена, моя форма висит на отправке, и я получаю следующее:Почему моя онлайн-контактная форма создает предупреждение и фатальную ошибку, когда после отправки используется ретрансляция моего хоста, но не с помощью Google?
Warning: stream_socket_enable_crypto(): Peer certificate CN=`*.sgcpanel.com' did not match expected CN=`uk2.siteground.eu' in /home/tho/public_html/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php on line 95
Fatal error: Uncaught exception 'Swift_TransportException' with message 'Unable to connect with TLS encryption' in /home/tho/public_html/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php:289 Stack trace: #0 /home/tho/public_html/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(118): Swift_Transport_EsmtpTransport->_doHeloCommand() #1 /home/tho/public_html/swiftmailer/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #2 /home/tho/public_html/sendmessage.php(30): Swift_Mailer->send(Object(Swift_Message)) #3 {main} thrown in /home/tho/public_html/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php on line 289
Обратите внимание, что сама учетная запись электронной почты работает отлично. Он настроен в Mac Mail и отправляет и получает без каких-либо проблем.
Мой хостинг-провайдер пытается, но я не думаю, что они могут понять, какую проблему у меня есть. Я закончил тем, что сузил его до функции транспорта. Смотрите мой код, используя PHP:
Google (который работает, как ожидалось):
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls')
->setUsername('[email protected]')
->setPassword('APP GENERATED PASSWORD');
хостинг провайдера (который не работает, как ожидалось):
$transport = Swift_SmtpTransport::newInstance('uk2.siteground.eu', 25, 'tls')
->setUsername('[email protected]')
->setPassword('MY EMAIL PASSWORD');
код кажется нормально меня, поскольку это только замена деталей. Это были настройки, предоставленные Siteground.
Я до сих пор попытался следующие:
- Изменены порты между 2525, 25, 587 и 465 без успеха;
- Переключено между TLS и SSL без успеха;
- Изменен мой пароль, пробуя различные комбинации без специальных персонажей без успеха;
- Пробовал поиск в Google всех перестановок «Swiftmailer Siteground SMTP и т. Д.», Но ничего не возникло.
- Обновлен Swiftmailer до последней версии сервера без каких-либо успехов;
Я добавил дополнительные билеты, и они обновили сервер PHP для меня. Это теперь не показывает ошибку, а просто число ноль (т. Е. '0'). Также электронная почта не отправляется, но сейчас это отдельная проблема.
Хост-сервер использует PHP 5.5.30, поэтому я не уверен, как это влияет на меня в отношении этого. – tomdot
Сертификат на сервере по-прежнему не прав, поэтому вам может потребоваться отключить проверку в любом случае, если поставщик услуг не может/не будет правильно устанавливать свой сертификат. Представленный сертификат не содержит uk2.siteground.eu в общих именах или альтернативных именах, поэтому программное обеспечение должно отклонить его. Возможно, у них есть другое имя для сервера, заканчивающегося на sgcpanel.com, который вы могли бы использовать. https://www.ssllabs.com/ssltest/analyze.html?d=uk2.siteground.eu (это для 443, но они представлены на 587) –
На моем php 5.5.30 (OS X 10.11.2) Я могу подключиться к порту 587 без ошибки сертификата, но, естественно, получить ошибку аутентификации, используя простой файл. 'require_once 'lib/swift_required.php'; $ transport = Swift_SmtpTransport :: newInstance ('uk2.siteground.eu', 587, 'tls') -> setUsername ('[email protected] ') -> setPassword (' MY EMAIL PASSWORD '); $ mailer = Swift_Mailer :: newInstance ($ transport); $ message = Swift_Message :: newInstance ('test') -> setFrom (array ('[email protected] '=>' John Doe ')) -> setTo (array ([email protected]' = > 'A test')) -> setBody ('Hello') ; $ result = $ mailer-> send ($ message); ' –