Я пытаюсь использовать php-функцию fsockopen на SMTP-сервере, используя ssl на порту 465 на моем локальном сервере с apache. Он хорошо работает с командной строкой php, но при запуске скрипта в моем браузере я получаю сообщение об ошибке SSL.
Любая помощь будет принята с благодарностью 🙂
php.ini
extension=php_openssl.dll line is not commented
phpinfo через Apache
Loaded Configuration File : D:\localhost\php-5.4.11\php.ini openssl OpenSSL support enabled OpenSSL Library Version OpenSSL 0.9.8x 10 May 2012 OpenSSL Header Version OpenSSL 0.9.8x 10 May 2012
phpinfo с командной строкой
Loaded Configuration File => D:\localhost\php-5.4.11\php.ini openssl OpenSSL support => enabled OpenSSL Library Version => OpenSSL 0.9.8x 10 May 2012 OpenSSL Header Version => OpenSSL 0.9.8x 10 May 2012
Мой скрипт
<?php $smtp = fsockopen('ssl://in.mailjet.com', 465, $errno, $errstr, 30); $response = fgets($smtp, 4096); if(empty($smtp)){ echo $response; return false; } echo $response . '<br/>'; fclose($smtp);
Вывод под apache
Warning: fsockopen(): SSL: crypto enabling timeout in XXX on line 2 Warning: fsockopen(): Failed to enable crypto in XXX on line 2 Warning: fsockopen(): unable to connect to ssl://in.mailjet.com:465 (Unknown error) in XXX on line 2
Выход с командной строкой
220 srv12.mailjet.com ESMTP Mailjet <br/>
Платформа
Я использую PHP 5.4.11 / Apache 2.2.22 (Win32) для Windows 8 64
– Изменить – я попытался использовать TLS, как было предложено:
$smtp = fsockopen('tls://in.mailjet.com', 567, $errno, $errstr, 30);
И я получаю
E_WARNING: fsockopen(): in XXX on line XXX
Сообщение об ошибке пустое и $ errno = (int) 0 и $ errstr = (строка) ''
Я обновил версию Apache с 2.2 до 2.4 и теперь работает.
Я следил за этим преподавателем: http://lifeofageekadmin.com/how-install-apache-2-4-php-5-4-and-mysql-5-5-21-on-windows-7/, чтобы получить новой версии Apache.
У меня была аналогичная проблема с контактной формой, которая использует captcha, получив ошибку fsockopen (): не удалось подключиться к ssl: //mail.google.com: 443
Это на FreeBSD vm, с установленной Joomla.
я нашел http://php.net/manual/en/function.fsockopen.php, который упоминал проверку сертификата.
Установлен порт FreeBSD «ca_root_nss», который включает проверку сертификата для корневых сертификатов из органов сертификации, включенных в библиотеку NSS Mozilla