From 3e52620c29e6893ce1cf5e45ec4e00a37184edd6 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Wed, 28 Aug 2013 15:53:04 +0200 Subject: Added mailing interface (from other project) --- mailing/smtp_mailer.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 mailing/smtp_mailer.go (limited to 'mailing/smtp_mailer.go') diff --git a/mailing/smtp_mailer.go b/mailing/smtp_mailer.go new file mode 100644 index 0000000..2a90173 --- /dev/null +++ b/mailing/smtp_mailer.go @@ -0,0 +1,60 @@ +package mailing + +import ( + "errors" + "github.com/kch42/simpleconf" + "net/smtp" +) + +// SMTPMailer is a Mailer implementation that sends mail via an smtp server. +type SMTPMailer struct { + Host string // Host is the expected hostname of the server + Addr string // Addr is the address of the server + UseCRAMMD5 bool + Username string + Password string +} + +func (sm SMTPMailer) Mail(to, from string, msg []byte) error { + var auth smtp.Auth + if sm.UseCRAMMD5 { + auth = smtp.CRAMMD5Auth(sm.Username, sm.Password) + } else { + auth = smtp.PlainAuth("", sm.Username, sm.Password, sm.Host) + } + + return smtp.SendMail(sm.Addr, auth, from, []string{to}, msg) +} + +// SMTPMailerCreator creates an SMTPMailer using configuration values in the [mail] section. +// +// addr - The address of the smtp server (go notation) +// user - Username +// passwd - Password +// crammd5 - Should CRAMMD5 (on) or PLAIN (off) be used? +// host - The expected hostname of the mailserver (can be left out, if crammd5 is on) +// +func SMTPMailerCreator(conf simpleconf.Config) (Mailer, error) { + rv := SMTPMailer{} + var err error + + if rv.Addr, err = conf.GetString("mail", "addr"); err != nil { + return rv, errors.New("Missing [mail] addr config") + } + if rv.UseCRAMMD5, err = conf.GetBool("mail", "crammd5"); err != nil { + return rv, errors.New("Missing [mail] crammd5 config") + } + if rv.Username, err = conf.GetString("mail", "user"); err != nil { + return rv, errors.New("Missing [mail] user config") + } + if rv.Password, err = conf.GetString("mail", "passwd"); err != nil { + return rv, errors.New("Missing [mail] passwd config") + } + if !rv.UseCRAMMD5 { + if rv.Host, err = conf.GetString("mail", "host"); err != nil { + return rv, errors.New("Missing [mail] host config") + } + } + + return rv, nil +} -- cgit v1.2.3-54-g00ecf