2015-12-19 2 views
0

Недавно я проверил веб-форму онлайн после тестирования в 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'). Также электронная почта не отправляется, но сейчас это отдельная проблема.

ответ

0

Ответ предоставлен моим хозяином. Они внесли некоторые изменения на стороне сервера PHP. Сначала успеха не было, но после ожидания часа или около того, это разобрало проблему.

Ну, может быть, не отсортировано в идеальном смысле, но, по крайней мере, в качестве обходного пути.

1

Из сообщения об ошибке кажется, что сертификат SSL на сервере uk2.siteground.eu не содержит правильное имя хоста для сервера, а скорее подстановочный знак для sgcpanel.com. В сертификате 587 он не содержит uk2.siteground.eu в качестве допустимого имени для сервера.

Если вы используете php 5.6, они изменили значение по умолчанию, чтобы проверить имена одноранговых узлов и одноранговых узлов для сертификатов.

Правильное исправление было бы для Siteground для добавления правильных сертификатов на сервер. Кажется, вы можете переопределить проверки с помощью самой новой версии SwiftMailer на github.

SetStreamOptions, добавленный в сентябре, может решить ваши проблемы, но немного уменьшить безопасность, не проверяя, является ли он правильным сервером, с которым он общается.

Я не в состоянии проверить это на данный момент, но попробовать:

$ssl_options = array(
    'ssl'   => array(
     'verify_peer'  => false, 
     'verfify_peer_name' => false, 
    ), 
); 
$transport->setStreamOptions($ssl_options); 

Или массив может быть

$ssl_options = array(
    'verify_peer'  => false, 
    'verfify_peer_name' => false, 
); 
$transport->setStreamOptions($ssl_options); 

Подробнее:

http://php.net/manual/en/context.ssl.php

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

+0

Хост-сервер использует PHP 5.5.30, поэтому я не уверен, как это влияет на меня в отношении этого. – tomdot

+0

Сертификат на сервере по-прежнему не прав, поэтому вам может потребоваться отключить проверку в любом случае, если поставщик услуг не может/не будет правильно устанавливать свой сертификат. Представленный сертификат не содержит uk2.siteground.eu в общих именах или альтернативных именах, поэтому программное обеспечение должно отклонить его. Возможно, у них есть другое имя для сервера, заканчивающегося на sgcpanel.com, который вы могли бы использовать. https://www.ssllabs.com/ssltest/analyze.html?d=uk2.siteground.eu (это для 443, но они представлены на 587) –

+1

На моем 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); ' –

 Смежные вопросы

  • Нет связанных вопросов^_^