Heim >Backend-Entwicklung >Golang >E-Mail-Verifizierer mit Go

E-Mail-Verifizierer mit Go

Linda Hamilton
Linda HamiltonOriginal
2025-01-12 18:08:44412Durchsuche

Email Verifier using Go

Dieser Blog-Beitrag zeigt den Aufbau eines einfachen E-Mail-Verifizierungstools mit Go. Es handelt sich um ein Miniprojekt, das die Kernkonzepte der E-Mail-Verifizierung und die zugrunde liegenden Mechanismen veranschaulichen soll. Wir werden nicht auf jedes Detail eingehen, aber wir werden genug behandeln, um ein solides Verständnis zu vermitteln.

Der Prozess beginnt mit der Überprüfung der aus einer E-Mail-Adresse extrahierten Domäne (z. B. google.com).

Einrichten Ihres Go-Projekts:

Öffnen Sie Ihr Terminal und führen Sie die folgenden Befehle aus:

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

Implementierung des Go-Codes (main.go):

Die Datei main.go enthält die Kernlogik. Dieses erste Snippet liest Domäneneingaben aus der Befehlszeile:

<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>

Die Funktion verifyDomain übernimmt den eigentlichen Verifizierungsprozess. Es prüft auf MX-, SPF- und DMARC-Einträge:

<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>

Erklärung der E-Mail-Verifizierungskomponenten:

  • MX (Mail Exchanger)-Eintrag: Identifiziert die Mailserver, die für die Annahme von E-Mails für eine Domain verantwortlich sind.
  • SPF (Sender Policy Framework)-Eintrag: Gibt autorisierte Mailserver zum Senden von E-Mails im Namen einer Domain an. Hilft bei der Erkennung von Spoofing.
  • DMARC (Domain-based Message Authentication, Reporting & Conformance): Baut auf SPF und DKIM für verbesserte E-Mail-Authentifizierung und Reporting auf. Gibt an, wie mit E-Mails umgegangen wird, die die SPF- oder DKIM-Prüfungen nicht bestehen.

Code ausführen:

Nachdem Sie den Code gespeichert haben, führen Sie ihn auf Ihrem Terminal aus: go run main.go. Geben Sie nacheinander Domänennamen (z. B. google.com, example.com) ein. Die Ausgabe zeigt, ob MX-, SPF- und DMARC-Einträge gefunden wurden.

Beispielausgabe:

<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>

Diese Ausgabe zeigt an, dass die Domäne google.com über einen MX-Eintrag und einen DMARC-Eintrag verfügt, die Suche nach dem SPF-Eintrag ist in diesem Beispiel jedoch fehlgeschlagen. Die Ergebnisse variieren je nach DNS-Konfiguration der Domain.

Denken Sie daran, "github.com/username/email-verifier" durch Ihre tatsächlichen GitHub-Repository-Informationen zu ersetzen. Kontaktieren Sie mich auf LinkedIn, GitHub und Twitter/X für weitere Diskussionen!

Das obige ist der detaillierte Inhalt vonE-Mail-Verifizierer mit Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn