package main
import (
"encoding/json"
"fmt"
"net/http"
"time"
)
type Confidence struct {
ConfidenceScore int `json:"confidence_score"`
Status string `json:"status"`
AliasStatus string `json:"alias_status"`
CanonicalEmail string `json:"canonical_email"`
IsRoleBased bool `json:"is_role_based"`
}
type ValidationResponse struct {
Confidence Confidence `json:"confidence"`
Validations struct {
IsDisposable bool `json:"is_disposable"`
} `json:"validations"`
}
func ValidateEmail(email string, apiKey string) (bool, error) {
client := &http.Client{Timeout: 10 * time.Second}
req, _ := http.NewRequest("GET", "https://api.checkemail.dev/validate", nil)
q := req.URL.Query()
q.Add("email", email)
req.URL.RawQuery = q.Encode()
req.Header.Add("x-api-key", apiKey)
resp, err := client.Do(req)
if err != nil {
return false, err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
return false, fmt.Errorf("API Error: %d", resp.StatusCode)
}
var data ValidationResponse
json.NewDecoder(resp.Body).Decode(&data)
if data.Confidence.Status == "DISPOSABLE" || data.Validations.IsDisposable {
return false, nil
}
if data.Confidence.AliasStatus == "ALIAS_CONFIRMED" {
fmt.Printf("Canonical email: %s\n", data.Confidence.CanonicalEmail)
}
return data.Confidence.Status == "LIKELY", nil
}
func main() {
isValid, _ := ValidateEmail("[email protected]", "ce_d_YOUR_KEY")
fmt.Println("Is Valid:", isValid)
}