revamp
This commit is contained in:
82
email.go
82
email.go
@@ -2,15 +2,19 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"log"
|
||||
"fmt"
|
||||
"net/smtp"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type Email struct {
|
||||
startTime time.Time
|
||||
items []string
|
||||
mx sync.Mutex
|
||||
}
|
||||
|
||||
type EmailConfig struct {
|
||||
@@ -19,44 +23,70 @@ type EmailConfig struct {
|
||||
ToEmail []string `json:"email_to"`
|
||||
}
|
||||
|
||||
func SendMail(addr, from, subject, body string, to []string) error {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : Start")
|
||||
func NewEmail(now time.Time) *Email {
|
||||
log.WithFields(log.Fields{"now": now}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"now": now}).Debugf("done")
|
||||
|
||||
return &Email{startTime: now, items: make([]string, 0)}
|
||||
}
|
||||
|
||||
func (e *Email) AddItem(item string) {
|
||||
log.WithFields(log.Fields{"item": item}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"item": item}).Debugf("done")
|
||||
|
||||
e.items = append(e.items, item)
|
||||
}
|
||||
|
||||
func (e *Email) Send() error {
|
||||
log.WithFields(log.Fields{}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{}).Debugf("done")
|
||||
|
||||
body := " - " + e.items[0]
|
||||
for _, item := range e.items[1:] {
|
||||
body = body + "\r\n" + item
|
||||
}
|
||||
|
||||
subject := fmt.Sprintf("Autobackup report (%s)", e.startTime)
|
||||
|
||||
if err := SendMail(cfg.Email.SmtpHost, cfg.Email.FromEmail, subject, body, cfg.Email.ToEmail); err != nil {
|
||||
log.WithFields(log.Fields{"addr": cfg.Email.SmtpHost, "from": cfg.Email.FromEmail, "subject": subject, "call": "SendMail", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func SendMail(addr, from, subject, body string, to []string) error {
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject}).Debugf("done")
|
||||
|
||||
r := strings.NewReplacer("\r\n", "", "\r", "", "\n", "", "%0a", "", "%0d", "")
|
||||
|
||||
c, err := smtp.Dial(addr)
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : %s : smtp.Dial (%s)", addr, err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "smtp.Dial", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
defer c.Close()
|
||||
|
||||
if err = c.Mail(r.Replace(from)); err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : %s : client.Mail (%s)", from, err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "client.Mail", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
for i := range to {
|
||||
to[i] = r.Replace(to[i])
|
||||
if err = c.Rcpt(to[i]); err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : %s : client.Rcpt (%s)", to[i], err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "client.Rcpt", "attr": to[i], "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
w, err := c.Data()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : client.Data (%s)", err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "client.Date", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -68,29 +98,21 @@ func SendMail(addr, from, subject, body string, to []string) error {
|
||||
"Content-Transfer-Encoding: base64\r\n" +
|
||||
"\r\n" + base64.StdEncoding.EncodeToString([]byte(body))
|
||||
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail :\r\n%s", msg)
|
||||
}
|
||||
|
||||
_, err = w.Write([]byte(msg))
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : writer.Write (%s)", err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "writer.Write", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
err = w.Close()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : writer.Close (%s)", err)
|
||||
}
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "writer.Close", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.Quit()
|
||||
if *debugFlag {
|
||||
log.Printf("SendMail : client.Quit (%s)", err)
|
||||
if err = c.Quit(); err != nil {
|
||||
log.WithFields(log.Fields{"addr": addr, "from": from, "subject": subject, "call": "client.Quit", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user