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

1. go mod init github.com/username/email-verifier  // Replace 'username' with your GitHub username.
2. touch main.go
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:

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

Fungsi verifyDomain mengendalikan proses pengesahan sebenar. Ia menyemak rekod MX, SPF dan DMARC:

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)
}
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!

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