Wordpress使用SMTP发送邮件
问题
使用万网免费虚拟主机时,使用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更新都需要对这段代码重复操作。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。