Rumah > pembangunan bahagian belakang > Golang > Pengesah E-mel menggunakan Go

Pengesah E-mel menggunakan Go

Linda Hamilton
Lepaskan: 2025-01-12 18:08:44
asal
457 orang telah melayarinya

Email Verifier using Go

Siaran blog ini menunjukkan membina alat pengesahan e-mel mudah menggunakan Go. Ia adalah projek mini yang direka untuk menggambarkan konsep teras pengesahan e-mel dan mekanisme asasnya. Kami tidak akan menyelidiki setiap perincian, tetapi kami akan mengupas cukup untuk memberikan pemahaman yang kukuh.

Proses bermula dengan mengesahkan domain yang diekstrak daripada alamat e-mel (cth., google.com).

Menyediakan projek Go anda:

Buka terminal anda dan laksanakan arahan berikut:

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

Melaksanakan kod Go (main.go):

Fail main.go akan mengandungi logik teras. Coretan awal ini membaca input domain daripada baris arahan:

<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>
Salin selepas log masuk

Fungsi verifyDomain mengendalikan proses pengesahan sebenar. Ia menyemak rekod MX, SPF dan 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>
Salin selepas log masuk

Penjelasan Komponen Pengesahan E-mel:

  • Rekod MX (Mail Exchanger): Mengenal pasti pelayan mel yang bertanggungjawab menerima e-mel untuk domain.
  • Rekod SPF (Rangka Kerja Dasar Pengirim): Menentukan pelayan mel yang dibenarkan untuk menghantar e-mel bagi pihak domain. Membantu mengesan penipuan.
  • DMARC (Pengesahan, Pelaporan & Pematuhan Mesej berasaskan Domain): Dibina berdasarkan SPF dan DKIM untuk pengesahan dan pelaporan e-mel yang dipertingkatkan. Menentukan cara mengendalikan e-mel yang gagal semakan SPF atau DKIM.

Menjalankan kod:

Selepas menyimpan kod, jalankan ia dari terminal anda: go run main.go. Masukkan nama domain (cth., google.com, example.com) satu demi satu. Output akan menunjukkan sama ada rekod MX, SPF dan DMARC ditemui.

Contoh Output:

<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>
Salin selepas log masuk

Output ini menunjukkan bahawa domain google.com mempunyai rekod MX dan rekod DMARC, tetapi carian rekod SPF gagal dalam contoh ini. Keputusan akan berbeza-beza bergantung pada konfigurasi DNS domain.

Ingat untuk menggantikan "github.com/username/email-verifier" dengan maklumat repositori GitHub anda yang sebenar. Berhubung dengan saya di LinkedIn, GitHub dan Twitter/X untuk perbincangan lanjut!

Atas ialah kandungan terperinci Pengesah E-mel menggunakan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan