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
  • Google
  • 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 库,它可以帮助你处理不同电子邮件提供商的各种格式差异,确保电子邮件地址在比较和存储时的一致性。

主要功能

  1. 去除电子邮件地址中的点号(对于某些提供商如Gmail)
  2. 去除子地址(如+后面的部分,对于支持该特性的提供商)
  3. 将域名转换为小写
  4. 处理特定提供商的特殊规则

安装

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操作。

注意事项

  1. 该库主要用于电子邮件地址的规范化,不验证地址的有效性
  2. 规范化后的地址可能不适合直接用于发送电子邮件(特别是去除了+标签的情况)
  3. 对于非标准电子邮件提供商,建议测试规范化结果是否符合预期

替代方案

如果你需要更多功能,也可以考虑以下替代库:

go-email-normalizer 专注于电子邮件地址的规范化处理,特别适合需要统一存储或比较电子邮件地址的应用场景。

回到顶部