Package org.subethamail.smtp

Source Code of org.subethamail.smtp.MessageContentTest

package org.subethamail.smtp;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Properties;
import java.util.Random;

import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.subethamail.wiser.Wiser;

/**
* This class serves as a test case for both Wiser (since it is used
* internally here) as well as harder to reach code within the SMTP
* server that tests a roundtrip message through the DATA portion
* of the SMTP spec.
*
* @author Jon Stevens
* @author Jeff Schnitzer
* @author De Oliveira Edouard <doe_wanted@yahoo.fr>
* @author Ville Skyttä (contributed some encoding tests)
*/
public class MessageContentTest extends TestCase
{
  /** */
  @SuppressWarnings("unused")
  private static Logger log = LoggerFactory.getLogger(MessageContentTest.class);

  /** */
  public static final int PORT = 2566;

  /** */
  protected Wiser wiser;
  protected Session session;

  /** */
  public MessageContentTest(String name) { super(name); }

  /** */
  @Override
  protected void setUp() throws Exception
  {
    super.setUp();

    Properties props = new Properties();
    props.setProperty("mail.smtp.host", "localhost");
    props.setProperty("mail.smtp.port", Integer.toString(PORT));
    this.session = Session.getInstance(props);

    this.wiser = new Wiser();
    this.wiser.setPort(PORT);

    this.wiser.start();
  }

  /** */
  @Override
  protected void tearDown() throws Exception
  {
    this.wiser.stop();
    this.wiser = null;

    this.session = null;

    super.tearDown();
  }

  /** */
  public void testReceivedHeader() throws Exception
  {
    MimeMessage message = new MimeMessage(this.session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone@anywhere.com"));
    message.setFrom(new InternetAddress("someone@somewhereelse.com"));
    message.setSubject("barf");
    message.setText("body");

    Transport.send(message);

    assertEquals(1, this.wiser.getMessages().size());

    String[] receivedHeaders = this.wiser.getMessages().get(0).getMimeMessage().getHeader("Received");

    assertEquals(1, receivedHeaders.length);
  }

  /** */
  public void testMultipleRecipients() throws Exception
  {
    MimeMessage message = new MimeMessage(this.session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone@anywhere.com"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone2@anywhere.com"));
    message.setFrom(new InternetAddress("someone@somewhereelse.com"));
    message.setSubject("barf");
    message.setText("body");

    Transport.send(message);

    assertEquals(2, this.wiser.getMessages().size());
  }

  /** */
  public void testLargeMessage() throws Exception
  {
    MimeMessage message = new MimeMessage(this.session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone@anywhere.com"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone2@anywhere.com"));
    message.setFrom(new InternetAddress("someone@somewhereelse.com"));
    message.setSubject("barf");
    message.setText("bodyalksdjflkasldfkasjldfkjalskdfjlaskjdflaksdjflkjasdlfkjl");

    Transport.send(message);

    assertEquals(2, this.wiser.getMessages().size());

    assertEquals("barf", this.wiser.getMessages().get(0).getMimeMessage().getSubject());
    assertEquals("barf", this.wiser.getMessages().get(1).getMimeMessage().getSubject());
  }


  /** */
  public void testUtf8EightBitMessage() throws Exception
  {
    // Beware editor/compiler character encoding issues; safest to put unicode escapes here

    String body = "\u00a4uro ma\u00f1ana\r\n";
    this.testEightBitMessage(body, "UTF-8");

    assertEquals(body, this.wiser.getMessages().get(0).getMimeMessage().getContent());
  }

  /** */
  public void testIso88591EightBitMessage() throws Exception
  {
    // Beware editor/compiler character encoding issues; safest to put unicode escapes here

    String body = "ma\u00f1ana\r\n"// spanish ene (ie, n with diacritical tilde)
    this.testEightBitMessage(body, "ISO-8859-1");

    assertEquals(body, this.wiser.getMessages().get(0).getMimeMessage().getContent());
  }

  /** */
  public void testIso885915EightBitMessage() throws Exception
  {
    // Beware editor/compiler character encoding issues; safest to put unicode escapes here

    String body = "\u0080uro\r\n"; // should be the euro symbol
    this.testEightBitMessage(body, "ISO-8859-15");

//    String content = (String)this.wiser.getMessages().get(0).getMimeMessage().getContent();
//    for (int i=0; i<content.length(); i++)
//    {
//      log.info("Char is:  " + Integer.toString(content.codePointAt(i), 16));
//    }

    assertEquals(body, this.wiser.getMessages().get(0).getMimeMessage().getContent());
  }

  /** */
  private void testEightBitMessage(String body, String charset) throws Exception
  {
    MimeMessage message = new MimeMessage(this.session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone@anywhere.com"));
    message.setFrom(new InternetAddress("someone@somewhereelse.com"));
    message.setSubject("hello");
    message.setText(body, charset);
    message.setHeader("Content-Transfer-Encoding", "8bit");

    Transport.send(message);
  }

  /** */
  public void testIso2022JPEightBitMessage() throws Exception
    {
    String body = "\u3042\u3044\u3046\u3048\u304a\r\n"; // some Japanese letters
    this.testEightBitMessage(body, "iso-2022-jp");

    assertEquals(body, this.wiser.getMessages().get(0).getMimeMessage().getContent());
  }

  /** */
  public void testBinaryEightBitMessage() throws Exception
  {
    byte[] body = new byte[64];
    new Random().nextBytes(body);

    MimeMessage message = new MimeMessage(this.session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("anyone@anywhere.com"));
    message.setFrom(new InternetAddress("someone@somewhereelse.com"));
    message.setSubject("hello");
    message.setHeader("Content-Transfer-Encoding", "8bit");
    message.setDataHandler(new DataHandler(new ByteArrayDataSource(body, "application/octet-stream")));

    Transport.send(message);

    InputStream in = this.wiser.getMessages().get(0).getMimeMessage().getInputStream();
    ByteArrayOutputStream tmp = new ByteArrayOutputStream();
    byte[] buf = new byte[64];
    int n;
    while ((n = in.read(buf)) != -1)
    {
      tmp.write(buf, 0, n);
    }
    in.close();

    assertTrue(Arrays.equals(body, tmp.toByteArray()));
  }

  /** */
  public static Test suite()
  {
    return new TestSuite(MessageContentTest.class);
  }
}
TOP

Related Classes of org.subethamail.smtp.MessageContentTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.