68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
//go:build ignore
|
|
|
|
// Quick SMTP diagnostic — run with:
|
|
// SMTP_USER=dharnaud77@gmail.com SMTP_PASS=xsmtpsib-... go run test_smtp.go
|
|
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"net"
|
|
"net/smtp"
|
|
"os"
|
|
)
|
|
|
|
func main() {
|
|
host := "smtp-relay.brevo.com"
|
|
port := 587
|
|
user := os.Getenv("SMTP_USER")
|
|
pass := os.Getenv("SMTP_PASS")
|
|
if user == "" || pass == "" {
|
|
fmt.Fprintln(os.Stderr, "Usage: SMTP_USER=... SMTP_PASS=... go run test_smtp.go")
|
|
os.Exit(1)
|
|
}
|
|
|
|
addr := fmt.Sprintf("%s:%d", host, port)
|
|
fmt.Printf("Dialing %s ...\n", addr)
|
|
conn, err := net.Dial("tcp", addr)
|
|
if err != nil {
|
|
fmt.Printf("FAIL dial: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
client, err := smtp.NewClient(conn, host)
|
|
if err != nil {
|
|
fmt.Printf("FAIL smtp.NewClient: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
defer client.Close() //nolint:errcheck
|
|
|
|
if ok, _ := client.Extension("STARTTLS"); ok {
|
|
fmt.Println("OK STARTTLS advertised")
|
|
if err = client.StartTLS(&tls.Config{ServerName: host}); err != nil {
|
|
fmt.Printf("FAIL StartTLS: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Println("OK STARTTLS negotiated")
|
|
} else {
|
|
fmt.Println("WARN STARTTLS not advertised — credentials will be sent in clear")
|
|
}
|
|
|
|
if ok, params := client.Extension("AUTH"); ok {
|
|
fmt.Printf("OK AUTH methods advertised: %s\n", params)
|
|
} else {
|
|
fmt.Println("WARN no AUTH advertised in EHLO")
|
|
}
|
|
|
|
auth := smtp.PlainAuth("", user, pass, host)
|
|
if err = client.Auth(auth); err != nil {
|
|
fmt.Printf("FAIL AUTH PLAIN: %v\n\n", err)
|
|
fmt.Println("→ Le SMTP key est invalide ou révoqué.")
|
|
fmt.Println(" Génère-en un nouveau sur app.brevo.com → Settings → SMTP & API → SMTP Keys")
|
|
os.Exit(1)
|
|
}
|
|
fmt.Println("OK AUTH PLAIN success — credentials valides !")
|
|
|
|
_ = client.Quit()
|
|
}
|