>백엔드 개발 >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(Sender Policy Framework) 레코드: 도메인을 대신하여 이메일을 보내도록 승인된 메일 서버를 지정합니다. 스푸핑을 감지하는 데 도움이 됩니다.
  • DMARC(도메인 기반 메시지 인증, 보고 및 적합성): 향상된 이메일 인증 및 보고를 위해 SPF 및 DKIM을 기반으로 구축되었습니다. SPF 또는 DKIM 검사에 실패한 이메일을 처리하는 방법을 지정합니다.

코드 실행:

코드를 저장한 후 터미널에서 실행하세요: go run main.go. 도메인 이름(예: google.com, example.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으로 문의하세요.