|
|
|
@ -1,8 +1,11 @@
|
|
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"net/http"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
client "github.com/coreos/etcd/clientv3"
|
|
|
|
@ -73,7 +76,7 @@ func (m *Mail) Serve() {
|
|
|
|
|
m.timer.Reset(time.Duration(m.cf.Keepalive) * time.Second)
|
|
|
|
|
if !m.open {
|
|
|
|
|
if m.sc, err = m.cf.Dialer.Dial(); err != nil {
|
|
|
|
|
log.Warnf("send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
log.Warnf("smtp send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
m.open = true
|
|
|
|
@ -85,7 +88,7 @@ func (m *Mail) Serve() {
|
|
|
|
|
sm.SetHeader("Subject", msg.Subject)
|
|
|
|
|
sm.SetBody("text/plain", msg.Body)
|
|
|
|
|
if err := gomail.Send(m.sc, sm); err != nil {
|
|
|
|
|
log.Warnf("send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
log.Warnf("smtp send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
}
|
|
|
|
|
case <-m.timer.C:
|
|
|
|
|
if m.open {
|
|
|
|
@ -104,6 +107,43 @@ func (m *Mail) Send(msg *Message) {
|
|
|
|
|
m.msgChan <- msg
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type HttpAPI struct{}
|
|
|
|
|
|
|
|
|
|
func (h *HttpAPI) Serve() {}
|
|
|
|
|
|
|
|
|
|
func (h *HttpAPI) Send(msg *Message) {
|
|
|
|
|
body, err := json.Marshal(msg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Warnf("http api send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
req, err := http.NewRequest("POST", conf.Config.Mail.HttpAPI, bytes.NewBuffer(body))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Warnf("http api send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer resp.Body.Close()
|
|
|
|
|
|
|
|
|
|
if resp.StatusCode == 200 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data, err := ioutil.ReadAll(resp.Body)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Warnf("http api send msg[%+v] err: %s", msg, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
log.Warnf("http api send msg[%+v] err: %s", msg, string(data))
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StartNoticer(n Noticer) {
|
|
|
|
|
go n.Serve()
|
|
|
|
|
rch := DefalutClient.Watch(conf.Config.Noticer, client.WithPrefix())
|
|
|
|
|