/ fsockopen

fsockopen、pfsockopen函数被禁用导致WordPress无法SMTP发信解决方案

起因:

前不久本站新换了一台服务器,但是发现在发信的时候总是提示找不到SMTP服务器,问了下主机商,说是服务器禁用了fsockopen和pfsockopen两个函数导致的。

解决思路:

很简单,找到替代函数或者自己写一个函数来实现。

解决方案1:

使用函数stream_socket_client()。找到wp-include/class-smtp.php的第128行(3.31版本的wordpress),将原来的代码

$this->smtp_conn = @fsockopen($host, // the host of the server $port, // the port to use $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs

替换为

$this->smtp_conn = @stream_socket_client($host.":".$port, $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs

解决方案2:

如果服务器不支持stream_socket_client函数,那么就自定义一个函数

function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) { $ip = gethostbyname($host); $s = socket_create(AF_INET, SOCK_STREAM, 0); if (socket_set_nonblock($s)) { $r = @socket_connect($s, $ip, $port); if ($r ¦¦ socket_last_error() == EINPROGRESS) { $errno = EINPROGRESS; return $s; } } $errno = socket_last_error($s); $errstr = socket_strerror($errno); socket_close($s); return false; }

然后再把wp-include/class-smtp.php的第128行的fsockopen改为b_fsockopen即可。

fsockopen、pfsockopen函数被禁用导致WordPress无法SMTP发信解决方案
Share this