main.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package main import ( "bufio" "bytes" "encoding/json" "io" "io/ioutil" "log" "net/http" "os" "github.com/emersion/go-message/mail" ) type P map[string]string type Mail struct { From string Date string Parts []P } func makeReq(j []byte) { req, err := http.NewRequest("POST", "http://localhost:8001/webhook", bytes.NewBuffer(j)) req.Header.Set("Content-Type", "application/json") client := http.Client{} res, err := client.Do(req) if err != nil { log.Fatal(err) } defer res.Body.Close() } func main() { r := bufio.NewReader(os.Stdin) mr, err := mail.CreateReader(r) newmail := Mail{} newmail.Date = mr.Header.Get("Date") newmail.From = mr.Header.Get("From") if err != nil { log.Fatal(err) } for { p, err := mr.NextPart() if err == io.EOF { break } else if err != nil { log.Fatal(err) } switch h := p.Header.(type) { case *mail.InlineHeader: ct := p.Header.Get("Content-Type") b, _ := ioutil.ReadAll(p.Body) part := P{ct: string(b)} newmail.Parts = append(newmail.Parts, part) case *mail.AttachmentHeader: filename, _ := h.Filename() log.Printf("Got attachment: %v\n", filename) } } j, err := json.Marshal(newmail) if err != nil { log.Fatal(err) } makeReq(j) log.Printf("sent webhook: %v\n", newmail.From) } |