golang可配置的电子邮件验证器插件库truemail-go的使用

Golang可配置的电子邮件验证器插件库truemail-go的使用

Truemail - configurable framework agnostic plain Go email validator

简介

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

1 回复

更多关于golang可配置的电子邮件验证器插件库truemail-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


truemail-go: 可配置的电子邮件验证器插件库

truemail-go 是一个基于 Golang 的电子邮件验证库,它提供了多种验证机制来确保电子邮件地址的有效性。这个库是 Ruby 版本 truemail 的 Go 实现。

主要特性

  1. 多层级验证:包括格式验证、MX记录检查、SMTP验证等
  2. 高度可配置:可以自定义各种验证参数
  3. 支持白名单/黑名单:可以设置允许或禁止的域名
  4. 性能优化:支持并发验证

安装

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 支持三种验证级别:

  1. Regex - 仅验证电子邮件格式

    truemail.WithValidationType(truemail.ValidationTypeRegex)
    
  2. MX - 验证格式和MX记录

    truemail.WithValidationType(truemail.ValidationTypeMX)
    
  3. 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验证错误")
	}
}

性能考虑

对于大量电子邮件验证,建议:

  1. 适当调整超时设置
  2. 使用 BulkValidate 进行批量验证
  3. 考虑实现并发验证机制
// 并发验证示例
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)
}

注意事项

  1. SMTP验证可能会被某些邮件服务器阻止
  2. 过于频繁的验证请求可能导致你的IP被列入黑名单
  3. 某些邮件服务器可能会返回假阳性结果

truemail-go 是一个功能强大且灵活的电子邮件验证库,通过合理配置可以满足大多数电子邮件验证需求。根据你的具体使用场景选择合适的验证级别和配置参数。

回到顶部