is_email_address_unsafe()
云策文档标注
概述
is_email_address_unsafe() 函数用于检查用户注册时提供的电子邮件地址是否在禁止域名列表中。该检查仅适用于自注册场景,管理员创建用户时不会触发此检查。
关键要点
- 函数通过 get_site_option('banned_email_domains') 获取禁止域名列表,并检查电子邮件地址的域名是否匹配或子域名匹配。
- 返回布尔值:true 表示电子邮件地址被禁止,false 表示安全。
- 包含一个可过滤的 Hook:apply_filters('is_email_address_unsafe', $is_email_address_unsafe, $user_email),允许开发者自定义检查逻辑。
- 主要用于 wpmu_validate_user_signup() 函数中,以验证用户注册数据。
代码示例
function is_email_address_unsafe( $user_email ) {
$banned_names = get_site_option( 'banned_email_domains' );
if ( $banned_names && ! is_array( $banned_names ) ) {
$banned_names = explode( "n", $banned_names );
}
$is_email_address_unsafe = false;
if ( $banned_names && is_array( $banned_names ) && false !== strpos( $user_email, '@', 1 ) ) {
$banned_names = array_map( 'strtolower', $banned_names );
$normalized_email = strtolower( $user_email );
list( $email_local_part, $email_domain ) = explode( '@', $normalized_email );
foreach ( $banned_names as $banned_domain ) {
if ( ! $banned_domain ) {
continue;
}
if ( $email_domain === $banned_domain ) {
$is_email_address_unsafe = true;
break;
}
if ( str_ends_with( $normalized_email, ".$banned_domain" ) ) {
$is_email_address_unsafe = true;
break;
}
}
}
return apply_filters( 'is_email_address_unsafe', $is_email_address_unsafe, $user_email );
}注意事项
- 检查仅在用户自注册时生效,管理员在 wp-admin/network/users.php 创建用户时不会应用此检查。
- 禁止域名列表存储在站点选项中,可通过 wp-admin/network/settings.php 管理。
- 函数内部使用 str_ends_with() 进行子域名匹配,确保兼容性。
原文内容
Checks an email address against a list of banned domains.
Description
This function checks against the Banned Email Domains list at wp-admin/network/settings.php. The check is only run on self-registrations; user creation at wp-admin/network/users.php bypasses this check.
Parameters
$user_emailstringrequired-
The email provided by the user at registration.
Source
function is_email_address_unsafe( $user_email ) {
$banned_names = get_site_option( 'banned_email_domains' );
if ( $banned_names && ! is_array( $banned_names ) ) {
$banned_names = explode( "n", $banned_names );
}
$is_email_address_unsafe = false;
if ( $banned_names && is_array( $banned_names ) && false !== strpos( $user_email, '@', 1 ) ) {
$banned_names = array_map( 'strtolower', $banned_names );
$normalized_email = strtolower( $user_email );
list( $email_local_part, $email_domain ) = explode( '@', $normalized_email );
foreach ( $banned_names as $banned_domain ) {
if ( ! $banned_domain ) {
continue;
}
if ( $email_domain === $banned_domain ) {
$is_email_address_unsafe = true;
break;
}
if ( str_ends_with( $normalized_email, ".$banned_domain" ) ) {
$is_email_address_unsafe = true;
break;
}
}
}
/**
* Filters whether an email address is unsafe.
*
* @since 3.5.0
*
* @param bool $is_email_address_unsafe Whether the email address is "unsafe". Default false.
* @param string $user_email User email address.
*/
return apply_filters( 'is_email_address_unsafe', $is_email_address_unsafe, $user_email );
}
Hooks
- apply_filters( ‘is_email_address_unsafe’, bool $is_email_address_unsafe, string $user_email )
-
Filters whether an email address is unsafe.
Changelog
| Version | Description |
|---|---|
| MU (3.0.0) | Introduced. |