golang可配置的电子邮件验证器插件库truemail-go的使用
Golang可配置的电子邮件验证器插件库truemail-go的使用
简介
truemail-go
是一个可配置的Golang电子邮件验证器库。它可以通过正则表达式、DNS、SMTP等多种方式验证电子邮件地址,确保电子邮件地址有效且真实存在。这是Ruby gem truemail
的Golang移植版本。
功能特性
- 可配置的验证器,只验证你需要的部分
- 支持国际化电子邮件(EAI)
- 白名单/黑名单验证层
- 可配置不同的MX/SMTP验证流程
- 可配置一次性电子邮件地址(DEA)验证流程
- 简单的SMTP调试器
安装要求
Golang 1.22+
安装
安装truemail-go
:
go get github.com/truemail-rb/truemail-go
go install -i github.com/truemail-rb/truemail-go
导入truemail-go
依赖:
package main
import "github.com/truemail-rb/truemail-go"
使用示例
基本配置
import "github.com/truemail-rb/truemail-go"
// 创建配置
configuration := truemail.NewConfiguration(
truemail.ConfigurationAttr{
VerifierEmail: "verifier@example.com",
},
)
// 验证电子邮件
truemail.Validate("some@email.com", configuration)
truemail.IsValid("some@email.com", configuration, "regex")
完整配置示例
import "github.com/truemail-rb/truemail-go"
configuration := truemail.NewConfiguration(
ConfigurationAttr{
// 必需参数,验证将基于此存在的电子邮件
VerifierEmail: "verifier@example.com",
// 可选参数,验证将基于此存在的域名
VerifierDomain: "somedomain.com",
// 可选参数,可以覆盖默认的正则表达式模式
EmailPattern: `\A.+@(.+)\z`,
// 可选参数,可以覆盖默认的正则表达式模式
SmtpErrorBodyPattern: `.*(user|account).*`,
// 可选参数,连接超时(秒),默认为2
ConnectionTimeout: 1,
// 可选参数,SMTP服务器响应超时(秒),默认为2
ResponseTimeout: 1,
// 可选参数,连接尝试次数,默认为2
ConnectionAttempts: 1,
// 可选参数,默认验证类型
ValidationTypeDefault: "mx",
// 可选参数,预定义域名的验证类型
ValidationTypeByDomain: map[string]string{"somedomain.com": "regex", "otherdomain.com": "mx"},
// 可选参数,白名单域名
WhitelistedDomains: []string{"somedomain1.com", "somedomain2.com"},
// 可选参数,白名单验证
WhitelistValidation: true,
// 可选参数,黑名单域名
BlacklistedDomains: []string{"somedomain3.com", "somedomain4.com"},
// 可选参数,黑名单MX IP地址
BlacklistedMxIpAddresses: []string{"1.1.1.1", "2.2.2.2"},
// 可选参数,自定义DNS网关
Dns: "10.0.0.1:5300",
// 可选参数,非RFC MX查找流程
NotRfcMxLookupFlow: true,
// 可选参数,SMTP端口号,默认为25
SmtpPort: 2525,
// 可选参数,SMTP快速失败行为
SmtpFailFast: true,
// 可选参数,SMTP安全检查
SmtpSafeCheck: true,
},
)
验证类型示例
正则表达式验证
configuration := truemail.NewConfiguration(
truemail.ConfigurationAttr{
VerifierEmail: "verifier@example.com",
EmailPattern: `\A(.+)@(.+)\z`,
},
)
truemail.Validate("email@example.com", configuration, "regex") // 返回验证结果和错误
truemail.IsValid("email@example.com", configuration, "regex") // 返回bool
MX验证
configuration := truemail.NewConfiguration(
truemail.ConfigurationAttr{
VerifierEmail: "verifier@example.com",
},
)
truemail.Validate("email@example.com", configuration, "mx") // 返回验证结果和错误
truemail.IsValid("email@example.com", configuration, "mx") // 返回bool
SMTP验证
configuration := truemail.NewConfiguration(
truemail.ConfigurationAttr{
VerifierEmail: "verifier@example.com",
SmtpFailFast: true,
},
)
truemail.Validate("email@example.com", configuration) // 返回验证结果和错误
truemail.IsValid("email@example.com", configuration) // 返回bool
辅助方法
.IsValid()
快速验证电子邮件地址,返回布尔值:
truemail.IsValid("email@example.com", configuration)
许可证
该软件包根据MIT许可证条款作为开源软件提供。
更多关于golang可配置的电子邮件验证器插件库truemail-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang可配置的电子邮件验证器插件库truemail-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
truemail-go: 可配置的电子邮件验证器插件库
truemail-go 是一个基于 Golang 的电子邮件验证库,它提供了多种验证机制来确保电子邮件地址的有效性。这个库是 Ruby 版本 truemail 的 Go 实现。
主要特性
- 多层级验证:包括格式验证、MX记录检查、SMTP验证等
- 高度可配置:可以自定义各种验证参数
- 支持白名单/黑名单:可以设置允许或禁止的域名
- 性能优化:支持并发验证
安装
go get github.com/truemail-rb/truemail-go
基本使用示例
package main
import (
"fmt"
"github.com/truemail-rb/truemail-go"
)
func main() {
// 创建验证器配置
config := truemail.NewConfiguration(
truemail.WithVerifierEmail("sender@example.com"),
truemail.WithConnectionTimeout(2),
truemail.WithResponseTimeout(2),
truemail.WithValidationType(truemail.ValidationTypeSMTP),
)
// 创建验证器实例
validator := truemail.NewValidator(config)
// 验证单个邮箱
result := validator.IsValid("test@example.com")
fmt.Printf("验证结果: %v\n", result)
// 获取详细验证信息
validation := validator.Validate("test@example.com")
fmt.Printf("详细验证结果: %+v\n", validation)
}
配置选项
truemail-go 提供了多种配置选项:
config := truemail.NewConfiguration(
// 基本配置
truemail.WithVerifierEmail("sender@example.com"),
truemail.WithVerifierDomain("example.com"),
truemail.WithConnectionTimeout(5),
truemail.WithResponseTimeout(5),
// 验证类型配置
truemail.WithValidationType(truemail.ValidationTypeSMTP), // 或 ValidationTypeRegex, ValidationTypeMX
// 白名单/黑名单
truemail.WithWhitelistedDomains([]string{"trusted.com"}),
truemail.WithBlacklistedDomains([]string{"spam.com"}),
// SMTP配置
truemail.WithSmtpFailFast(true),
truemail.WithSmtpSafeCheck(true),
// 日志配置
truemail.WithLogger(myLogger),
)
验证类型
truemail-go 支持三种验证级别:
-
Regex - 仅验证电子邮件格式
truemail.WithValidationType(truemail.ValidationTypeRegex)
-
MX - 验证格式和MX记录
truemail.WithValidationType(truemail.ValidationTypeMX)
-
SMTP - 完整验证(格式、MX记录和SMTP检查)
truemail.WithValidationType(truemail.ValidationTypeSMTP)
批量验证示例
emails := []string{
"valid@example.com",
"invalid@example.com",
"another@test.com",
}
results := validator.BulkValidate(emails)
for email, result := range results {
fmt.Printf("%s: %v\n", email, result.Success)
}
自定义验证
你可以实现自定义验证逻辑:
validator := truemail.NewValidator(config)
// 添加自定义验证器
validator.AddCustomValidator("my_check", func(email string, validation *truemail.Validation) bool {
// 自定义验证逻辑
return strings.HasPrefix(email, "support@")
})
// 使用自定义验证器
result := validator.ValidateWith("test@example.com", []string{"my_check"})
错误处理
validation := validator.Validate("invalid@email")
if !validation.Success {
fmt.Printf("验证失败: %s\n", validation.Error)
switch validation.ErrorType {
case truemail.ErrorTypeRegex:
fmt.Println("格式错误")
case truemail.ErrorTypeMX:
fmt.Println("MX记录错误")
case truemail.ErrorTypeSMTP:
fmt.Println("SMTP验证错误")
}
}
性能考虑
对于大量电子邮件验证,建议:
- 适当调整超时设置
- 使用
BulkValidate
进行批量验证 - 考虑实现并发验证机制
// 并发验证示例
emails := []string{"a@test.com", "b@test.com", "c@test.com"}
results := make(chan truemail.Validation)
for _, email := range emails {
go func(e string) {
results <- validator.Validate(e)
}(email)
}
for range emails {
validation := <-results
fmt.Printf("%s: %v\n", validation.Email, validation.Success)
}
注意事项
- SMTP验证可能会被某些邮件服务器阻止
- 过于频繁的验证请求可能导致你的IP被列入黑名单
- 某些邮件服务器可能会返回假阳性结果
truemail-go 是一个功能强大且灵活的电子邮件验证库,通过合理配置可以满足大多数电子邮件验证需求。根据你的具体使用场景选择合适的验证级别和配置参数。