package send import ( "fmt" "io" "net/url" "github.com/emersion/go-message/mail" "git.sr.ht/~rjarry/aerc/worker/types" ) // NewSender returns an io.WriterCloser into which the caller can write // contents of a message. The caller must invoke the Close() method on the // sender when finished. func NewSender( worker *types.Worker, uri *url.URL, domain string, from *mail.Address, rcpts []*mail.Address, copyTo string, ) (io.WriteCloser, error) { protocol, auth, err := parseScheme(uri) if err != nil { return nil, err } switch protocol { case "smtp", "smtp+insecure", "smtps": return newSmtpSender(protocol, auth, uri, domain, from, rcpts) case "jmap": return newJmapSender(worker, from, rcpts, copyTo) case "": return newSendmailSender(uri, rcpts) default: return nil, fmt.Errorf("unsupported protocol %s", protocol) } }