Using Apache JAMES Mail Server
Recently, I needed an open source email server for testing purposes and I came across JAMES project. The Java Apache Mail Enterprise Server or JAMES is an open source mail application platform that among many other things is a full-fledged e-mail server. It is a pure Java implementation (built on Spring Framework) and supports all the standard e-mail protocols such as SMTP, POP3 etc. In this post, I will quickly demonstrate how you can set up JAMES on your local Windows box and use it to send emails.
Step 1: Download the latest version of JAMES from Apache site. At the time of this writing the latest stable version is 2.3.2 (james-binary-2.3.2.zip). Unzip the downloaded file to a folder on your box. I will be referring to this directory as JAMES_INSTALL_DIR throughout post.
Step 2: To start JAMES, simply run the “run.bat” file under the

Step 3: Before we can start sending and receiving mails, we need to create a user account on our mail server. JAMES provides a Remote Manager Service on port 4555 that you can telnet into and interact with. Simply launch a new Command Prompt and run the command:
telnet localhost 4555
You should see the Remote Administration Tool and a prompt for your login id.

Enter root as your login id and upon prompt for password enter root. This would log you in. To create a new user run the following command: adduser someusername somepassword

Here are some of the useful commands supported by JAMES:
| Command | Description |
|---|---|
| help | Display help with commands |
| listusers | |
| setpassword | Sets a user’s password. The format is setpassword username password |
| deluser | Deletes an existing user. The format is deluser username |
| adduser | Adds a new user. The format is adduser username password |
| countusers | Shows the number of existing accounts |
| listusers | Lists all the existing accounts in the mail server |
| quit | Closes the connection |
Step 4: Now we have everything installed and setup to send emails. Lets give it a try by running the sample code below:
package com.practicalspring.mail;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Main {
public static void main(String[] args)
{
/***** CHANGE THESE FOUR VARIABLE VALUES TO REFLECT YOUR ENVIRONMENT ******/
String user = "vader"; // Newly created user on JAMES
String password = "darth"; // user password
String fromAddress = "vader@localhost"; // newlycreateduser@localhost
String toAddress = "SOMEUSER@gmail.com";
// Create a mail session
Properties properties = new Properties();
properties.put("mail.smtp.host", "localhost");
properties.put("mail.smtp.port", "25");
properties.put("mail.smtp.username", user);
properties.put("mail.smtp.password", password);
Session session = Session.getDefaultInstance(properties, null);
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject("Email from our JAMES Server");
message.setText("Luke, I'm your father!!");
Transport.send(message);
System.out.println("Email sent successfully");
}
catch (MessagingException e)
{
e.printStackTrace();
}
}
}
Here is the generated email in my inbox:

If you don’t see an email in your inbox in the next couple minutes make sure to check in the Spam folder.