前两天将微信公众号集成到主题上的时候把我爱水煮鱼的 WPJAM 插件删除了。删除之后忘记网站 SMTP 邮箱发件是用它配置的了,结果导致部分用户注册失败的问题,在此表示歉意。

关于网站使用 SMTP 插件发送邮件的因缘及跳坑方法可以参考这几篇文章:

虽然我不反对使用插件,但目前有能力通过代码实现一些简单的功能,而为了这么一个简单功能安装一个插件好像也不太合适了,所以考虑使用代码实现。具体代码如下,相关位置以做好注释,大家只需要将最上面参数定义的位置改成自己的配置内容,然后放到主题 functions.php 文件中即可。

<?php
/**
 * SMTP 发信设置
 */

$smtpHost          = QGG_Options('smtp_mail_host') ? QGG_Options('smtp_mail_host') : "smtp.qq.com";            // SMTP服务器地址
$smtpSecure        = QGG_Options('smtp_mail_secure') ? QGG_Options('smtp_mail_secure') : "ssl";     // 是否验证 SSL
$smtpPort          = QGG_Options('smtp_mail_port') ? QGG_Options('smtp_mail_port') : 465;            // SMTP邮件发送端口
$smtpUser          = QGG_Options('smtp_mail_user') ? QGG_Options('smtp_mail_user') : "";            // 你的邮箱地址
$smtpPass          = QGG_Options('smtp_mail_pass') ? QGG_Options('smtp_mail_pass') : "";            // 你的邮箱登录密码
$smtpMailFromName  = QGG_Options('smtp_mail_from_name') ? QGG_Options('smtp_mail_from_name') : "";  // 发送邮件名称
$smtpReplyToMail   = QGG_Options('smtp_mail_reply_to') ? QGG_Options('smtp_mail_reply_to') : "";    // 回复邮件地址

/* 以上内容修改为自己的配置参数即可,注意 QGG_Options 是我主题用来配置后台选项的,删掉即可 */


// 常量定义
define('SMTP_MAIL_HOST', $smtpHost);
define('SMTP_MAIL_SECURE', $smtpSecure);
define('SMTP_MAIL_PORT', $smtpPort);
define('SMTP_MAIL_USER', $smtpUser);
define('SMTP_MAIL_PASS', $smtpPass);
define('SMTP_MAIL_FROM_NAME', $smtpMailFromName);
define('SMTP_MAIL_REPLY_TO', $smtpReplyToMail);

//使用 smtp 发邮件
add_action('phpmailer_init', 'php_mail_smtp');
function php_mail_smtp( $phpmailer ) {
	$phpmailer->IsSMTP();                             // 通过 SMTP 发送
	$phpmailer->SMTPAuth = true;                      // 启用 SMTPAuth 服务
	$phpmailer->Host = SMTP_MAIL_HOST;                // SMTP 服务器
	$phpmailer->SMTPSecure = SMTP_MAIL_SECURE;        // SMTP 安全加密
	$phpmailer->Port = SMTP_MAIL_PORT;                // SMTP 端口号
	$phpmailer->Username = SMTP_MAIL_USER;            // SMTP 发信用户名
	$phpmailer->Password = SMTP_MAIL_PASS;            // SMTP 发信密码或授权码
	
	if( SMTP_MAIL_REPLY_TO ){     // 自定义回复给那个邮箱(邮箱地址+收件人名)
		$phpmailer->AddReplyTo( SMTP_MAIL_REPLY_TO, SMTP_MAIL_FROM_NAME);
	}
}

// 过滤 WordPress 默认设置
add_filter( 'wp_mail_from', '_wp_mail_from' );
function _wp_mail_from() {
	return  SMTP_MAIL_USER ;
}
add_filter('wp_mail_from_name', '_wp_mail_from_name');
function _wp_mail_from_name($smtpReplyToMail){
	return SMTP_MAIL_FROM_NAME ?: $smtpReplyToMail;
}

以上。