I'm in the process of testing an application that takes mail out of a mailbox, performs some action based on the content of that mail, and then sends a response mail depending on the result of the action.
I'm looking for a way to write tests for this application. Ideally, I'd like for these tests to bring up their own mail server, push my test emails to a folder on this mail server, and have my application scrape the mail out of the mail server that my test started.
Configuri开发者_Python百科ng the application to use the mailserver is not difficult, but I do not know where to look for a programatic way of starting a mail server in Java. I've looked at JAMES, but I am unable to figure out how to start the server from within my test.
So the question is this: What can I use for a mail server in Java that I can configure and start entirely within Java?
There is also very simple in use GreenMail which was designer as a mail server for automatic "unit" tests.
From projects web page (probably there are some others tools with sending/receiving functionality nowadays):
GreenMail is an open source, intuitive and easy-to-use test suite of email servers for testing purposes. Supports SMTP, POP3, IMAP with SSL socket support. GreenMail also provides a JBoss GreenMail Service. GreenMail is the fist and only library that offers a test framework for both receiving and retrieving emails from Java.
I've used both Dumbster and SubEthaSmtp in unit tests before to test code that sends email.
I found Dumbster to be far easier to work with.
Take a look at JES, seems to do what you want.
Dumbster: Fast to setup! But can't handle mail attachments. There only strings at the end of the body and have to be parsed separately.
So now I'm trying another framework
The Mock-JavaMail project
I came across it when developing a plugin for Jenkins, and it's been a dream to use!
Just drop the dependency into your project, and you're ready to go (I'll let Kohsuke explain how to set it up and use it).
If you're impatient, here's a quick example of how it's used:
Example:
// Setup test: add mail to inbox
Mailbox tmp = Mailbox.get("foo@bar.com");
tmp.add(/* your javax.mail.Message */)
assertEquals 1, tmp.size()
// Connect to the inmemory mailbox using "imap"
Session session = Session.getInstance(System.getProperties(), null);
Store store = session.getStore('imap');
store.connect("bar.com","foo","anything");
// Check the mail exists!
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
assertEquals 1, inbox.getMessageCount()
store.close();
精彩评论