| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package main
- import (
- "bytes"
- "encoding/json"
- "net/http"
- "os"
- "pmail/config"
- "pmail/dto/parsemail"
- "pmail/hooks/framework"
- "pmail/utils/context"
- log "github.com/sirupsen/logrus"
- )
- type WebPushHook struct {
- url string
- token string
- }
- // EmailData 用于存储解析后的邮件数据
- type EmailData struct {
- From string `json:"from"`
- To []string `json:"to"`
- Subject string `json:"subject"`
- Body string `json:"body"`
- Token string `json:"token"`
- }
- func (w *WebPushHook) SendBefore(ctx *context.Context, email *parsemail.Email) {
- }
- func (w *WebPushHook) SendAfter(ctx *context.Context, email *parsemail.Email, err map[string]error) {
- }
- func (w *WebPushHook) ReceiveParseBefore(ctx *context.Context, email *[]byte) {
- }
- func (w *WebPushHook) ReceiveParseAfter(ctx *context.Context, email *parsemail.Email) {
- if w.url == "" {
- return
- }
- content := string(email.Text)
- if content == "" {
- content = email.Subject
- }
- webhookURL := w.url // 替换为您的 Webhook URL
- to := make([]string, len(email.To))
- for i, user := range email.To {
- to[i] = user.EmailAddress
- }
- data := EmailData{
- From: email.From.EmailAddress,
- To: to,
- Subject: email.Subject,
- Body: content,
- Token: w.token,
- }
- jsonData, err := json.Marshal(data)
- if err != nil {
- log.WithContext(ctx).Errorf("web push error %+v", err)
- }
- resp, err := http.Post(webhookURL, "application/json", bytes.NewBuffer(jsonData))
- if err != nil {
- log.WithContext(ctx).Errorf("web push error %+v", err)
- }
- defer resp.Body.Close()
- }
- type Config struct {
- WebPushUrl string `json:"webPushUrl"`
- WebPushToken string `json:"webPushToken"`
- }
- func NewWebPushHook() *WebPushHook {
- var cfgData []byte
- var err error
- cfgData, err = os.ReadFile("../config/config.json")
- if err != nil {
- panic(err)
- }
- var mainConfig *config.Config
- err = json.Unmarshal(cfgData, &mainConfig)
- if err != nil {
- panic(err)
- }
- var pluginConfig *Config
- if _, err := os.Stat("./web_push_config.json"); err == nil {
- cfgData, err = os.ReadFile("./web_push_config.json")
- if err != nil {
- panic(err)
- }
- err = json.Unmarshal(cfgData, &pluginConfig)
- if err != nil {
- panic(err)
- }
- }
- token := ""
- pushURL := ""
- if pluginConfig != nil {
- pushURL = pluginConfig.WebPushUrl
- token = pluginConfig.WebPushToken
- } else {
- pushURL = mainConfig.WebPushUrl
- token = mainConfig.WebPushToken
- }
- ret := &WebPushHook{
- url: pushURL,
- token: token,
- }
- return ret
- }
- func main() {
- framework.CreatePlugin(NewWebPushHook()).Run()
- }
|