package io.milton.mail; import io.milton.common.ReadingException; import io.milton.common.StreamUtils; import io.milton.common.WritingException; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeMessage; import junit.framework.TestCase; /** * * @author brad */ public class StandardMessageFactoryImplTest extends TestCase { Session session; StandardMessageFactoryImpl factory; public StandardMessageFactoryImplTest(String testName) { super(testName); } @Override protected void setUp() throws Exception { factory = new StandardMessageFactoryImpl(); session = Session.getDefaultInstance(new Properties()); } @Override protected void tearDown() throws Exception { super.tearDown(); } public void testSimpleText() throws MessagingException, IOException { InputStream in = this.getClass().getResourceAsStream("simple-text.smtp"); assertNotNull(in); MimeMessage mm = new MimeMessage(null, in); StandardMessage sm = new StandardMessageImpl(); factory.toStandardMessage(mm,sm); assertEquals("simple message", sm.getSubject()); assertEquals("text content", sm.getText()); mm = factory.toMimeMessage(sm, session); assertEquals("simple message", mm.getSubject()); assertNotNull(mm.getAllRecipients()); assertEquals(1, mm.getAllRecipients().length); ByteArrayOutputStream bout = new ByteArrayOutputStream(); mm.writeTo(bout); System.out.println("reconstructed simple message size: " + bout.size()); System.out.println(bout.toString()); } public void atestSimpleHtml() throws Exception { InputStream in = this.getClass().getResourceAsStream("simple-html.smtp"); assertNotNull(in); MimeMessage mm = new MimeMessage(null, in); StandardMessage sm = new StandardMessageImpl(); factory.toStandardMessage(mm,sm); assertEquals("html message", sm.getSubject()); assertEquals("html content", sm.getText()); assertTrue(sm.getHtml().contains("<STRONG>content</STRONG>")); mm = factory.toMimeMessage(sm, session); ByteArrayOutputStream bout = new ByteArrayOutputStream(); mm.writeTo(bout); System.out.println("bout: " + bout.size()); System.out.println(bout.toString()); } public void atestForwardedWithAttach() throws Exception { InputStream in = this.getClass().getResourceAsStream("forward-with-attach.smtp"); assertNotNull(in); MimeMessage mm = new MimeMessage(null, in); StandardMessage sm = new StandardMessageImpl(); factory.toStandardMessage(mm,sm); assertEquals("Fw: test4", sm.getSubject()); //assertEquals(1, sm.getAttachedMessages().size()); // System.out.println("sub messages: " + sm.getAttachedMessages().size()); // for( StandardMessage smChild : sm.getAttachedMessages() ) { // System.out.println("::html: " + smChild.getHtml()); // System.out.println("::text: " + smChild.getText()); // System.out.println(".."); // } // System.out.println("-----------"); assertEquals(1, sm.getAttachments().size()); for( Attachment att : sm.getAttachments() ) { System.out.println( att.getName() + " - " + att.size() ); att.useData(new InputStreamConsumer() { public void execute(InputStream in) { ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { StreamUtils.readTo(in, bout); } catch (ReadingException ex) { Logger.getLogger(StandardMessageFactoryImplTest.class.getName()).log(Level.SEVERE, null, ex); } catch (WritingException ex) { Logger.getLogger(StandardMessageFactoryImplTest.class.getName()).log(Level.SEVERE, null, ex); } //System.out.println(bout.toString()); } }); } mm = factory.toMimeMessage(sm, session); ByteArrayOutputStream bout = new ByteArrayOutputStream(); mm.writeTo(bout); System.out.println("bout: " + bout.size()); } public void atestHtmlWithImage() throws Exception { System.out.println("---------------- testHtmlWithImage --------------"); InputStream in = this.getClass().getResourceAsStream("html-image.smtp"); assertNotNull(in); MimeMessage mm = new MimeMessage(null, in); StandardMessage sm = new StandardMessageImpl(); factory.toStandardMessage(mm,sm); assertEquals("html with images", sm.getSubject()); assertNotNull(sm.getHtml()); assertTrue(sm.getHtml().length() > 0); assertNotNull(sm.getText()); assertTrue(sm.getText().length() > 0); assertNotNull(sm.getAttachments()); assertEquals(1, sm.getAttachments().size()); Attachment att = sm.getAttachments().get(0); assertNotNull(att.getContentId()); assertEquals("<0FB995E5A5A642018247136B06623E43@bradsalien>", att.getContentId()); assertTrue(att.getContentType().contains("image/jpeg")); mm = factory.toMimeMessage(sm, session); ByteArrayOutputStream bout = new ByteArrayOutputStream(); mm.writeTo(bout); //System.out.println(bout.toString()); } }