2022-06-17 14:54:14 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/base64"
|
2022-06-19 06:12:00 +02:00
|
|
|
"log"
|
2022-06-17 14:54:14 +02:00
|
|
|
"net/smtp"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Email struct {
|
|
|
|
startTime time.Time
|
|
|
|
items []string
|
|
|
|
}
|
|
|
|
|
|
|
|
type EmailConfig struct {
|
|
|
|
smtpHost string `json:"smtp"`
|
|
|
|
fromEmail string `json:"email_from"`
|
|
|
|
toEmail []string `json:"email_to"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func SendMail(addr, from, subject, body string, to []string) error {
|
2022-06-19 06:13:52 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : Start")
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
r := strings.NewReplacer("\r\n", "", "\r", "", "\n", "", "%0a", "", "%0d", "")
|
|
|
|
|
|
|
|
c, err := smtp.Dial(addr)
|
|
|
|
if err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : smtp.Dial (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
2022-06-19 06:18:34 +02:00
|
|
|
|
2022-06-17 14:54:14 +02:00
|
|
|
defer c.Close()
|
2022-06-19 06:18:34 +02:00
|
|
|
|
2022-06-17 14:54:14 +02:00
|
|
|
if err = c.Mail(r.Replace(from)); err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : client.Mail (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
2022-06-19 06:18:34 +02:00
|
|
|
|
2022-06-17 14:54:14 +02:00
|
|
|
for i := range to {
|
|
|
|
to[i] = r.Replace(to[i])
|
|
|
|
if err = c.Rcpt(to[i]); err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : client.Rcpt (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
w, err := c.Data()
|
|
|
|
if err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : client.Data (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
msg := "To: " + strings.Join(to, ",") + "\r\n" +
|
|
|
|
"From: " + from + "\r\n" +
|
|
|
|
"Subject: " + subject + "\r\n" +
|
|
|
|
"Content-Type: text/html; charset=\"UTF-8\"\r\n" +
|
|
|
|
"Content-Transfer-Encoding: base64\r\n" +
|
|
|
|
"\r\n" + base64.StdEncoding.EncodeToString([]byte(body))
|
|
|
|
|
2022-06-19 06:12:00 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail :\r\n%s", msg)
|
|
|
|
}
|
|
|
|
|
2022-06-17 14:54:14 +02:00
|
|
|
_, err = w.Write([]byte(msg))
|
|
|
|
if err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : writer.Write (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
2022-06-19 06:18:34 +02:00
|
|
|
|
2022-06-17 14:54:14 +02:00
|
|
|
err = w.Close()
|
|
|
|
if err != nil {
|
2022-06-19 06:18:34 +02:00
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : writer.Close (%s)", err)
|
|
|
|
}
|
2022-06-17 14:54:14 +02:00
|
|
|
return err
|
|
|
|
}
|
2022-06-19 06:18:34 +02:00
|
|
|
|
|
|
|
err = c.Quit()
|
|
|
|
if *debugFlag {
|
|
|
|
log.Printf("SendMail : client.Quit (%s)", err)
|
|
|
|
}
|
|
|
|
return err
|
2022-06-17 14:54:14 +02:00
|
|
|
}
|