|
@@ -0,0 +1,48 @@
|
|
|
+package main
|
|
|
+
|
|
|
+/* Finds (1st occurrence of) a specific header */
|
|
|
+
|
|
|
+import (
|
|
|
+ "bufio"
|
|
|
+ "encoding/json"
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "net/mail"
|
|
|
+ "net/textproto"
|
|
|
+ "os"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ reader := bufio.NewReader(os.Stdin)
|
|
|
+ m, err := mail.ReadMessage(reader)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Fprintln(os.Stderr, err)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ flag.Parse()
|
|
|
+ headers := textproto.MIMEHeader(m.Header)
|
|
|
+ if len(flag.Args()) > 0 {
|
|
|
+ results := make([]string, 0)
|
|
|
+ for _, needle := range flag.Args() {
|
|
|
+ values := headers[textproto.CanonicalMIMEHeaderKey(needle)]
|
|
|
+ if len(values) == 0 {
|
|
|
+ fmt.Fprintf(os.Stderr, "No values for field `%s`\n", needle)
|
|
|
+ } else {
|
|
|
+ results = append(results, string(values[0]))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, res := range results {
|
|
|
+ fmt.Println(res)
|
|
|
+ }
|
|
|
+ os.Exit(0)
|
|
|
+ } else {
|
|
|
+ enc, err := json.Marshal(headers)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Fprintln(os.Stderr, "Error serializing mail headers")
|
|
|
+ fmt.Fprintln(os.Stderr, err)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ fmt.Println(string(enc))
|
|
|
+ os.Exit(0)
|
|
|
+ }
|
|
|
+}
|