package postcard import ( "context" "strings" "testing" "time" ) func TestSMTPTLSPolicy(t *testing.T) { t.Parallel() for _, tls := range []string{"", "mandatory", "tls", "none", "notls", "starttls", "opportunistic"} { _, err := NewSMTPDriver(SMTPConfig{Host: "127.0.0.1", Port: 1025, TLS: tls, Timeout: time.Second}) if err != nil { t.Fatalf("tls %q: %v", tls, err) } } _, err := NewSMTPDriver(SMTPConfig{Host: "127.0.0.1", TLS: "maybe"}) if err == nil || !strings.Contains(err.Error(), "mail.smtp.tls") { t.Fatalf("unknown tls error = %v", err) } _, err = NewSMTPDriver(SMTPConfig{TLS: "none"}) if err == nil || !strings.Contains(err.Error(), "mail.smtp.host") { t.Fatalf("empty host error = %v", err) } _, err = NewSMTPDriver(SMTPConfig{Host: " ", TLS: "mandatory"}) if err == nil || !strings.Contains(err.Error(), "mail.smtp.host") { t.Fatalf("blank host error = %v", err) } } func TestSMTPErrorsOmitCredentialsAndBodies(t *testing.T) { cat := smokeCatalog(t) d, err := NewSMTPDriver(SMTPConfig{ Host: "127.0.0.1", Port: 1, Username: "user", Password: "secretpass", TLS: "none", Timeout: 80 * time.Millisecond, }) if err != nil { t.Fatal(err) } mail := NewMailer(cat, d, Options{From: "from@example.test"}) err = mail.Send(context.Background(), Message{ Template: "golem15.hello::mail.hello", To: []string{"ada@example.test"}, Vars: map[string]any{"Name": "Ada", "URL": "https://example.test"}, }) if err == nil { t.Fatal("expected smtp failure") } msg := err.Error() if !strings.Contains(msg, "smtp") { t.Fatalf("error %q should mention smtp", msg) } for _, leaked := range []string{"secretpass", "Witaj **Ada**.", "text body"} { if strings.Contains(msg, leaked) { t.Fatalf("smtp error leaked %q: %v", leaked, err) } } }