2016-09-02 2 views
0

Я обновляю свой PHP на сервере centos до 5.6.25 После того, как обновление выполнено, все работает нормально, но через несколько часов я получил звонок от моего клиента, чтобы исходящие письма не доставлялись получателю.Обновление PHP приводит к ошибке авторизации SMTP

Затем я обнаружил, что исходящие письма доставляются из веб-почты, но письма, которые отправляются с использованием нашего кода PHP, не доставляются.

После проверки результата PHP код, который я нашел ошибку

Ошибка проверки подлинности [SMTP: STARTTLS не удалось (код: 220, ответ: TLS идти вперед)]

Пожалуйста, помогите мне решить эту проблему вопрос.

ответ

0

Я нашел решение этой проблемы ...

Просто зайдите в USR/местные/Библиотека/PHP/Net путь может отличаться от ОС ОС, но в конце концов это Net каталог в каталоге PHP.

найти файл SMTP.php в этом каталоге. В этом файле найти функцию AUTH (- параметр list--) в этом файле он первый, если заявление

if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') 
     && extension_loaded('openssl') && isset($this->esmtp['STARTTLS']) 
     && strncasecmp($this->host, 'ssl://', 6) !== 0 
    ) 

просто сделать изменения следующим образом

if ($tls && version_compare(PHP_VERSION, '6.1.0', '>=') 
     && extension_loaded('openssl') && isset($this->esmtp['STARTTLS']) 
     && strncasecmp($this->host, 'ssl://', 6) !== 0 
    ) 

как я обновил систему его теперь получает следующее условие истинно, и он проверяет OpenSSL и STARTTLS и система не может на данном этапе

version_compare(PHP_VERSION, '5.1.0', '>=') 

так просто изменить свою версию на что-то другое, мю st будет больше, чем обновленная версия, так что снова первое условие будет ложным, а система не будет проверять дальше и будет подключаться без использования TLS.

0

У меня были те же проблемы и наткнулись на решение, и они явно связаны с изменениями в PHP 5.6 (что я не все вместе счастливо).

  1. verify_peer и verify_peer_name теперь по умолчанию установлено значение истинно - требует дополнительного уровня безопасности между двумя машинами, участвующими в текшего порту. Я не хочу этого, когда имею дело с SMTP, для меня достаточно шифрования STARTTLS. Так что выключите их. Я добавил код в файл Net/SMTP.php

    $ options = array ('ssl' => array ('verify_peer_name' => false, 'verify_peer' => false));

    $ result = $ this -> _ socket-> connect ($ this-> host, $ this-> port, $ persistent, $ timeout, $ options);

  2. Значение таймаута сокета, указанное в php.ini, не используется этой функцией. Поэтому я изменил значение по умолчанию в «smtp.php» на:

    $ timeout = 60; // ранее null;

Надежда, которая помогает кому-то еще. Cheers Murray

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