commit
142765bfd0
|
@ -0,0 +1 @@
|
|||
.idea/
|
|
@ -0,0 +1,5 @@
|
|||
module git.sheffery.cloud/sheffery/notify
|
||||
|
||||
go 1.18
|
||||
|
||||
require gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
@ -0,0 +1,3 @@
|
|||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
@ -0,0 +1,108 @@
|
|||
package mail
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"gopkg.in/yaml.v3"
|
||||
"io/ioutil"
|
||||
"net/smtp"
|
||||
)
|
||||
|
||||
var mail = &config{}
|
||||
|
||||
func Mail(toMail string, subject string, content string) error {
|
||||
|
||||
headers := make(map[string]string)
|
||||
headers["From"] = "MockingBird <" + mail.From + ">"
|
||||
headers["To"] = toMail
|
||||
if subject == "" {
|
||||
headers["Subject"] = "Notify"
|
||||
} else {
|
||||
headers["Subject"] = subject
|
||||
}
|
||||
|
||||
// Setup message
|
||||
message := ""
|
||||
for k, v := range headers {
|
||||
message += fmt.Sprintf("%s: %s\r\n", k, v)
|
||||
}
|
||||
message += "\r\n" + content
|
||||
|
||||
config := &tls.Config{
|
||||
ServerName: mail.SmtpHost,
|
||||
}
|
||||
|
||||
conn, err := tls.Dial("tcp", mail.SmtpHost+":"+mail.SmtpPort, config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := smtp.NewClient(conn, mail.SmtpHost)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Authentication.
|
||||
auth := smtp.PlainAuth("", mail.From, mail.Password, mail.SmtpHost)
|
||||
if err = client.Auth(auth); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = client.Mail(mail.From); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = client.Rcpt(toMail); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
writer, err := client.Data()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = writer.Write([]byte(message))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = writer.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = client.Quit(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type config struct {
|
||||
SmtpHost string `yaml:"smtpHost"`
|
||||
SmtpPort string `yaml:"smtpPort"`
|
||||
From string `yaml:"from"`
|
||||
Password string `yaml:"password"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
data, err := ioutil.ReadFile("mail.yml")
|
||||
if err != nil {
|
||||
panic("can't find email config file")
|
||||
}
|
||||
err = yaml.Unmarshal(data, mail)
|
||||
if err != nil {
|
||||
panic("can't serialize email config file")
|
||||
}
|
||||
if mail.SmtpHost == "" {
|
||||
panic("smtp server host can't be blank")
|
||||
}
|
||||
if mail.SmtpPort == "" {
|
||||
panic("smtp port can't be blank")
|
||||
}
|
||||
if mail.From == "" {
|
||||
panic("smtp from account can't be blank")
|
||||
}
|
||||
if mail.Password == "" {
|
||||
panic("smtp from password can't be blank")
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package push
|
||||
|
||||
import (
|
||||
"gopkg.in/yaml.v3"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var push = &config{}
|
||||
|
||||
func Simple(content string) error {
|
||||
params := url.Values{
|
||||
"pushkey": {push.Key},
|
||||
"text": {content},
|
||||
}
|
||||
_, err := http.PostForm(push.Origin+"/message/push", params)
|
||||
return err
|
||||
}
|
||||
|
||||
func Markdown(title string, content string) error {
|
||||
params := url.Values{
|
||||
"pushkey": {push.Key},
|
||||
"text": {title},
|
||||
"desp": {content},
|
||||
"type": {"markdown"},
|
||||
}
|
||||
_, err := http.PostForm(push.Origin+"/message/push", params)
|
||||
return err
|
||||
}
|
||||
|
||||
func Picture(content string) error {
|
||||
params := url.Values{
|
||||
"pushkey": {push.Key},
|
||||
"text": {content},
|
||||
"type": {"image"},
|
||||
}
|
||||
_, err := http.PostForm(push.Origin+"/message/push", params)
|
||||
return err
|
||||
}
|
||||
|
||||
type config struct {
|
||||
Origin string `yaml:"pushOrigin"`
|
||||
Key string `yaml:"pushKey"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
data, err := ioutil.ReadFile("push.yml")
|
||||
if err != nil {
|
||||
panic("can't find push config file")
|
||||
}
|
||||
err = yaml.Unmarshal(data, push)
|
||||
if err != nil {
|
||||
panic("can't serialize push config file")
|
||||
}
|
||||
if push.Origin == "" {
|
||||
panic("push origin can't be blank")
|
||||
}
|
||||
if push.Key == "" {
|
||||
panic("push key can't be blank")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue