Mercurial > gemma
view pkg/misc/mail.go @ 5672:b1a10654bf0f
feat: Add Scale to map
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 14 Feb 2024 16:56:28 +0100 |
parents | 1222b777f51f |
children |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package misc import ( "io" gomail "gopkg.in/gomail.v2" "gemma.intevation.de/gemma/pkg/config" ) // EmailReceiver is the name and address of an email receiver. type EmailReceiver struct { Name string Address string } // EmailAttachment is a email attachment with // a file name and a content. type EmailAttachment struct { Name string Content []byte } // SendMail sends an email to a given address with a given subject // and body. // The credentials to contact the SMPT server are taken from the // configuration. func SendMail(address, subject, body string) error { m := gomail.NewMessage() m.SetHeader("From", config.MailFrom()) m.SetHeader("To", address) m.SetHeader("Subject", subject) m.SetBody("text/plain", body) d := gomail.Dialer{ Host: config.MailHost(), Port: int(config.MailPort()), Username: config.MailUser(), Password: config.MailPassword(), LocalName: config.MailHelo(), SSL: config.MailPort() == 465, } return d.DialAndSend(m) } // SendMailToAll sends emails to all receivers, func SendMailToAll( receivers []EmailReceiver, subject string, body func(EmailReceiver) (string, error), attachments []EmailAttachment, errorHandler func(EmailReceiver, error) error, ) error { d := gomail.Dialer{ Host: config.MailHost(), Port: int(config.MailPort()), Username: config.MailUser(), Password: config.MailPassword(), LocalName: config.MailHelo(), SSL: config.MailPort() == 465, } s, err := d.Dial() if err != nil { return err } defer s.Close() m := gomail.NewMessage() for _, r := range receivers { m.SetHeader("From", config.MailFrom()) m.SetAddressHeader("To", r.Address, r.Name) m.SetHeader("Subject", subject) b, err := body(r) if err != nil { return err } m.SetBody("text/plain", b) for _, at := range attachments { content := at.Content m.Attach(at.Name, gomail.SetCopyFunc(func(w io.Writer) error { _, err := w.Write(content) return err })) } if err := gomail.Send(s, m); err != nil { if err = errorHandler(r, err); err != nil { return err } } m.Reset() } return nil }