version: init

master v1.0.0
sheffery 2022-06-09 17:23:41 +08:00
commit 142765bfd0
6 changed files with 180 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea/

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module git.sheffery.cloud/sheffery/notify
go 1.18
require gopkg.in/yaml.v3 v3.0.1 // indirect

3
go.sum Normal file
View File

@ -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=

108
mail/mail.go Normal file
View File

@ -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")
}
}

1
notify.go Normal file
View File

@ -0,0 +1 @@
package notify

62
push/push.go Normal file
View File

@ -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")
}
}