package org.jboss.seam.mock;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.internet.MimeMessage;
import org.jboss.seam.contexts.Contexts;
/**
* Provides a MockTransport for integration testing Seam Mail.
* {@link MockTransport#getMailMessage()} returns the most recently rendered
* message sent using the MockTransport.
*
* To enable the mock transport, set the mailSession.transport property to mock
* in components.properties.
*
* @see javax.mail.Transport
*
* @author Pete Muir
*
*/
public class MockTransport extends Transport
{
private static final String VAR_NAME = "org.jboss.seam.mock.mailMessage";
public MockTransport(Session session, URLName urlname)
{
super(session, urlname);
}
@Override
public void sendMessage(Message message, Address[] recipients)
throws MessagingException
{
Contexts.getApplicationContext().set(VAR_NAME, message);
}
/**
* Get the most recently rendered message sent using the MockTransport.
*/
public static void clearMailMessage()
{
Contexts.getApplicationContext().remove(VAR_NAME);
}
/**
* Get the most recently rendered message sent using the MockTransport.
*/
public static MimeMessage getMailMessage()
{
return (MimeMessage) Contexts.getApplicationContext().get(VAR_NAME);
}
@Override
public void connect() throws MessagingException
{
// No-op
}
}