email alarm now sends emails
This commit is contained in:
parent
bcf0e91d0b
commit
afcdef029e
@ -2,6 +2,8 @@ package alarm
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/smtp"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -22,13 +24,64 @@ type AlarmEmail struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewAlarmEmail(name string) *AlarmEmail {
|
func NewAlarmEmail(name string) *AlarmEmail {
|
||||||
|
host, _ := os.Hostname()
|
||||||
|
if host == "" {
|
||||||
|
host = "localhost"
|
||||||
|
}
|
||||||
|
|
||||||
return &AlarmEmail{
|
return &AlarmEmail{
|
||||||
Type: "email", Name: name,
|
Type: "email", Name: name,
|
||||||
|
From: "alrm@" + host, SMTP: "localhost:25",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AlarmEmail) Alarm() error {
|
func (a *AlarmEmail) Alarm() error {
|
||||||
fmt.Printf("email alarm\n")
|
c, err := smtp.Dial(a.SMTP)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
helo := "localhost"
|
||||||
|
tspl := strings.Split(a.From, "@")
|
||||||
|
if len(tspl) > 1 {
|
||||||
|
helo = tspl[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.Hello(helo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = c.Mail(a.From)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, to := range a.To {
|
||||||
|
err = c.Rcpt(to)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m, err := c.Data()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := fmt.Sprintf("From: %s\r\n", a.From)
|
||||||
|
msg += fmt.Sprintf("To: %s\r\n", strings.Join(a.To, ";"))
|
||||||
|
msg += fmt.Sprintf("Subject: %s\r\n", "test subject")
|
||||||
|
|
||||||
|
_, err = fmt.Fprintf(m, "%s", msg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = m.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = c.Quit()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,10 +103,16 @@ func (a *AlarmEmail) Parse(tk string) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case TK_FROM:
|
case TK_FROM:
|
||||||
|
if strings.TrimSpace(tk) == "" {
|
||||||
|
return false, fmt.Errorf("from address cannot be empty")
|
||||||
|
}
|
||||||
a.From = tk
|
a.From = tk
|
||||||
a.state = TK_NONE
|
a.state = TK_NONE
|
||||||
|
|
||||||
case TK_SMTP:
|
case TK_SMTP:
|
||||||
|
if strings.TrimSpace(tk) == "" {
|
||||||
|
return false, fmt.Errorf("smtp server cannot be empty")
|
||||||
|
}
|
||||||
a.SMTP = tk
|
a.SMTP = tk
|
||||||
a.state = TK_NONE
|
a.state = TK_NONE
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user