]>
git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.mail/src/org/argeo/slc/mail/EmailUtils.java
1 package org
.argeo
.slc
.mail
;
5 import javax
.mail
.Address
;
6 import javax
.mail
.Flags
;
7 import javax
.mail
.Message
;
8 import javax
.mail
.MessagingException
;
9 import javax
.mail
.internet
.InternetAddress
;
10 import javax
.mail
.internet
.MimeMessage
;
12 /** Utilities around emails. */
13 public class EmailUtils
{
14 public final static String INBOX
= "Inbox";
15 public final static String MESSAGE_ID
= "Message-ID";
17 public static String
getMessageId(Message msg
) {
19 return msg
instanceof MimeMessage ?
((MimeMessage
) msg
).getMessageID() : "<N/A>";
20 } catch (MessagingException e
) {
21 throw new IllegalStateException("Cannot extract message id from " + msg
, e
);
25 public static String
describe(Message msg
) {
27 return "Message " + msg
.getMessageNumber() + " " + msg
.getSentDate().toInstant() + " " + getMessageId(msg
);
28 } catch (MessagingException e
) {
29 throw new IllegalStateException("Cannot describe " + msg
, e
);
33 static void setHeadersFromFlags(MimeMessage msg
, Flags flags
) {
35 StringBuilder status
= new StringBuilder();
36 if (flags
.contains(Flags
.Flag
.SEEN
))
38 if (!flags
.contains(Flags
.Flag
.RECENT
))
40 if (status
.length() > 0)
41 msg
.setHeader("Status", status
.toString());
43 msg
.removeHeader("Status");
46 String s
= msg
.getHeader("X-Status", null);
47 // is it a SIMS 2.0 format X-Status header?
48 sims
= s
!= null && s
.length() == 4 && s
.indexOf('$') >= 0;
49 //status.setLength(0);
50 if (flags
.contains(Flags
.Flag
.DELETED
))
54 if (flags
.contains(Flags
.Flag
.FLAGGED
))
58 if (flags
.contains(Flags
.Flag
.ANSWERED
))
62 if (flags
.contains(Flags
.Flag
.DRAFT
))
66 if (status
.length() > 0)
67 msg
.setHeader("X-Status", status
.toString());
69 msg
.removeHeader("X-Status");
71 String
[] userFlags
= flags
.getUserFlags();
72 if (userFlags
.length
> 0) {
74 for (int i
= 0; i
< userFlags
.length
; i
++)
75 status
.append(userFlags
[i
]).append(' ');
76 status
.setLength(status
.length() - 1); // smash trailing space
77 msg
.setHeader("X-Keywords", status
.toString());
79 if (flags
.contains(Flags
.Flag
.DELETED
)) {
80 s
= msg
.getHeader("X-Dt-Delete-Time", null);
82 // XXX - should be time
83 msg
.setHeader("X-Dt-Delete-Time", "1");
85 } catch (MessagingException e
) {
90 protected static String
getUnixFrom(MimeMessage msg
) {
96 if ((afrom
= msg
.getFrom()) == null ||
97 !(afrom
[0] instanceof InternetAddress
) ||
98 (from
= ((InternetAddress
)afrom
[0]).getAddress()) == null)
100 if ((ddate
= msg
.getReceivedDate()) == null ||
101 (ddate
= msg
.getSentDate()) == null)
103 } catch (MessagingException e
) {
107 date
= ddate
.toString();
108 // date is of the form "Sat Aug 12 02:30:00 PDT 1995"
109 // need to strip out the timezone
110 return "From " + from
+ " " +
111 date
.substring(0, 20) + date
.substring(24);
115 private EmailUtils() {