diff --git a/go.mod b/go.mod index 1ce4291..a76dc25 100644 --- a/go.mod +++ b/go.mod @@ -88,6 +88,8 @@ require ( golang.org/x/sys v0.3.0 // indirect golang.org/x/text v0.5.0 // indirect google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 0ba2b63..144c31d 100644 --- a/go.sum +++ b/go.sum @@ -817,12 +817,16 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/notifiers/email.go b/notifiers/email.go new file mode 100644 index 0000000..f153c82 --- /dev/null +++ b/notifiers/email.go @@ -0,0 +1,82 @@ +package notifiers + +import ( + "log" + + "github.com/spf13/viper" + "gopkg.in/gomail.v2" +) + +type EmailNotifier struct { + Server string + Port int + From string + User string + To string + Password string + Debug bool +} + +func (email *EmailNotifier) Open() bool { + if viper.IsSet("notifiers.email.server") { + email.Server = viper.GetString("notifiers.email.server") + } else { + log.Println("Need 'server' var for email notifier") + return false + } + if viper.IsSet("notifiers.email.port") { + email.Port = viper.GetInt("notifiers.email.port") + } else { + log.Println("Need 'port' var for email notifier") + return false + } + if viper.IsSet("notifiers.email.user") { + email.User = viper.GetString("notifiers.email.user") + } else { + log.Println("Need 'user' var for email notifier") + return false + } + if viper.IsSet("notifiers.email.from") { + email.From = viper.GetString("notifiers.email.from") + } else { + log.Println("Need 'from' var for email notifier") + return false + } + if viper.IsSet("notifiers.email.to") { + email.To = viper.GetString("notifiers.email.to") + } else { + log.Println("Need 'to' var for email notifier") + return false + } + if viper.IsSet("notifiers.email.password") { + email.Password = viper.GetString("notifiers.email.password") + } else { + log.Println("Need 'password' var for email notifier") + return false + } + log.Printf("Configured email: %s, %s", email.From, email.To) + return true +} + +func (email *EmailNotifier) Message(message string) bool { + m := gomail.NewMessage() + m.SetHeaders(map[string][]string{ + "From": {email.From}, + "To": {email.To}, + "Subject": {"GoWatch"}, + }) + m.SetBody("text/html", message) + + d := gomail.NewDialer(email.Server, email.Port, email.User, email.Password) + + err := d.DialAndSend(m) + if err != nil { + log.Println("Could not send email:", err) + return false + } + return true +} + +func (email *EmailNotifier) Close() bool { + return true +} diff --git a/todo.md b/todo.md index ecdf99e..e40d7be 100644 --- a/todo.md +++ b/todo.md @@ -4,7 +4,7 @@ - readme instructions - ~~discord~~ - readme instructions - - email + - ~~email~~ - postfix compose example? - matrix? - twitter?