Try #1 Sending mails though linux mail command - Untested: https://github.com/kataras/iris/issues/166

This commit is contained in:
Makis Maropoulos 2016-06-02 23:22:48 +03:00
parent 126a2b2f7c
commit b58c16113a
2 changed files with 29 additions and 11 deletions

View File

@ -10,6 +10,11 @@ type Mail struct {
Username string Username string
// Password is the auth password for the sender // Password is the auth password for the sender
Password string Password string
// UseCommand enable it if you want to send e-mail with the mail command instead of smtp
//
// Host,Port & Password will be ignored
// ONLY FOR UNIX
UseCommand bool
} }
// DefaultMail returns the default configs for Mail // DefaultMail returns the default configs for Mail

View File

@ -34,25 +34,26 @@ func New(cfg config.Mail) Service {
return &mailer{config: cfg} return &mailer{config: cfg}
} }
func (m *mailer) authenticate() error {
if m.config.Username == "" || m.config.Password == "" || m.config.Host == "" {
return fmt.Errorf("Username, Password & Host cannot be empty!")
}
m.auth = smtp.PlainAuth("", m.config.Username, m.config.Password, m.config.Host)
m.authenticated = true
return nil
}
// Send sends a mail to recipients // Send sends a mail to recipients
// the body can be html also // the body can be html also
func (m *mailer) Send(to []string, subject, body string) error { func (m *mailer) Send(to []string, subject, body string) error {
if m.config.UseCommand {
return m.sendCmd(to, subject, body)
}
return m.sendSMTP(to, subject, body)
}
func (m *mailer) sendSMTP(to []string, subject, body string) error {
buffer := buf.Get() buffer := buf.Get()
defer buf.Put(buffer) defer buf.Put(buffer)
if !m.authenticated { if !m.authenticated {
if err := m.authenticate(); err != nil { if m.config.Username == "" || m.config.Password == "" || m.config.Host == "" {
return err return fmt.Errorf("Username, Password, Host cannot be empty when using SMTP!")
} }
m.auth = smtp.PlainAuth("", m.config.Username, m.config.Password, m.config.Host)
m.authenticated = true
} }
mailArgs := map[string]string{"To": strings.Join(to, ","), "Subject": subject, "Body": body} mailArgs := map[string]string{"To": strings.Join(to, ","), "Subject": subject, "Body": body}
@ -70,3 +71,15 @@ func (m *mailer) Send(to []string, subject, body string) error {
buffer.Bytes(), buffer.Bytes(),
) )
} }
func (m *mailer) sendCmd(to []string, subject, body string) error {
buffer := buf.Get()
defer buf.Put(buffer)
// buffer.WriteString(body)
cmd := utils.CommandBuilder("mail", "-s", subject, strings.Join(to, ","))
cmd.AppendArguments("-a", "Content-type: text/html") //always html on
cmd.Stdin = buffer
_, err := cmd.Output()
return err
}