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>
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>
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>
Penjelasan Komponen Pengesahan E-mel:
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>
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!