Я настраивал 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. У кого-нибудь есть указания, как решить эту проблему?
Нашел свой ответ 🙂 Тот факт, что 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
В заключение! Я потратил не менее 8 часов, чтобы выяснить, почему я могу отправлять почту с помощью оболочки, а не WordPress. Это исправило мою проблему!
$ sudo setsebool -P httpd_can_sendmail 1