clojurecup2015-mailhead/src/mailhead/parser.clj

27 lines
965 B
Clojure

(ns mailhead.parser
(:require [clojure.string :as st]
[clj-time.core :as time]
[clj-time.coerce :as timec]
[clojure-mail.core :refer :all]
[clojure-mail.message :refer :all]))
(defn received-headers [all-headers]
(map #(first (vals %))
(filter (fn [header] (= "Received" (first (keys header)))) all-headers)))
(defn parse-received-headers [received-header]
(let [datetime (st/trim (last (st/split received-header #";")))
;; Hacky hacky, but no time to make this proper ...
cleaned-date (st/trim (st/replace datetime #"(\(.*\)| )" " "))]
{:sender (nth (re-find #"\s*from ([^ ]+)" received-header) 1)
:receiver (nth (re-find #"\s*by ([^ ]+)" received-header) 1)
:time (timec/from-string cleaned-date)}))
(defn parse-from-file [filename]
(->> filename
file->message
read-message
:headers
received-headers
(map parse-received-headers)))