package submission import ( "crypto/tls" "errors" "io" "net" "strconv" "postern/internal/policy" "github.com/emersion/go-sasl" "github.com/emersion/go-smtp" ) func shipMessage(from string, to []string, r io.Reader, relayConfig policy.RelayConfig) error { if relayConfig.Host == "" { return errors.New("no relay configured") } conn, err := net.Dial("tcp", net.JoinHostPort(relayConfig.Host, strconv.Itoa(relayConfig.Port))) if err != nil { return err } c, err := smtp.NewClientStartTLS(conn, &tls.Config{ ServerName: relayConfig.Host, }) if err != nil { return err } defer func(c *smtp.Client) { _ = c.Close() }(c) err = c.Auth(sasl.NewPlainClient("", relayConfig.Username, relayConfig.Password)) if err != nil { return err } return c.SendMail(from, to, r) }