| author | Tomas Zeman <tzeman@volny.cz> |
| Thu, 03 May 2018 11:54:46 +0200 | |
| changeset 53 | 09b1d3c0aa20 |
| permissions | -rwxr-xr-x |
|
53
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
1 |
#!/usr/bin/env amm |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
2 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
3 |
import java.io.{ByteArrayInputStream, File, InputStream}
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
4 |
import java.nio.file.{Files, StandardCopyOption}
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
5 |
import java.text.SimpleDateFormat |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
6 |
import java.util.Date |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
7 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
8 |
import ammonite.main.Router.{doc, main}
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
9 |
import ammonite.ops._ |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
10 |
import upickle.default |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
11 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
12 |
//import $ivy.`javax.mail:javax.mail-api:1.6.1` |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
13 |
//import $ivy.`com.sun.mail:mailapi:1.6.1` |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
14 |
import $ivy.`javax.mail:javax.mail-api:1.6.1` |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
15 |
import $ivy.`com.sun.mail:mailapi:1.6.1` |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
16 |
import scala.language.postfixOps |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
17 |
import javax.mail.internet._ |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
18 |
import javax.mail._ |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
19 |
import javax.mail.{Address => mAddress}
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
20 |
import javax.mail.internet.{ContentType => mContentType}
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
21 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
22 |
import scala.collection.JavaConverters._ |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
23 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
24 |
case class Address(email: String, name: Option[String], `type`: String) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
25 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
26 |
object Address {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
27 |
def apply(a: mAddress): Option[Address] = a match {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
28 |
case ia:InternetAddress => |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
29 |
Some(Address(ia.getAddress, Option(ia.getPersonal), a.getType)) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
30 |
case _ => |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
31 |
None |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
32 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
33 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
34 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
35 |
sealed abstract class SystemFlag(code: String) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
36 |
object SystemFlag {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
37 |
case object ANSWERED extends SystemFlag("Answered")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
38 |
case object DELETED extends SystemFlag("Deleted")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
39 |
case object DRAFT extends SystemFlag("Draft")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
40 |
case object FLAGGED extends SystemFlag("Flagged")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
41 |
case object RECENT extends SystemFlag("Recent")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
42 |
case object SEEN extends SystemFlag("Seen")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
43 |
case object USER extends SystemFlag("User")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
44 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
45 |
def apply(fl: Flags.Flag): Option[SystemFlag] = fl match {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
46 |
case Flags.Flag.ANSWERED => Some(ANSWERED) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
47 |
case Flags.Flag.DELETED => Some(DELETED) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
48 |
case Flags.Flag.DRAFT => Some(DRAFT) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
49 |
case Flags.Flag.FLAGGED => Some(FLAGGED) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
50 |
case Flags.Flag.RECENT => Some(RECENT) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
51 |
case Flags.Flag.SEEN => Some(SEEN) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
52 |
case Flags.Flag.USER => Some(USER) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
53 |
case _ => None |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
54 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
55 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
56 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
57 |
case class Header(name: String, value: String) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
58 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
59 |
case class Envelope( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
60 |
from: List[Address], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
61 |
replyTo: List[Address], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
62 |
to: List[Address], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
63 |
cc: List[Address], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
64 |
subject: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
65 |
received: Option[Date], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
66 |
sent: Option[Date], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
67 |
systemFlags: List[SystemFlag], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
68 |
userFlags: List[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
69 |
headers: List[Header], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
70 |
encoding: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
71 |
messageId: Option[String] |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
72 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
73 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
74 |
object Envelope {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
75 |
private def safe(v: Array[mAddress]): List[mAddress] = |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
76 |
if (v==null) Nil else v toList |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
77 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
78 |
def apply(m: Message): Envelope = {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
79 |
val mm = m match {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
80 |
case mm: MimeMessage => Some(mm) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
81 |
case _ => None |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
82 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
83 |
Envelope(safe(m.getFrom) flatMap(Address(_)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
84 |
safe(m.getReplyTo) flatMap(Address(_)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
85 |
safe(m.getRecipients(Message.RecipientType.TO)) flatMap(Address(_)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
86 |
safe(m.getRecipients(Message.RecipientType.CC)) flatMap(Address(_)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
87 |
Option(MimeUtility.decodeText(m.getSubject)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
88 |
Option(m.getReceivedDate), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
89 |
Option(m.getSentDate), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
90 |
Option(m.getFlags).toList flatMap(_.getSystemFlags) flatMap(SystemFlag(_)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
91 |
Option(m.getFlags).toList flatMap(_.getUserFlags), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
92 |
m.getAllHeaders.asScala map(h => Header(h.getName, h.getValue)) toList, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
93 |
mm flatMap(v => Option(v.getEncoding)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
94 |
mm flatMap(v => Option(v.getMessageID)) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
95 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
96 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
97 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
98 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
99 |
case class ContentType( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
100 |
primaryType: String, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
101 |
subType: String, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
102 |
charset: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
103 |
parameters: List[ContentType.Parameter] |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
104 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
105 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
106 |
object ContentType {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
107 |
case class Parameter(name: String, value: String) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
108 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
109 |
def apply(s: String): ContentType = {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
110 |
val ct = new mContentType(s) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
111 |
val pl = ct.getParameterList |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
112 |
ContentType(ct.getPrimaryType, ct.getSubType, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
113 |
Option(pl.get("charset")),
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
114 |
pl.getNames.asScala map(n => Parameter(n, pl.get(n))) toList) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
115 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
116 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
117 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
118 |
case class Descriptor( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
119 |
contentType: ContentType, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
120 |
size: Option[Int], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
121 |
lineCount: Option[Int], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
122 |
disposition: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
123 |
description: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
124 |
fileName: Option[String], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
125 |
headers: List[Header], |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
126 |
encoding: Option[String] |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
127 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
128 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
129 |
object Descriptor {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
130 |
def apply(p: Part): Descriptor = Descriptor( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
131 |
ContentType(p.getContentType), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
132 |
Option(p.getSize) filterNot(_ == -1), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
133 |
Option(p.getLineCount) filterNot(_ == -1), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
134 |
Option(p.getDisposition), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
135 |
Option(p.getDescription), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
136 |
Option(p.getFileName), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
137 |
Option(p.getAllHeaders).toList flatMap(_.asScala) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
138 |
map(h => Header(h.getName, h.getValue)), |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
139 |
p match {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
140 |
case mp: MimePart => Option(mp.getEncoding) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
141 |
case _ => None |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
142 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
143 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
144 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
145 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
146 |
sealed abstract class Content { def descriptor: Descriptor }
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
147 |
object Content {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
148 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
149 |
case class Plain(text: String, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
150 |
case class Html(text: String, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
151 |
case class Text(text: String, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
152 |
case class Multi(parts: List[Content], descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
153 |
case class Nested(message: Content, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
154 |
case class Stream(bytes: Array[Byte], descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
155 |
case class Attachment(file: String, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
156 |
case class Unknown(clz: String, descriptor: Descriptor) extends Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
157 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
158 |
def apply(m: Part)(implicit attDir: File): Content = {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
159 |
val d = Descriptor(m) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
160 |
m.getContent match {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
161 |
case t: String if m.isMimeType("text/plain") => Plain(t, d)
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
162 |
case t: String if m.isMimeType("text/html") => Html(t, d)
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
163 |
case t: String => Text(t, d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
164 |
case mp: Multipart if m.isMimeType("multipart/*") =>
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
165 |
Multi(0 until mp.getCount map(i => Content(mp.getBodyPart(i))) toList, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
166 |
d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
167 |
case p: Part if m.isMimeType("message/rfc822") =>
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
168 |
Nested(Content(p), d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
169 |
case p: MimeBodyPart => |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
170 |
val f = File.createTempFile("mail-", ".att", attDir)
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
171 |
p.saveFile(f) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
172 |
Attachment(f.getAbsolutePath, d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
173 |
case is: InputStream => |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
174 |
val f = File.createTempFile("mail-", ".att", attDir)
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
175 |
Files.copy(is, f.toPath, StandardCopyOption.REPLACE_EXISTING) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
176 |
Attachment(f.getAbsolutePath, d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
177 |
case x => Unknown(x.getClass.getName, d) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
178 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
179 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
180 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
181 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
182 |
case class EmailMessage( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
183 |
envelope: Envelope, |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
184 |
content: Content |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
185 |
) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
186 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
187 |
object EmailMessage {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
188 |
def apply(m: Message)(implicit attDir: File): EmailMessage = {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
189 |
EmailMessage(Envelope(m), Content(m)) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
190 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
191 |
} |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
192 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
193 |
@main |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
194 |
def main( |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
195 |
@doc("Email message file") mail: Path,
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
196 |
@doc("Output directory") outDir: Path): Unit = {
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
197 |
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
198 |
val session = Session.getInstance(System.getProperties) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
199 |
val msg = new MimeMessage(session, new ByteArrayInputStream(read.bytes(mail))) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
200 |
import upickle.default._ |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
201 |
import upickle.Js |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
202 |
val df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
|
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
203 |
implicit val w: default.Writer[Date] = Writer[Date](d => Js.Str(df.format(d))) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
204 |
outDir.toIO.mkdirs() |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
205 |
val m = EmailMessage(msg)(outDir.toIO) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
206 |
ammonite.ops.write.over(outDir / 'mail, write(m)) |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
207 |
println(s"Written to $outDir") |
|
09b1d3c0aa20
scala/mail-parser/mail-parser.sc: email parser (based on java mail api); ammonite.io script
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
208 |
} |