annotate pkg/misc/mail.go @ 5688:6281c18b109f sr-v2

Finsh serializing v2 meshes.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 12 Feb 2024 02:27:41 +0100
parents 1222b777f51f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 414
diff changeset
13
339
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
14 package misc
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
15
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
16 import (
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
17 "io"
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
18
339
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
19 gomail "gopkg.in/gomail.v2"
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
20
414
c1047fd04a3a Moved project specific Go packages to new pkg folder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 339
diff changeset
21 "gemma.intevation.de/gemma/pkg/config"
339
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
22 )
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
23
5601
1222b777f51f Made golint finally happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5335
diff changeset
24 // EmailReceiver is the name and address of an email receiver.
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
25 type EmailReceiver struct {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
26 Name string
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
27 Address string
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
28 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
29
5601
1222b777f51f Made golint finally happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5335
diff changeset
30 // EmailAttachment is a email attachment with
1222b777f51f Made golint finally happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5335
diff changeset
31 // a file name and a content.
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
32 type EmailAttachment struct {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
33 Name string
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
34 Content []byte
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
35 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
36
1371
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
37 // SendMail sends an email to a given address with a given subject
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
38 // and body.
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
39 // The credentials to contact the SMPT server are taken from the
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
40 // configuration.
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
41 func SendMail(address, subject, body string) error {
339
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
42 m := gomail.NewMessage()
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
43 m.SetHeader("From", config.MailFrom())
1371
5b9b8eabcd01 Backend: Added the API documentation of the misc package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
44 m.SetHeader("To", address)
339
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
45 m.SetHeader("Subject", subject)
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
46 m.SetBody("text/plain", body)
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
47
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
48 d := gomail.Dialer{
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
49 Host: config.MailHost(),
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
50 Port: int(config.MailPort()),
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
51 Username: config.MailUser(),
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
52 Password: config.MailPassword(),
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
53 LocalName: config.MailHelo(),
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
54 SSL: config.MailPort() == 465,
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
55 }
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
56
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
57 return d.DialAndSend(m)
33b59c848771 Factored out some miscellaneous code into own package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
58 }
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
59
5601
1222b777f51f Made golint finally happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5335
diff changeset
60 // SendMailToAll sends emails to all receivers,
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
61 func SendMailToAll(
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
62 receivers []EmailReceiver,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
63 subject string,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
64 body func(EmailReceiver) (string, error),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
65 attachments []EmailAttachment,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
66 errorHandler func(EmailReceiver, error) error,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
67 ) error {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
68
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
69 d := gomail.Dialer{
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
70 Host: config.MailHost(),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
71 Port: int(config.MailPort()),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
72 Username: config.MailUser(),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
73 Password: config.MailPassword(),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
74 LocalName: config.MailHelo(),
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
75 SSL: config.MailPort() == 465,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
76 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
77
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
78 s, err := d.Dial()
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
79 if err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
80 return err
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
81 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
82 defer s.Close()
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
83
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
84 m := gomail.NewMessage()
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
85 for _, r := range receivers {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
86 m.SetHeader("From", config.MailFrom())
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
87 m.SetAddressHeader("To", r.Address, r.Name)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
88 m.SetHeader("Subject", subject)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
89 b, err := body(r)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
90 if err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
91 return err
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
92 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
93 m.SetBody("text/plain", b)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
94 for _, at := range attachments {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
95 content := at.Content
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
96 m.Attach(at.Name, gomail.SetCopyFunc(func(w io.Writer) error {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
97 _, err := w.Write(content)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
98 return err
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
99 }))
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
100 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
101
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
102 if err := gomail.Send(s, m); err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
103 if err = errorHandler(r, err); err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
104 return err
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
105 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
106 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
107 m.Reset()
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
108 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
109 return nil
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1371
diff changeset
110 }