package main import ( "fmt" "io/ioutil" "log" "net" "net/http" "strings" "sync" "time" ) var udptaskmap = &sync.Map{} var tomail string var api string type udpNode struct { data []byte addr *net.UDPAddr timestamp int64 retry int } func checkMailJob() { //阿里云内网无法发送邮件 jkmail, _ := Sysconfig["jkmail"].(map[string]interface{}) if jkmail != nil { tomail, _ = jkmail["to"].(string) api, _ = jkmail["api"].(string) } log.Println("start checkMailJob", tomail, Sysconfig["jkmail"]) for { udptaskmap.Range(func(k, v interface{}) bool { now := time.Now().Unix() node, _ := v.(*udpNode) if now-node.timestamp > 120 { udptaskmap.Delete(k) info_str := "" if strings.Contains(k.(string), "project") { info_str = fmt.Sprintf("下节点~项目合并~未响应~相关人员检查~%s", k.(string)) } else { info_str = fmt.Sprintf("下节点~同步数据~未响应~相关人员检查~%s", k.(string)) } res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, "增量判重程序~严重警告", info_str)) if err == nil { defer res.Body.Close() read, err := ioutil.ReadAll(res.Body) log.Println("邮件发送:", string(read), err) } } return true }) time.Sleep(60 * time.Second) } } func sendErrMailApi(title, body string) { jkmail, _ := Sysconfig["jkmail"].(map[string]interface{}) if jkmail != nil { tomail, _ = jkmail["to"].(string) api, _ = jkmail["api"].(string) } log.Println(tomail, api) res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, title, body)) if err == nil { defer res.Body.Close() read, err := ioutil.ReadAll(res.Body) log.Println("邮件发送成功:", string(read), err) } else { log.Println("邮件发送失败:", err) } }