sendmail.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. mu "mfw/util"
  7. "net"
  8. "net/http"
  9. "sync"
  10. "time"
  11. )
  12. var udptaskmap = &sync.Map{}
  13. var tomail string
  14. var api string
  15. type udpNode struct {
  16. data []byte
  17. addr *net.UDPAddr
  18. timestamp int64
  19. retry int
  20. }
  21. func checkMapJob() {
  22. //阿里云内网无法发送邮件
  23. jkmail, _ := sysconfig["jkmail"].(map[string]interface{})
  24. if jkmail != nil {
  25. tomail, _ = jkmail["to"].(string)
  26. api, _ = jkmail["api"].(string)
  27. }
  28. log.Println("start checkMapJob", tomail, sysconfig["jkmail"])
  29. for {
  30. udptaskmap.Range(func(k, v interface{}) bool {
  31. now := time.Now().Unix()
  32. node, _ := v.(*udpNode)
  33. if now-node.timestamp > 120 {
  34. node.retry++
  35. if node.retry > 5 {
  36. log.Println("udp重试失败", k)
  37. udptaskmap.Delete(k)
  38. res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, "pingfen-send-fail", k.(string)))
  39. if err == nil {
  40. defer res.Body.Close()
  41. read, err := ioutil.ReadAll(res.Body)
  42. log.Println("邮件发发送:", string(read), err)
  43. }
  44. } else {
  45. log.Println("udp重发", k)
  46. udpclient.WriteUdp(node.data, mu.OP_TYPE_DATA, node.addr)
  47. }
  48. } else if now-node.timestamp > 10 {
  49. log.Println("udp任务超时中..", k)
  50. }
  51. return true
  52. })
  53. time.Sleep(60 * time.Second)
  54. }
  55. }