golang无需发送邮件即可验证邮箱地址的插件库email-verifier的使用
Golang无需发送邮件即可验证邮箱地址的插件库email-verifier的使用
简介
email-verifier是一个Go语言库,用于在不发送任何电子邮件的情况下验证电子邮件地址。
功能特性
- 电子邮件地址验证:验证字符串是否包含有效的电子邮件
- 通过SMTP进行电子邮件验证查找:对传递的电子邮件执行验证(默认启用catchAll检测)
- MX记录验证:检查给定域名的DNS MX记录
- 其他验证:包括免费电子邮件提供商检查、角色账户验证、一次性电子邮件地址(DEA)验证
- 电子邮件可达性:检查发送电子邮件到该地址的可信度
安装
使用go get
安装这个包:
go get -u github.com/AfterShip/email-verifier
使用示例
基本用法
使用Verify
方法验证电子邮件地址:
package main
import (
"fmt"
emailverifier "github.com/AfterShip/email-verifier"
)
var (
verifier = emailverifier.NewVerifier()
)
func main() {
email := "example@exampledomain.org"
ret, err := verifier.Verify(email)
if err != nil {
fmt.Println("verify email address failed, error is: ", err)
return
}
if !ret.Syntax.Valid {
fmt.Println("email address syntax is invalid")
return
}
fmt.Println("email validation result", ret)
/*
result is:
{
"email":"example@exampledomain.org",
"disposable":false,
"reachable":"unknown",
"role_account":false,
"free":false,
"syntax":{
"username":"example",
"domain":"exampledomain.org",
"valid":true
},
"has_mx_records":true,
"smtp":null,
"gravatar":null
}
*/
}
电子邮件验证查找
使用CheckSMTP
通过SMTP执行电子邮件验证查找:
var (
verifier = emailverifier.
NewVerifier().
EnableSMTPCheck()
)
func main() {
domain := "domain.org"
username := "username"
ret, err := verifier.CheckSMTP(domain, username)
if err != nil {
fmt.Println("check smtp failed: ", err)
return
}
fmt.Println("smtp validation result: ", ret)
}
如果要禁用catchAll检查,可以使用DisableCatchAllCheck()
开关(仅在启用SMTP验证时有效):
verifier = emailverifier.
NewVerifier().
EnableSMTPCheck().
DisableCatchAllCheck()
使用SOCKS5代理验证电子邮件
支持设置SOCKS5代理来验证电子邮件,proxyURI格式应为:socks5://user:password@127.0.0.1:1080?timeout=5s
var (
verifier = emailverifier.
NewVerifier().
EnableSMTPCheck().
Proxy("socks5://user:password@127.0.0.1:1080?timeout=5s")
)
func main() {
domain := "domain.org"
username := "username"
ret, err := verifier.CheckSMTP(domain, username)
if err != nil {
fmt.Println("check smtp failed: ", err)
return
}
fmt.Println("smtp validation result: ", ret)
}
其他验证
检查电子邮件域是否为一次性域:
var (
verifier = emailverifier.
NewVerifier().
EnableAutoUpdateDisposable()
)
func main() {
domain := "domain.org"
if verifier.IsDisposable(domain) {
fmt.Printf("%s is a disposable domain\n", domain)
return
}
fmt.Printf("%s is not a disposable domain\n", domain)
}
域名拼写建议
检查电子邮件域中的拼写错误:
func main() {
domain := "gmai.com"
suggestion := verifier.SuggestDomain(domain)
// suggestion should be `gmail.com`
if suggestion != "" {
fmt.Printf("domain %s is misspelled, right domain is %s. \n", domain, suggestion)
return
}
fmt.Printf("domain %s has no possible misspellings. \n", domain)
}
注意事项
- 大多数ISP会阻止通过端口25发出的SMTP请求以防止垃圾邮件
- 当使用
Verify()
方法时,默认不启用域拼写检查,可以使用EnableDomainSuggest()
启用 - 可以通过初始化验证器使用
EnableAutoUpdateDisposable()
每天自动更新一次性域列表
更多关于golang无需发送邮件即可验证邮箱地址的插件库email-verifier的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang无需发送邮件即可验证邮箱地址的插件库email-verifier的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用email-verifier库验证邮箱地址
email-verifier是一个Go语言库,用于在不发送实际邮件的情况下验证邮箱地址的有效性。它通过检查DNS记录、SMTP服务器响应等方式来验证邮箱是否存在。
安装
首先安装email-verifier库:
go get github.com/AfterShip/email-verifier
基本使用
package main
import (
"fmt"
"log"
"time"
"github.com/AfterShip/email-verifier/verifier"
)
func main() {
// 创建验证器实例
verifier := verifier.NewVerifier()
// 设置超时时间
verifier = verifier.EnableSMTPCheck().
EnableDomainSuggest().
EnableAutoUpdateDisposable().
EnableGravatarCheck().
SetSMTPTimeout(10 * time.Second)
// 验证邮箱地址
ret, err := verifier.Verify("example@gmail.com")
if err != nil {
log.Fatal(err)
}
// 检查结果
if !ret.Syntax.Valid {
fmt.Println("邮箱地址语法无效")
return
}
fmt.Printf("验证结果: %+v\n", ret)
if ret.Reachable == verifier.ReachableYes {
fmt.Println("邮箱地址有效且可接收邮件")
} else if ret.Reachable == verifier.ReachableUnknown {
fmt.Println("无法确定邮箱地址是否有效")
} else {
fmt.Println("邮箱地址无效或不存在")
}
}
主要功能
- 语法验证:检查邮箱地址格式是否正确
- 域名验证:检查域名是否存在MX记录
- SMTP验证:与邮件服务器通信验证邮箱是否存在
- 一次性邮箱检测:检测是否为临时/一次性邮箱
- Gravatar检查:检查邮箱是否关联了Gravatar头像
高级配置
// 自定义DNS解析器
verifier := verifier.NewVerifier().
SetDNSResolver("8.8.8.8:53")
// 禁用SMTP检查(仅检查语法和DNS)
verifier = verifier.DisableSMTPCheck()
// 设置并发限制
verifier = verifier.SetConcurrency(10)
// 设置自定义HTTP客户端
verifier = verifier.SetHTTPClient(&http.Client{
Timeout: 5 * time.Second,
})
结果解析
验证结果包含多个字段:
type Result struct {
Email string // 验证的邮箱地址
Syntax SyntaxResult // 语法验证结果
DNS DNSResult // DNS验证结果
SMTP SMTPResult // SMTP验证结果
Reachable ReachableType // 是否可达
Gravatar GravatarResult // Gravatar检查结果
Disposable bool // 是否一次性邮箱
RoleAccount bool // 是否为角色账户(如admin@, support@)
Free bool // 是否为免费邮箱服务
}
实际应用示例
func ValidateEmail(email string) (bool, error) {
verifier := verifier.NewVerifier().
EnableSMTPCheck().
SetSMTPTimeout(5 * time.Second)
ret, err := verifier.Verify(email)
if err != nil {
return false, fmt.Errorf("验证失败: %v", err)
}
// 基本有效性检查
if !ret.Syntax.Valid || ret.Disposable || ret.Reachable == verifier.ReachableNo {
return false, nil
}
// 对于不确定的情况,可以认为是有效的
return true, nil
}
注意事项
- SMTP验证可能被某些邮件服务器阻止
- 验证结果并非100%准确
- 频繁验证可能会被邮件服务器视为滥用
- 对于重要场景,仍建议使用发送验证码的方式
email-verifier库提供了一种轻量级的邮箱验证方式,适合在用户注册等场景下快速过滤无效邮箱地址,减少垃圾注册和无效用户。