Wordpress主机SMTP发送邮件解决方案

最近一客户同学说换了个主机,发送邮件的部分各种的失败,主机商回应禁用了 PHP mail() 发信函数,而 Wordpress 默认使用的正好是 PHP mail() 函数,可先自行 检测Linux主机是否支持PHP mail() 函数,不然只能选择 SMTP 方案。

一、使用 SMTP 类插件

wordpress SMTP 发信插件很多,在此以老杨用的 WP Mail SMTP 为例,老杨使用的是腾讯QQ的域名邮箱,注意几个参数设置即可。

Wordpress虚拟主机SMTP发送邮件解决方案-2105

Mailer: 选择 Send all WordPress emails via SMTP.
SMTP Host: 服务器 smtp.qq.com (老杨以QQ域名邮箱为例)
SMTP Port: 端口 25
Encryption: 验证方式选 No encryption. 如果选SSL的话,上面端口要填写 465
Authentication: 需要认证 Yes: Use SMTP authentication.
Username: 发送邮箱的Email
Password: 发送邮件的Email密码,如使用QQ域名邮箱需要填写QQ密码 或 QQ邮箱的独立密码(如有设置)。

二、修改 wordpress 源代码

Wordpress 基于 SMTP 发送邮件时,默认使用 steam_connect_client() 函数,如需使用 fsockopen() 函数的话,则需要做相应的修改。

打开 wp-includes/class-smtp.php 文件,查找如下代码段(约276行):

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

将上述代码注释掉,增加以下代码:

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

修改源码的方式尽量少用,升级不方便,推荐方案一。