部署网站邮件功能
安装WP Mail SMTP插件
第一次启用会有安装向导,首先选择SMTP Mailer,此处选择Sendinblue
注册Brevo(sendinblue)
点击Campaigns – Settings – Your Senders & Domains
添加域名并选择域名提供商后,会出现域名验证内容,此时需要把Brevo提供的验证信息添加至域名提供商的你的域名对应记录(我用的提供商是Namecheap)
添加好后回到Brevo点击”Authenticate this email domain”,如果上步添加正确则验证成功
然后回到WP Mail SMTP插件安装向导,填入邮件功能基本信息,API密钥点击提供的链接后在Brevo即可获取新的API密钥
至此保存后即可配置完成,可以点击WP Mail SMTP插件的邮件测速功能查看邮件是否能正常发送
关于验证邮件无法正常发送的问题
起初按照上面的步骤,邮件测试也能通过,但新用户注册时验证邮件就是发不了,从网上各种搜都没找到解决方法,最后按网站源码一步步查发现wordpress源码里根本没有用户新注册时发送邮箱验证邮件的功能,但是有发送密码重置邮件、邮箱更改邮件等功能(?把我整绷不住了)
仔细读了一下代码,新用户注册后后台会给其生成一个随机的强密码,然后就没然后了(逆天),我甚至不确定wordpress是否有邮箱验证链接对应的页面
最后的修复方案是在新用户注册后手动调用wp_mail发送内容自定义的邮件,并附上密码重置链接
如果有人出现了和我一样的问题,可以尝试以下方法:
修改user.php文件(一般位于你的wordpress安装目录/wp-includes下),在其中register_new_user()函数的末行改为以下内容:
/**
* Fires after a new user registration has been recorded.
*
* @since 4.4.0
*
* @param int $user_id ID of the newly registered user.
*/
do_action( 'register_new_user', $user_id );
if ( empty( $user_login ) ) {
$errors->add( 'empty_username', __( '<strong>Error:</strong> Please enter a username or email address.' ) );
} elseif ( strpos( $user_login, '@' ) ) {
$user_data = get_user_by( 'email', $user_login );
if ( empty( $user_data ) ) {
$user_data = get_user_by( 'login', $user_login );
}
if ( empty( $user_data ) ) {
$errors->add( 'invalid_email', __( '<strong>Error:</strong> There is no account with that username or email address.' ) );
}
} else {
$user_data = get_user_by( 'login', $user_login );
}
// Send password reset email to the user
$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$reset_key = get_password_reset_key( $user_data );
$reset_link = network_site_url( "wp-login.php?action=rp&key=$reset_key&login=" . rawurlencode( $user_login ), 'login' );
$subject = '邮箱验证';
$message = sprintf( __('您已成功注册,<br><br>Site Name: %s'), $site_name );
$message .= sprintf( __( '<br>Username: %s' ), $user_login );
$message .= __('<br><br>请点击以下链接重置您的密码:');
$message .= '<br><br><a href="' . $reset_link . '">' . $reset_link . '</a>';
$message .= __('<br><br>若这不是您本人要求的,请忽略本邮件,一切如常。');
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $user_email, $subject, $message, $headers );
return $user_id;