首页 >后端开发 >Golang >使用 Go 的电子邮件验证器

使用 Go 的电子邮件验证器

Linda Hamilton
Linda Hamilton原创
2025-01-12 18:08:44461浏览

Email Verifier using Go

这篇博文演示了使用 Go 构建一个简单的电子邮件验证工具。 这是一个小型项目,旨在说明电子邮件验证的核心概念及其底层机制。 我们不会深入研究每个细节,但我们会涵盖足够的内容以提供扎实的理解。

该过程首先验证从电子邮件地址中提取的域(例如 google.com)。

设置你的 Go 项目:

打开终端并执行以下命令:

<code class="language-bash">1. go mod init github.com/username/email-verifier  // Replace 'username' with your GitHub username.
2. touch main.go</code>

实现Go代码(main.go):

main.go 文件将包含核心逻辑。此初始片段从命令行读取域输入:

<code class="language-go">package main

import (
    "bufio"
    "log"
    "net"
    "os"
    "strings"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        verifyDomain(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        log.Fatal("Error: could not read from input %v\n", err)
    }
}</code>

verifyDomain 函数处理实际的验证过程。它检查 MX、SPF 和 DMARC 记录:

<code class="language-go">func verifyDomain(domain string) {
    var hasMX, hasSPF, hasDMARC bool
    var spfRecord, dmarcRecord string

    // MX Record Check
    mxRecords, err := net.LookupMX(domain)
    if err != nil {
        log.Printf("Error: could not find MX record for %s due to %v\n", domain, err)
    }
    if len(mxRecords) > 0 {
        hasMX = true
    }

    // SPF Record Check
    txtRecords, err := net.LookupTXT("spf." + domain)
    if err != nil {
        log.Printf("Error: could not find SPF record for %s due to %v\n", domain, err)
    }
    for _, record := range txtRecords {
        if strings.HasPrefix(record, "v=spf1") {
            hasSPF = true
            spfRecord = record
            break
        }
    }

    // DMARC Record Check
    dmarcRecords, err := net.LookupTXT("_dmarc." + domain)
    if err != nil {
        log.Printf("Error: could not find DMARC record for %s due to %v\n", domain, err)
    }
    for _, record := range dmarcRecords {
        if strings.HasPrefix(record, "v=DMARC1") {
            hasDMARC = true
            dmarcRecord = record
            break
        }
    }

    log.Printf("Domain: %v,\n MX: %v,\n SPF:  %v,\n DMARC:  %v,\n SPF Rec: %v,\n DMARC Rec %v,\n\n", domain, hasMX, hasSPF, hasDMARC, spfRecord, dmarcRecord)
}</code>

电子邮件验证组件说明:

  • MX(邮件交换器)记录: 标识负责接受域电子邮件的邮件服务器。
  • SPF(发件人策略框架)记录: 指定授权邮件服务器代表域发送电子邮件。帮助检测欺骗行为。
  • DMARC(基于域的消息身份验证、报告和一致性): 基于 SPF 和 DKIM 构建,以增强电子邮件身份验证和报告。 指定如何处理未通过 SPF 或 DKIM 检查的电子邮件。

运行代码:

保存代码后,从终端运行它:go run main.go。 一次输入一个域名(例如 google.comexample.com)。输出将显示是否找到 MX、SPF 和 DMARC 记录。

示例输出:

<code>Domain: google.com,
 MX: true,
 SPF: false,
 DMARC: true,
 SPF Rec: ,
 DMARC Rec v=DMARC1; p=reject; rua=mailto:mailauth-reports@google.com,
</code>

此输出表明域 google.com 具有 MX 记录和 DMARC 记录,但在此示例中 SPF 记录查找失败。 结果将根据域的 DNS 配置而有所不同。

请记住将 "github.com/username/email-verifier" 替换为您实际的 GitHub 存储库信息。 在 LinkedIn、GitHub 和 Twitter/X 上与我联系以进行进一步讨论!

以上是使用 Go 的电子邮件验证器的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn