22
22
import java .util .Set ;
23
23
import java .util .TreeMap ;
24
24
25
+ import static java .util .Arrays .copyOfRange ;
25
26
import static java .util .regex .Pattern .compile ;
26
27
27
28
/**
@@ -64,6 +65,18 @@ public class OutlookMessage {
64
65
* The name part of Reply-To header
65
66
*/
66
67
private String replyToName ;
68
+ /**
69
+ * The MIME part of the S/MIME header
70
+ */
71
+ private String smimeMime ;
72
+ /**
73
+ * The S/MIME type part of the S/MIME header
74
+ */
75
+ private String smimeType ;
76
+ /**
77
+ * The S/MIME name part of the S/MIME header
78
+ */
79
+ private String smimeName ;
67
80
/**
68
81
* The mail's subject.
69
82
*/
@@ -239,6 +252,9 @@ public void setProperty(final OutlookMessageProperty msgProp) {
239
252
case 0x39 : //CLIENT SUBMIT TIME
240
253
setClientSubmitTime (stringValue );
241
254
break ;
255
+ case 0x8005 : // S/MIME details
256
+ setSmime (stringValue );
257
+ break ;
242
258
}
243
259
244
260
// save all properties (incl. those identified above)
@@ -261,7 +277,7 @@ public void setProperty(final OutlookMessageProperty msgProp) {
261
277
// 3003: email address
262
278
// 1008 rtf sync
263
279
}
264
-
280
+
265
281
private String convertValueToString (final Object value ) {
266
282
if (value == null ) {
267
283
return null ;
@@ -379,47 +395,43 @@ private byte[] decompressRtfBytes(final byte[] value) {
379
395
380
396
@ Override
381
397
public String toString () {
382
- final StringBuilder sb = new StringBuilder ();
383
- sb .append ("From: " ).append (createMailString (fromEmail , fromName )).append ("\n " );
384
- sb .append ("To: " ).append (createMailString (toEmail , toName )).append ("\n " );
385
- if (date != null ) {
386
- final SimpleDateFormat formatter = new SimpleDateFormat ("EEE, d MMM yyyy HH:mm:ss z" , Locale .ENGLISH );
387
- sb .append ("Date: " ).append (formatter .format (date )).append ("\n " );
388
- }
389
- if (subject != null ) {
390
- sb .append ("Subject: " ).append (subject ).append ("\n " );
391
- }
392
- sb .append ("" ).append (outlookAttachments .size ()).append (" outlookAttachments." );
398
+ final StringBuilder sb = commonToString ();
399
+ sb .append (outlookAttachments .size ()).append (" outlookAttachments." );
393
400
return sb .toString ();
394
401
}
395
-
402
+
396
403
/**
397
404
* @return All information of this message object.
398
405
*/
399
406
public String toLongString () {
400
- final StringBuilder sb = new StringBuilder ();
401
- sb .append ("From: " ).append (createMailString (fromEmail , fromName )).append ("\n " );
402
- sb .append ("To: " ).append (createMailString (toEmail , toName )).append ("\n " );
403
- if (date != null ) {
404
- final SimpleDateFormat formatter = new SimpleDateFormat ("EEE, d MMM yyyy HH:mm:ss z" , Locale .ENGLISH );
405
- sb .append ("Date: " ).append (formatter .format (date )).append ("\n " );
406
- }
407
- if (subject != null ) {
408
- sb .append ("Subject: " ).append (subject ).append ("\n " );
409
- }
407
+ final StringBuilder sb = commonToString ();
410
408
sb .append ("\n " );
411
409
if (bodyText != null ) {
412
410
sb .append (bodyText );
413
411
}
414
412
if (!outlookAttachments .isEmpty ()) {
415
413
sb .append ("\n " );
416
- sb .append ("" ). append ( outlookAttachments .size ()).append (" outlookAttachments.\n " );
414
+ sb .append (outlookAttachments .size ()).append (" outlookAttachments.\n " );
417
415
for (final OutlookAttachment att : outlookAttachments ) {
418
416
sb .append (att ).append ("\n " );
419
417
}
420
418
}
421
419
return sb .toString ();
422
420
}
421
+
422
+ private StringBuilder commonToString () {
423
+ final StringBuilder sb = new StringBuilder ();
424
+ sb .append ("From: " ).append (createMailString (fromEmail , fromName )).append ("\n " );
425
+ sb .append ("To: " ).append (createMailString (toEmail , toName )).append ("\n " );
426
+ if (date != null ) {
427
+ final SimpleDateFormat formatter = new SimpleDateFormat ("EEE, d MMM yyyy HH:mm:ss z" , Locale .ENGLISH );
428
+ sb .append ("Date: " ).append (formatter .format (date )).append ("\n " );
429
+ }
430
+ if (subject != null ) {
431
+ sb .append ("Subject: " ).append (subject ).append ("\n " );
432
+ }
433
+ return sb ;
434
+ }
423
435
424
436
/**
425
437
* Convenience method for creating an email address expression (including the name, the address, or both).
@@ -443,6 +455,22 @@ private String createMailString(final String mail, final String name) {
443
455
}
444
456
return "\" " + name + "\" <" + mail + ">" ;
445
457
}
458
+
459
+ void setSmime (String smimeHeader ) {
460
+ // application/pkcs7-mime;smime-type=signed-data;name=smime.p7m
461
+ if (smimeHeader != null ) {
462
+ final String [] smimeHeaderParts = smimeHeader .split (";" );
463
+ setSmimeMime (smimeHeaderParts [0 ]);
464
+ for (String smimeHeaderParam : copyOfRange (smimeHeaderParts , 1 , smimeHeaderParts .length )) {
465
+ final String [] smimeParamParts = smimeHeaderParam .split ("=" );
466
+ if (smimeParamParts [0 ].equals ("smime-type" )) {
467
+ setSmimeType (smimeParamParts [1 ]);
468
+ } else if (smimeParamParts [0 ].equals ("name" )) {
469
+ setSmimeName (smimeParamParts [1 ]);
470
+ }
471
+ }
472
+ }
473
+ }
446
474
447
475
/**
448
476
* Bean getter for {@link #outlookAttachments}.
@@ -1002,11 +1030,53 @@ public void setReplyToEmail(final String replyToEmail) {
1002
1030
public String getReplyToName () {
1003
1031
return replyToName ;
1004
1032
}
1005
-
1033
+
1006
1034
/**
1007
1035
* Bean setter for {@link #replyToName}.
1008
1036
*/
1009
1037
public void setReplyToName (final String replyToName ) {
1010
1038
this .replyToName = replyToName ;
1011
1039
}
1040
+
1041
+ /**
1042
+ * Bean getter for {@link #smimeMime}.
1043
+ */
1044
+ public String getSmimeMime () {
1045
+ return smimeMime ;
1046
+ }
1047
+
1048
+ /**
1049
+ * Bean setter for {@link #smimeMime}.
1050
+ */
1051
+ public void setSmimeMime (String smimeMime ) {
1052
+ this .smimeMime = smimeMime ;
1053
+ }
1054
+
1055
+ /**
1056
+ * Bean getter for {@link #smimeType}.
1057
+ */
1058
+ public String getSmimeType () {
1059
+ return smimeType ;
1060
+ }
1061
+
1062
+ /**
1063
+ * Bean setter for {@link #smimeType}.
1064
+ */
1065
+ public void setSmimeType (String smimeType ) {
1066
+ this .smimeType = smimeType ;
1067
+ }
1068
+
1069
+ /**
1070
+ * Bean getter for {@link #smimeName}.
1071
+ */
1072
+ public String getSmimeName () {
1073
+ return smimeName ;
1074
+ }
1075
+
1076
+ /**
1077
+ * Bean setter for {@link #smimeName}.
1078
+ */
1079
+ public void setSmimeName (String smimeName ) {
1080
+ this .smimeName = smimeName ;
1081
+ }
1012
1082
}
0 commit comments