-
Notifications
You must be signed in to change notification settings - Fork 0
/
message.clj
43 lines (33 loc) · 1.09 KB
/
message.clj
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
(ns email-attachments.message
(:require [clojure.string :as str])
(:import [javax.mail.internet MimeMessage]))
(defn message-content
"Returns the content of a MimeMessage or a MimeBodyPart"
[message]
(.getContent message))
(defn- message-content-type [message]
(.getContentType message))
(defn- message-content-count [content]
(.getCount content))
(defn- body-part [content index]
(.getBodyPart content index))
(defn- multipart? [message]
(str/starts-with? (message-content-type message) "multipart/"))
(defn- multipart->parts [message]
(let [content (message-content message)
content-range (-> content message-content-count range)]
(map #(body-part content %) content-range)))
(defn- message-parts [message]
(if (multipart? message)
(map message-parts (multipart->parts message))
(conj () message)))
(defn- msg->map [message]
{:content-type (message-content-type message)
:data message})
(defn body [message]
(->> message
message-parts
flatten
(map msg->map)))
(defn stream->mime-message [stream]
(MimeMessage. nil stream))