cli.go 970 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. /* Finds (1st occurrence of) a specific header */
  3. import (
  4. "bufio"
  5. "encoding/json"
  6. "flag"
  7. "fmt"
  8. "net/mail"
  9. "net/textproto"
  10. "os"
  11. )
  12. func main() {
  13. reader := bufio.NewReader(os.Stdin)
  14. m, err := mail.ReadMessage(reader)
  15. if err != nil {
  16. fmt.Fprintln(os.Stderr, err)
  17. os.Exit(1)
  18. }
  19. flag.Parse()
  20. headers := textproto.MIMEHeader(m.Header)
  21. if len(flag.Args()) > 0 {
  22. results := make([]string, 0)
  23. for _, needle := range flag.Args() {
  24. values := headers[textproto.CanonicalMIMEHeaderKey(needle)]
  25. if len(values) == 0 {
  26. fmt.Fprintf(os.Stderr, "No values for field `%s`\n", needle)
  27. } else {
  28. results = append(results, string(values[0]))
  29. }
  30. }
  31. for _, res := range results {
  32. fmt.Println(res)
  33. }
  34. os.Exit(0)
  35. } else {
  36. enc, err := json.Marshal(headers)
  37. if err != nil {
  38. fmt.Fprintln(os.Stderr, "Error serializing mail headers")
  39. fmt.Fprintln(os.Stderr, err)
  40. os.Exit(1)
  41. }
  42. fmt.Println(string(enc))
  43. os.Exit(0)
  44. }
  45. }