问题

使用万网免费虚拟主机时,使用php代码测试mail函数发现是开启的,但是各种发邮件都是失败。于是开始转投smtp的方式发邮件,安了几个smtp插件后,每个插件发邮件的测试结果都是这两句:

string(22) "SMTP connect() failed."
SMTP -> ERROR: Failed to connect to server:  (0)

换了qq、sina的smtp服务器也无法解决这个问题。

解决

原因在于wordpress的默认smtp功能使用了steam_connect_client这个组件,而万网支持的是fsockopen组件,所以我们需要替换一下代码。

解决方法为从服务器里下载wordpress根目录下的/wp-include/class-smtp.php,将下面这段替换

$socket_context = stream_context_create($options);
$this->smtp_conn = @stream_socket_client(
$host . ":" . $port,
$errno,
$errstr,
$timeout,
STREAM_CLIENT_CONNECT,
$socket_context
);

替换的代码为:

$this->smtp_conn = @fsockopen($host,$port,$errno,$errstr,$timeout);

注意

每次wordpress主程序更新后,修改会被更新覆盖回原来的版本,所以每次wordpress更新都需要对这段代码重复操作。

文章目录