Wordpress.org服务器:PHP无法访问SMTP端口,但telnet可以

时间:2015-02-03 11:31:37

标签: php wordpress apache smtp centos6

我一直在CentOS 6.6机器上安装Wordpress,我对这个东西很陌生。新安装所以所有最新版本的httpd,php,mySQL和Wordpress。

除了使用SMTP发送电子邮件外,现在一切正常。我在Wordpress中安装了几个插件来配置SMTP,但是发送测试电子邮件总是会导致SMTP connect()失败等错误。我做的不仅仅是确保我的凭据还可以。

从命令行我尝试了这些:

telnet smtp.gmail.com 25

openssl s_client -connect smtp.gmail.com:465

他们两个都把我连接到gmail的smtp而没有问题。由于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端口(因为我可以从cmdline telnet到这些端口)

我无法弄清楚PHP中的问题是什么。任何人都有任何指示如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

找到我自己的答案:)每当我尝试从PHP访问任何SMTP端口时,audit.log输入条目的事实响起了响铃:SELinux是罪魁祸首。

暂时禁用SELinux使其再次运行:

echo 0 >/selinux/enforce

在证明有效之后,我使用以下方法启用了SELinux:

echo 1 >/selinux/enforce

...最后我发现这个cmd会配置SELinux以允许SMTP通过apache / PHP:

setsebool -P httpd_can_network_connect on

答案 1 :(得分:1)

最后!我花了至少8个小时来解决为什么我可以使用shell而不是WordPress发送邮件。这解决了我的问题!

 $ sudo setsebool -P httpd_can_sendmail 1