View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.mail.util;
18  
19  import junit.framework.TestCase;
20  
21  import javax.activation.DataSource;
22  import javax.mail.Session;
23  import javax.mail.internet.MimeMessage;
24  import java.io.File;
25  import java.util.List;
26  import java.util.Properties;
27  
28  /**
29   * Testing the MimeMessageParser.
30   */
31  public class MimeMessageParserTest
32      extends TestCase
33  {
34      /**
35       * Defines the test case name for JUnit.
36       *
37       * @param name the test case's name.
38       */
39      public MimeMessageParserTest(String name)
40      {
41          super(name);
42      }
43  
44      // ======================================================================
45      // Start of Tests
46      // ======================================================================
47  
48      public void testParseSimpleEmail() throws Exception
49      {
50          Session session = Session.getDefaultInstance(new Properties());
51          MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/simple.eml"));
52          MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
53  
54          mimeMessageParser.parse();
55  
56          assertEquals("Test HTML Send #1 Subject (wo charset)", mimeMessageParser.getSubject());
57          assertNotNull(mimeMessageParser.getMimeMessage());
58          assertTrue(mimeMessageParser.isMultipart());
59          assertFalse(mimeMessageParser.hasHtmlContent());
60          assertTrue(mimeMessageParser.hasPlainContent());
61          assertNotNull(mimeMessageParser.getPlainContent());
62          assertNull(mimeMessageParser.getHtmlContent());
63          assertTrue(mimeMessageParser.getTo().size() == 1);
64          assertTrue(mimeMessageParser.getCc().size() == 0);
65          assertTrue(mimeMessageParser.getBcc().size() == 0);
66          assertEquals("test_from@apache.org", mimeMessageParser.getFrom());
67          assertEquals("test_from@apache.org", mimeMessageParser.getReplyTo());
68          assertFalse(mimeMessageParser.hasAttachments());
69      }
70  
71      public void testParseSimpleReplyEmail() throws Exception
72      {
73          Session session = Session.getDefaultInstance(new Properties());
74          MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/simple-reply.eml"));
75          MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
76  
77          mimeMessageParser.parse();
78  
79          assertEquals("Re: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/pkcs/PrivateKeyInfo", mimeMessageParser.getSubject());
80          assertNotNull(mimeMessageParser.getMimeMessage());
81          assertFalse(mimeMessageParser.isMultipart());
82          assertFalse(mimeMessageParser.hasHtmlContent());
83          assertTrue(mimeMessageParser.hasPlainContent());
84          assertNotNull(mimeMessageParser.getPlainContent());
85          assertNull(mimeMessageParser.getHtmlContent());
86          assertTrue(mimeMessageParser.getTo().size() == 1);
87          assertTrue(mimeMessageParser.getCc().size() == 0);
88          assertTrue(mimeMessageParser.getBcc().size() == 0);
89          assertEquals("coheigea@apache.org", mimeMessageParser.getFrom());
90          assertEquals("dev@ws.apache.org", mimeMessageParser.getReplyTo());
91          assertFalse(mimeMessageParser.hasAttachments());
92      }
93  
94      public void testParseHtmlEmailWithAttachments() throws Exception
95      {
96          DataSource dataSource;
97          Session session = Session.getDefaultInstance(new Properties());
98          MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment.eml"));
99          MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
100 
101         mimeMessageParser.parse();
102 
103         assertEquals("Test", mimeMessageParser.getSubject());
104         assertNotNull(mimeMessageParser.getMimeMessage());        
105         assertTrue(mimeMessageParser.isMultipart());
106         assertTrue(mimeMessageParser.hasHtmlContent());
107         assertTrue(mimeMessageParser.hasPlainContent());
108         assertNotNull(mimeMessageParser.getPlainContent());
109         assertNotNull(mimeMessageParser.getHtmlContent());
110         assertTrue(mimeMessageParser.getTo().size() == 1);
111         assertTrue(mimeMessageParser.getCc().size() == 0);
112         assertTrue(mimeMessageParser.getBcc().size() == 0);
113         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
114         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
115         assertTrue(mimeMessageParser.hasAttachments());
116         List<?> attachmentList = mimeMessageParser.getAttachmentList();
117         assertTrue(attachmentList.size() == 2);
118 
119         dataSource = mimeMessageParser.findAttachmentByName("Wasserlilien.jpg");
120         assertNotNull(dataSource);
121         assertEquals("image/jpeg", dataSource.getContentType());
122 
123         dataSource = mimeMessageParser.findAttachmentByName("it20one.pdf");
124         assertNotNull(dataSource);
125         assertEquals("application/pdf", dataSource.getContentType());
126     }
127 
128     /**
129      * This test parses an "email read notification" where the resulting data source has no name. Originally
130      * the missing name caused a NPE in MimeUtility.decodeText().
131      *
132      * @throws Exception the test failed
133      */
134     public void testParseMultipartReport() throws Exception
135     {
136         DataSource dataSource;
137         Session session = Session.getDefaultInstance(new Properties());
138         MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-report.eml"));
139         MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
140 
141         mimeMessageParser.parse();
142 
143         assertEquals("Gelesen: ", mimeMessageParser.getSubject());
144         assertNotNull(mimeMessageParser.getMimeMessage());
145         assertTrue(mimeMessageParser.isMultipart());
146         assertTrue(mimeMessageParser.hasHtmlContent());
147         assertFalse(mimeMessageParser.hasPlainContent());
148         assertNull(mimeMessageParser.getPlainContent());
149         assertNotNull(mimeMessageParser.getHtmlContent());
150         assertTrue(mimeMessageParser.getTo().size() == 1);
151         assertTrue(mimeMessageParser.getCc().size() == 0);
152         assertTrue(mimeMessageParser.getBcc().size() == 0);
153         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
154         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
155         assertTrue(mimeMessageParser.hasAttachments());
156         List<?> attachmentList = mimeMessageParser.getAttachmentList();
157         assertTrue(attachmentList.size() == 1);
158 
159         dataSource = (DataSource) attachmentList.get(0);
160         assertNotNull(dataSource);
161         assertNull(dataSource.getName());
162         assertEquals("message/disposition-notification", dataSource.getContentType());
163     }
164 
165     /**
166      * This test parses a SAP generated email which only contains a PDF but no email
167      * text.
168      *
169      * @throws Exception the test failed
170      */
171     public void testAttachmentOnly() throws Exception
172     {
173         DataSource dataSource;
174         Session session = Session.getDefaultInstance(new Properties());
175         MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/attachment-only.eml"));
176         MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
177 
178         mimeMessageParser.parse();
179 
180         assertEquals("Kunde 100029   Auftrag   3600", mimeMessageParser.getSubject());
181         assertNotNull(mimeMessageParser.getMimeMessage());
182         assertFalse(mimeMessageParser.isMultipart());
183         assertFalse(mimeMessageParser.hasHtmlContent());
184         assertFalse(mimeMessageParser.hasPlainContent());
185         assertNull(mimeMessageParser.getPlainContent());
186         assertNull(mimeMessageParser.getHtmlContent());
187         assertTrue(mimeMessageParser.getTo().size() == 1);
188         assertTrue(mimeMessageParser.getCc().size() == 0);
189         assertTrue(mimeMessageParser.getBcc().size() == 0);
190         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getFrom());
191         assertEquals("siegfried.goeschl@it20one.at", mimeMessageParser.getReplyTo());
192         assertTrue(mimeMessageParser.hasAttachments());
193         List<?> attachmentList = mimeMessageParser.getAttachmentList();
194         assertTrue(attachmentList.size() == 1);
195 
196         dataSource = mimeMessageParser.findAttachmentByName("Kunde 100029   Auftrag   3600.pdf");
197         assertNotNull(dataSource);
198         assertEquals("application/pdf", dataSource.getContentType());
199     }
200     
201     /**
202      * This test parses an eml file published with issue EMAIL-110.
203      * This eml file has a corrupted attachment but should not create
204      * an OutOfMemoryException.
205      * 
206      * @throws Exception the test failed
207      */
208     public void testParseNoHeaderSeperatorWithOutOfMemory() throws Exception
209     {
210         Session session = Session.getDefaultInstance(new Properties());
211         MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/outofmemory-no-header-seperation.eml"));
212         MimeMessageParser mimeMessageParser = new MimeMessageParser(message);
213 
214         mimeMessageParser.parse();
215 
216         assertEquals("A corrupt Attachment", mimeMessageParser.getSubject());
217         assertNotNull(mimeMessageParser.getMimeMessage());
218         assertTrue(mimeMessageParser.isMultipart());
219         assertFalse(mimeMessageParser.hasHtmlContent());
220         assertFalse(mimeMessageParser.hasPlainContent());
221         assertNull(mimeMessageParser.getPlainContent());
222         assertNull(mimeMessageParser.getHtmlContent());
223         assertEquals(mimeMessageParser.getTo().size(), 1);
224         assertEquals(mimeMessageParser.getCc().size(), 0);
225         assertEquals(mimeMessageParser.getBcc().size(), 0);
226     }
227 }