1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.mail.util;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertNotNull;
22 import static org.junit.Assert.assertNull;
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.File;
26 import java.util.List;
27 import java.util.Properties;
28
29 import javax.activation.DataSource;
30 import javax.mail.Session;
31 import javax.mail.internet.MimeMessage;
32
33 import org.apache.commons.mail.HtmlEmail;
34 import org.junit.Test;
35
36
37
38
39 public class MimeMessageParserTest
40 {
41 @Test
42 public void testParseSimpleEmail() throws Exception
43 {
44 final Session session = Session.getDefaultInstance(new Properties());
45 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/simple.eml"));
46 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
47
48 mimeMessageParser.parse();
49
50 assertEquals("Test HTML Send #1 Subject (wo charset)", mimeMessageParser.getSubject());
51 assertNotNull(mimeMessageParser.getMimeMessage());
52 assertTrue(mimeMessageParser.isMultipart());
53 assertFalse(mimeMessageParser.hasHtmlContent());
54 assertTrue(mimeMessageParser.hasPlainContent());
55 assertNotNull(mimeMessageParser.getPlainContent());
56 assertNull(mimeMessageParser.getHtmlContent());
57 assertTrue(mimeMessageParser.getTo().size() == 1);
58 assertTrue(mimeMessageParser.getCc().size() == 0);
59 assertTrue(mimeMessageParser.getBcc().size() == 0);
60 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
61 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
62 assertFalse(mimeMessageParser.hasAttachments());
63 }
64
65 @Test
66 public void testParseSimpleReplyEmail() throws Exception
67 {
68 final Session session = Session.getDefaultInstance(new Properties());
69 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/simple-reply.eml"));
70 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
71
72 mimeMessageParser.parse();
73
74 assertEquals("Re: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/pkcs/PrivateKeyInfo", mimeMessageParser.getSubject());
75 assertNotNull(mimeMessageParser.getMimeMessage());
76 assertFalse(mimeMessageParser.isMultipart());
77 assertFalse(mimeMessageParser.hasHtmlContent());
78 assertTrue(mimeMessageParser.hasPlainContent());
79 assertNotNull(mimeMessageParser.getPlainContent());
80 assertNull(mimeMessageParser.getHtmlContent());
81 assertTrue(mimeMessageParser.getTo().size() == 1);
82 assertTrue(mimeMessageParser.getCc().size() == 0);
83 assertTrue(mimeMessageParser.getBcc().size() == 0);
84 assertEquals("coheigea@apache.org", mimeMessageParser.getFrom());
85 assertEquals("dev@ws.apache.org", mimeMessageParser.getReplyTo());
86 assertFalse(mimeMessageParser.hasAttachments());
87 }
88
89 @Test
90 public void testParseHtmlEmailWithAttachments() throws Exception
91 {
92 DataSource dataSource;
93 final Session session = Session.getDefaultInstance(new Properties());
94 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment.eml"));
95 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
96
97 mimeMessageParser.parse();
98
99 assertEquals("Test", mimeMessageParser.getSubject());
100 assertNotNull(mimeMessageParser.getMimeMessage());
101 assertTrue(mimeMessageParser.isMultipart());
102 assertTrue(mimeMessageParser.hasHtmlContent());
103 assertTrue(mimeMessageParser.hasPlainContent());
104 assertNotNull(mimeMessageParser.getPlainContent());
105 assertNotNull(mimeMessageParser.getHtmlContent());
106 assertTrue(mimeMessageParser.getTo().size() == 1);
107 assertTrue(mimeMessageParser.getCc().size() == 0);
108 assertTrue(mimeMessageParser.getBcc().size() == 0);
109 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
110 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
111 assertTrue(mimeMessageParser.hasAttachments());
112 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
113 assertTrue(attachmentList.size() == 2);
114
115 dataSource = mimeMessageParser.findAttachmentByName("Wasserlilien.jpg");
116 assertNotNull(dataSource);
117 assertEquals("image/jpeg", dataSource.getContentType());
118
119 dataSource = mimeMessageParser.findAttachmentByName("it20one.pdf");
120 assertNotNull(dataSource);
121 assertEquals("application/pdf", dataSource.getContentType());
122 }
123
124 @Test
125 public void testParseHtmlEmailWithAttachmentAndEncodedFilename() throws Exception
126 {
127 DataSource dataSource;
128 final Session session = Session.getDefaultInstance(new Properties());
129 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment-encoded-filename.eml"));
130 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
131
132 mimeMessageParser.parse();
133
134 assertEquals("Test HTML Send #1 Subject (w charset)", mimeMessageParser.getSubject());
135 assertNotNull(mimeMessageParser.getMimeMessage());
136 assertTrue(mimeMessageParser.isMultipart());
137 assertTrue(mimeMessageParser.hasHtmlContent());
138 assertTrue(mimeMessageParser.hasPlainContent());
139 assertNotNull(mimeMessageParser.getPlainContent());
140 assertNotNull(mimeMessageParser.getHtmlContent());
141 assertTrue(mimeMessageParser.getTo().size() == 1);
142 assertTrue(mimeMessageParser.getCc().size() == 0);
143 assertTrue(mimeMessageParser.getBcc().size() == 0);
144 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
145 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
146 assertTrue(mimeMessageParser.hasAttachments());
147 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
148 assertTrue(attachmentList.size() == 1);
149
150 dataSource = mimeMessageParser.getAttachmentList().get(0);
151 assertNotNull(dataSource);
152 assertEquals("text/plain", dataSource.getContentType());
153 assertEquals("Test Attachment - a>ä, o>ö, u>ü, au>äu", dataSource.getName());
154 }
155
156
157
158
159
160
161
162 @Test
163 public void testParseMultipartReport() throws Exception
164 {
165 DataSource dataSource;
166 final Session session = Session.getDefaultInstance(new Properties());
167 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-report.eml"));
168 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
169
170 mimeMessageParser.parse();
171
172 assertEquals("Gelesen: ", mimeMessageParser.getSubject());
173 assertNotNull(mimeMessageParser.getMimeMessage());
174 assertTrue(mimeMessageParser.isMultipart());
175 assertTrue(mimeMessageParser.hasHtmlContent());
176 assertFalse(mimeMessageParser.hasPlainContent());
177 assertNull(mimeMessageParser.getPlainContent());
178 assertNotNull(mimeMessageParser.getHtmlContent());
179 assertTrue(mimeMessageParser.getTo().size() == 1);
180 assertTrue(mimeMessageParser.getCc().size() == 0);
181 assertTrue(mimeMessageParser.getBcc().size() == 0);
182 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
183 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
184 assertTrue(mimeMessageParser.hasAttachments());
185 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
186 assertTrue(attachmentList.size() == 1);
187
188 dataSource = (DataSource) attachmentList.get(0);
189 assertNotNull(dataSource);
190 assertNull(dataSource.getName());
191 assertEquals("message/disposition-notification", dataSource.getContentType());
192 }
193
194
195
196
197
198
199
200 @Test
201 public void testAttachmentOnly() throws Exception
202 {
203 DataSource dataSource;
204 final Session session = Session.getDefaultInstance(new Properties());
205 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/attachment-only.eml"));
206 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
207
208 mimeMessageParser.parse();
209
210 assertEquals("Kunde 100029 Auftrag 3600", mimeMessageParser.getSubject());
211 assertNotNull(mimeMessageParser.getMimeMessage());
212 assertFalse(mimeMessageParser.isMultipart());
213 assertFalse(mimeMessageParser.hasHtmlContent());
214 assertFalse(mimeMessageParser.hasPlainContent());
215 assertNull(mimeMessageParser.getPlainContent());
216 assertNull(mimeMessageParser.getHtmlContent());
217 assertTrue(mimeMessageParser.getTo().size() == 1);
218 assertTrue(mimeMessageParser.getCc().size() == 0);
219 assertTrue(mimeMessageParser.getBcc().size() == 0);
220 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
221 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
222 assertTrue(mimeMessageParser.hasAttachments());
223 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
224 assertTrue(attachmentList.size() == 1);
225
226 dataSource = mimeMessageParser.findAttachmentByName("Kunde 100029 Auftrag 3600.pdf");
227 assertNotNull(dataSource);
228 assertEquals("application/pdf", dataSource.getContentType());
229 }
230
231
232
233
234
235
236
237
238 @Test
239 public void testParseNoHeaderSeperatorWithOutOfMemory() throws Exception
240 {
241 final Session session = Session.getDefaultInstance(new Properties());
242 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/outofmemory-no-header-seperation.eml"));
243 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
244
245 mimeMessageParser.parse();
246
247 assertEquals("A corrupt Attachment", mimeMessageParser.getSubject());
248 assertNotNull(mimeMessageParser.getMimeMessage());
249 assertTrue(mimeMessageParser.isMultipart());
250 assertFalse(mimeMessageParser.hasHtmlContent());
251 assertFalse(mimeMessageParser.hasPlainContent());
252 assertNull(mimeMessageParser.getPlainContent());
253 assertNull(mimeMessageParser.getHtmlContent());
254 assertEquals(mimeMessageParser.getTo().size(), 1);
255 assertEquals(mimeMessageParser.getCc().size(), 0);
256 assertEquals(mimeMessageParser.getBcc().size(), 0);
257 }
258
259
260
261
262
263
264 @Test
265 public void testMultipartTextAttachment() throws Exception
266 {
267 DataSource dataSource;
268 final Session session = Session.getDefaultInstance(new Properties());
269 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-text-attachment.eml"));
270 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
271
272 mimeMessageParser.parse();
273
274 assertEquals("test", mimeMessageParser.getSubject());
275 assertNotNull(mimeMessageParser.getMimeMessage());
276 assertTrue(mimeMessageParser.isMultipart());
277 assertFalse(mimeMessageParser.hasHtmlContent());
278 assertTrue(mimeMessageParser.hasPlainContent());
279 assertNotNull(mimeMessageParser.getPlainContent());
280 assertNull(mimeMessageParser.getHtmlContent());
281 assertTrue(mimeMessageParser.getTo().size() == 1);
282 assertTrue(mimeMessageParser.getCc().size() == 0);
283 assertTrue(mimeMessageParser.getBcc().size() == 0);
284 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
285 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
286 assertTrue(mimeMessageParser.hasAttachments());
287 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
288 assertTrue(attachmentList.size() == 1);
289
290 dataSource = mimeMessageParser.findAttachmentByName("test.txt");
291 assertNotNull(dataSource);
292 assertEquals("text/plain", dataSource.getContentType());
293 }
294
295
296
297
298
299
300 @Test
301 public void testMultipartTextAttachmentOnly() throws Exception
302 {
303 DataSource dataSource;
304 final Session session = Session.getDefaultInstance(new Properties());
305 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-text-attachment-only.eml"));
306 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
307
308 mimeMessageParser.parse();
309
310 assertEquals("test", mimeMessageParser.getSubject());
311 assertNotNull(mimeMessageParser.getMimeMessage());
312 assertTrue(mimeMessageParser.isMultipart());
313 assertFalse(mimeMessageParser.hasHtmlContent());
314 assertFalse(mimeMessageParser.hasPlainContent());
315 assertNull(mimeMessageParser.getPlainContent());
316 assertNull(mimeMessageParser.getHtmlContent());
317 assertTrue(mimeMessageParser.getTo().size() == 1);
318 assertTrue(mimeMessageParser.getCc().size() == 0);
319 assertTrue(mimeMessageParser.getBcc().size() == 0);
320 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
321 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
322 assertTrue(mimeMessageParser.hasAttachments());
323 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
324 assertTrue(attachmentList.size() == 1);
325
326 dataSource = mimeMessageParser.findAttachmentByName("test.txt");
327 assertNotNull(dataSource);
328 assertEquals("text/plain", dataSource.getContentType());
329 }
330
331
332
333
334
335
336 @Test
337 public void testParseHtmlEmailWithHtmlAttachment() throws Exception
338 {
339 DataSource dataSource;
340 final Session session = Session.getDefaultInstance(new Properties());
341 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment-content-disposition.eml"));
342 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
343
344 mimeMessageParser.parse();
345
346 assertEquals("test", mimeMessageParser.getSubject());
347 assertNotNull(mimeMessageParser.getMimeMessage());
348 assertTrue(mimeMessageParser.isMultipart());
349 assertFalse(mimeMessageParser.hasHtmlContent());
350 assertTrue(mimeMessageParser.hasPlainContent());
351 assertNotNull(mimeMessageParser.getPlainContent());
352 assertNull(mimeMessageParser.getHtmlContent());
353 assertTrue(mimeMessageParser.getTo().size() == 1);
354 assertTrue(mimeMessageParser.getCc().size() == 0);
355 assertTrue(mimeMessageParser.getBcc().size() == 0);
356 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
357 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
358 assertTrue(mimeMessageParser.hasAttachments());
359 final List<?> attachmentList = mimeMessageParser.getAttachmentList();
360 assertTrue(attachmentList.size() == 1);
361
362 dataSource = mimeMessageParser.findAttachmentByName("test.html");
363 assertNotNull(dataSource);
364 assertEquals("text/html", dataSource.getContentType());
365 }
366
367 @Test
368 public void testParseCreatedHtmlEmailWithNoContent() throws Exception
369 {
370 final Session session = Session.getDefaultInstance(new Properties());
371
372 final HtmlEmail email = new HtmlEmail();
373
374 email.setMailSession(session);
375
376 email.setFrom("test_from@apache.org");
377 email.setSubject("Test Subject");
378 email.addTo("test_to@apache.org");
379
380 email.buildMimeMessage();
381 final MimeMessage msg = email.getMimeMessage();
382
383 final MimeMessageParser mimeMessageParser = new MimeMessageParser(msg);
384 mimeMessageParser.parse();
385
386 assertEquals("Test Subject", mimeMessageParser.getSubject());
387 assertNotNull(mimeMessageParser.getMimeMessage());
388 assertTrue(mimeMessageParser.isMultipart());
389 assertFalse(mimeMessageParser.hasHtmlContent());
390 assertFalse(mimeMessageParser.hasPlainContent());
391 assertNull(mimeMessageParser.getPlainContent());
392 assertNull(mimeMessageParser.getHtmlContent());
393 assertTrue(mimeMessageParser.getTo().size() == 1);
394 assertTrue(mimeMessageParser.getCc().size() == 0);
395 assertTrue(mimeMessageParser.getBcc().size() == 0);
396 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
397 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
398 assertFalse(mimeMessageParser.hasAttachments());
399 }
400
401 @Test
402 public void testParseCreatedHtmlEmailWithTextContent() throws Exception
403 {
404 final Session session = Session.getDefaultInstance(new Properties());
405
406 final HtmlEmail email = new HtmlEmail();
407
408 email.setMailSession(session);
409
410 email.setFrom("test_from@apache.org");
411 email.setSubject("Test Subject");
412 email.addTo("test_to@apache.org");
413 email.setTextMsg("My test message");
414
415 email.buildMimeMessage();
416 final MimeMessage msg = email.getMimeMessage();
417
418 final MimeMessageParser mimeMessageParser = new MimeMessageParser(msg);
419 mimeMessageParser.parse();
420
421 assertEquals("Test Subject", mimeMessageParser.getSubject());
422 assertNotNull(mimeMessageParser.getMimeMessage());
423 assertTrue(mimeMessageParser.isMultipart());
424 assertFalse(mimeMessageParser.hasHtmlContent());
425 assertTrue(mimeMessageParser.hasPlainContent());
426 assertNotNull(mimeMessageParser.getPlainContent());
427 assertNull(mimeMessageParser.getHtmlContent());
428 assertTrue(mimeMessageParser.getTo().size() == 1);
429 assertTrue(mimeMessageParser.getCc().size() == 0);
430 assertTrue(mimeMessageParser.getBcc().size() == 0);
431 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
432 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
433 assertFalse(mimeMessageParser.hasAttachments());
434 }
435
436 @Test
437 public void testParseCreatedHtmlEmailWithMixedContent() throws Exception
438 {
439 final Session session = Session.getDefaultInstance(new Properties());
440
441 final HtmlEmail email = new HtmlEmail();
442
443 email.setMailSession(session);
444
445 email.setFrom("test_from@apache.org");
446 email.setSubject("Test Subject");
447 email.addTo("test_to@apache.org");
448 email.setTextMsg("My test message");
449 email.setHtmlMsg("<p>My HTML message</p>");
450
451 email.buildMimeMessage();
452 final MimeMessage msg = email.getMimeMessage();
453
454 final MimeMessageParser mimeMessageParser = new MimeMessageParser(msg);
455 mimeMessageParser.parse();
456
457 assertEquals("Test Subject", mimeMessageParser.getSubject());
458 assertNotNull(mimeMessageParser.getMimeMessage());
459 assertTrue(mimeMessageParser.isMultipart());
460 assertTrue(mimeMessageParser.hasHtmlContent());
461 assertTrue(mimeMessageParser.hasPlainContent());
462 assertNotNull(mimeMessageParser.getPlainContent());
463 assertNotNull(mimeMessageParser.getHtmlContent());
464 assertTrue(mimeMessageParser.getTo().size() == 1);
465 assertTrue(mimeMessageParser.getCc().size() == 0);
466 assertTrue(mimeMessageParser.getBcc().size() == 0);
467 assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
468 assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
469 assertFalse(mimeMessageParser.hasAttachments());
470 }
471
472 @Test
473 public void testParseInlineCID() throws Exception
474 {
475 final Session session = Session.getDefaultInstance(new Properties());
476 final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment.eml"));
477 final MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
478
479 mimeMessageParser.parse();
480
481 assertEquals("Test", mimeMessageParser.getSubject());
482 assertNotNull(mimeMessageParser.getMimeMessage());
483 assertTrue(mimeMessageParser.isMultipart());
484 assertTrue(mimeMessageParser.hasHtmlContent());
485 assertNotNull(mimeMessageParser.getHtmlContent());
486 assertTrue(mimeMessageParser.getTo().size() == 1);
487 assertTrue(mimeMessageParser.getCc().size() == 0);
488 assertTrue(mimeMessageParser.getBcc().size() == 0);
489 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
490 assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
491 assertTrue(mimeMessageParser.hasAttachments());
492
493 assertTrue(mimeMessageParser.getContentIds().contains("part1.01080006.06060206@it20one.at"));
494 assertFalse(mimeMessageParser.getContentIds().contains("part2"));
495
496 final DataSource ds = mimeMessageParser.findAttachmentByCid("part1.01080006.06060206@it20one.at");
497 assertNotNull(ds);
498 assertEquals(ds, mimeMessageParser.getAttachmentList().get(0));
499 }
500
501 }