Um eine E-Mail mit GO zu versenden verwende ich das „go-smtp“ Package.
https://github.com/wneessen/go-mail
In diesem Snippet sind 2 Beispiele, einmal für SMTP via SSL und SMTP via TLS.
package main import ( "log" "github.com/wneessen/go-mail" ) const ( MAILSERVER = "mail.server.example.com" SMTP_USER = "go@example.com" SMTP_PASS = "supersecretpassword" SENDER = "go@example.com" ) func SendMailSSL(tomail string, subject string, msg string) { m := mail.NewMsg() if err := m.From(SENDER); err != nil { log.Fatalf("failed to set From address: %s", err) } if err := m.To(tomail); err != nil { log.Fatalf("failed to set To address: %s", err) } m.Subject(subject) m.SetBodyString(mail.TypeTextPlain, msg) c, err := mail.NewClient(MAILSERVER, mail.WithPort(465), mail.WithSMTPAuth(mail.SMTPAuthPlain), mail.WithUsername(SMTP_USER), mail.WithPassword(SMTP_PASS), mail.WithSSL()) if err != nil { log.Fatalf("failed to create mail client: %s", err) } if err := c.DialAndSend(m); err != nil { log.Fatalf("failed to send mail: %s", err) } } func SendMailTLS(tomail string, subject string, msg string) { m := mail.NewMsg() if err := m.From(SENDER); err != nil { log.Fatalf("failed to set From address: %s", err) } if err := m.To(tomail); err != nil { log.Fatalf("failed to set To address: %s", err) } m.Subject(subject) m.SetBodyString(mail.TypeTextPlain, msg) c, err := mail.NewClient(MAILSERVER, mail.WithPort(587), mail.WithSMTPAuth(mail.SMTPAuthPlain), mail.WithUsername(SMTP_USER), mail.WithPassword(SMTP_PASS), mail.WithTLSPolicy(mail.TLSMandatory)) if err != nil { log.Fatalf("failed to create mail client: %s", err) } if err := c.DialAndSend(m); err != nil { log.Fatalf("failed to send mail: %s", err) } } func main() { mailbody := ` Dies ist eine Testmail und wir prüfen ob das geht. ` subject := "TESTMAIL" SendMailTLS("to@example.com", subject, mailbody) SendMailSSL("to@example.com", subject, mailbody) }