Сервер WordPress.org: PHP не может получить доступ к SMTP-портам, но telnet может

Я настраивал WordPress на компьютере с CentOS 6.6, и я довольно новичок в этом деле. Новая установка, так что все актуальные версии httpd, php, mySQL и WordPress.

Теперь все работает, кроме отправки электронной почты по SMTP. Я установил несколько плагинов в WordPress для настройки SMTP, но отправка тестового электронного письма всегда приводит к ошибке, как SMTP connect () не удается. Я сделал больше, чем уверен, что мои полномочия в порядке.

Из командной строки я попробовал это:

telnet smtp.gmail.com 25

а также

openssl s_client -connect smtp.gmail.com:465

И они оба без проблем подключают меня к SMTP в Gmail. Из-за продолжающейся ошибки, из-за которой WordPress не может подключиться, в конце концов я решил исключить WordPress из уравнения и создал на своем сервере тестовый файл php, содержащий следующий код, который возвращает «не отвечает» для всех портов:

<?php
$host = 'smtp.gmail.com';
$ports = array(25, 465, 587);
foreach ($ports as $port)
{
$connection = @fsockopen($host, $port);

if (is_resource($connection))
{
echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";

fclose($connection);
}

else
{
echo '<h2>' . $host . ':' . $port . ' is not responding.</h2>' . "\n";
}
}

Изменение приведенного выше сценария php на www.gmail.com и добавление портов 80 и 443 показывает, что 80 и 443 ОТКРЫТЫ, а остальные закрыты (что имеет смысл, поскольку я сейчас смотрю на сервер www), поэтому сценарий выглядит так: работать хорошо

Я предполагаю, что это должно быть какой-то проблемой в самом PHP, не позволяющей мне выйти через любой из SMTP-портов (так как я могу telnet к этим портам из cmdline)

Я не могу понять, в чем проблема в PHP. У кого-нибудь есть указания, как решить эту проблему?

1

Решение

Нашел свой ответ 🙂 Тот факт, что audit.log вводил записи каждый раз, когда я пытался получить доступ к любому из SMTP-портов из PHP, звонил в звонок: SELinux был виновником.

Временное отключение SELinux заставило его снова работать:

echo 0 >/selinux/enforce

После того, как это сработало, я снова включил SELinux:

echo 1 >/selinux/enforce

… и, наконец, я обнаружил, что этот cmd настроит SELinux для разрешения SMTP через apache / PHP:

setsebool -P httpd_can_network_connect on
1

Другие решения

В заключение! Я потратил не менее 8 часов, чтобы выяснить, почему я могу отправлять почту с помощью оболочки, а не WordPress. Это исправило мою проблему!

 $ sudo setsebool -P httpd_can_sendmail 1
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector