golang实现电子邮件地址规范化处理的插件库go-email-normalizer的使用
golang实现电子邮件地址规范化处理的插件库go-email-normalizer的使用
概述
go-email-normalizer 是一个用于提供电子邮件地址规范化表示的 Golang 库。它可以帮助防止多次注册,包含了一些流行的邮件服务提供商规则,同时也可以轻松添加其他提供商规则。
安装
go get -u github.com/dimuska139/go-email-normalizer/v5
使用示例
package main
import (
"fmt"
"strings"
normalizer "github.com/dimuska139/go-email-normalizer/v5"
)
// 自定义规则结构体
type customRule struct {}
// 处理用户名部分的自定义规则
func (rule *customRule) ProcessUsername(username string) string {
return strings.Replace(username, "-", "", -1)
}
// 处理域名部分的自定义规则
func (rule *customRule) ProcessDomain(domain string) string {
return domain
}
func main() {
// 创建规范化处理器
n := normalizer.NewNormalizer()
// 使用内置规则处理各种邮箱格式
fmt.Println(n.Normalize("vasya+pupkin@gmail.com")) // vasya@gmail.com
fmt.Println(n.Normalize("t.e-St+vasya@gmail.com")) // te-st@gmail.com
fmt.Println(n.Normalize("John+Brown@yahoo.com")) // john+brown@yahoo.com
fmt.Println(n.Normalize("John-Brown@yahoo.com")) // john@yahoo.com
fmt.Println(n.Normalize("t.e-St+@googlemail.com")) // te-st@gmail.com
fmt.Println(n.Normalize("t.e-St+@google.com")) // te-st@gmail.com
// 添加自定义规则
n.AddRule("customrules.com", &customRule{})
fmt.Println(n.Normalize(" tE-S-t@CustomRules.com.")) // tESt@customrules.com
}
支持的邮件服务提供商
- Apple
- Fastmail
- Microsoft
- Protonmail
- Rackspace
- Rambler
- Yahoo
- Yandex
- Zoho
你也可以使用 AddRule
函数集成其他规则(参见上面的示例)。
更多关于golang实现电子邮件地址规范化处理的插件库go-email-normalizer的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang实现电子邮件地址规范化处理的插件库go-email-normalizer的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-email-normalizer 电子邮件地址规范化处理库
go-email-normalizer 是一个用于电子邮件地址规范化的 Golang 库,它可以帮助你处理不同电子邮件提供商的各种格式差异,确保电子邮件地址在比较和存储时的一致性。
主要功能
- 去除电子邮件地址中的点号(对于某些提供商如Gmail)
- 去除子地址(如+后面的部分,对于支持该特性的提供商)
- 将域名转换为小写
- 处理特定提供商的特殊规则
安装
go get github.com/sendgrid/go-email-normalizer
基本使用示例
package main
import (
"fmt"
"github.com/sendgrid/go-email-normalizer/pkg/normalizer"
)
func main() {
// 创建规范化器实例
normalizer := normalizer.NewNormalizer()
// 示例1: 基本规范化
email := "John.Doe+test@gmail.com"
normalized := normalizer.Normalize(email)
fmt.Printf("原始: %s → 规范化: %s\n", email, normalized)
// 输出: 原始: John.Doe+test@gmail.com → 规范化: johndoe@gmail.com
// 示例2: 不同域的处理
email = "Jane.Doe@Example.COM"
normalized = normalizer.Normalize(email)
fmt.Printf("原始: %s → 规范化: %s\n", email, normalized)
// 输出: 原始: Jane.Doe@Example.COM → 规范化: janedoe@example.com
// 示例3: 非Gmail域的处理
email = "user.name+tag@otherdomain.com"
normalized = normalizer.Normalize(email)
fmt.Printf("原始: %s → 规范化: %s\n", email, normalized)
// 输出: 原始: user.name+tag@otherdomain.com → 规范化: user.name@otherdomain.com
}
高级用法
自定义提供商规则
package main
import (
"fmt"
"github.com/sendgrid/go-email-normalizer/pkg/normalizer"
"github.com/sendgrid/go-email-normalizer/pkg/provider"
)
func main() {
// 创建自定义提供商规则
customRules := map[string]provider.Provider{
"example.com": provider.NewProvider(true, true), // 去除点和子地址
"mycompany.com": provider.NewProvider(false, false), // 保留点和子地址
}
// 使用自定义规则创建规范化器
normalizer := normalizer.NewNormalizerWithCustomProviders(customRules)
email := "first.last+tag@example.com"
normalized := normalizer.Normalize(email)
fmt.Printf("自定义规则处理: %s → %s\n", email, normalized)
// 输出: 自定义规则处理: first.last+tag@example.com → firstlast@example.com
email = "first.last+tag@mycompany.com"
normalized = normalizer.Normalize(email)
fmt.Printf("自定义规则处理: %s → %s\n", email, normalized)
// 输出: 自定义规则处理: first.last+tag@mycompany.com → first.last+tag@mycompany.com
}
批量处理电子邮件地址
package main
import (
"fmt"
"github.com/sendgrid/go-email-normalizer/pkg/normalizer"
)
func main() {
normalizer := normalizer.NewNormalizer()
emails := []string{
"John.Doe@gmail.com",
"Jane.Doe+test@GMAIL.COM",
"user.name@example.com",
"first.last+tag@yahoo.com",
}
fmt.Println("批量规范化结果:")
for _, email := range emails {
normalized := normalizer.Normalize(email)
fmt.Printf("%-30s → %s\n", email, normalized)
}
}
性能考虑
go-email-normalizer 在设计时考虑了性能因素,适合在高吞吐量的应用中使用。规范化操作是纯内存计算,不涉及I/O操作。
注意事项
- 该库主要用于电子邮件地址的规范化,不验证地址的有效性
- 规范化后的地址可能不适合直接用于发送电子邮件(特别是去除了+标签的情况)
- 对于非标准电子邮件提供商,建议测试规范化结果是否符合预期
替代方案
如果你需要更多功能,也可以考虑以下替代库:
- github.com/AfterShip/email-verifier - 提供电子邮件验证和规范化功能
- github.com/badoux/checkmail - 简单的电子邮件验证库
go-email-normalizer 专注于电子邮件地址的规范化处理,特别适合需要统一存储或比较电子邮件地址的应用场景。