Apache James is a popular open source mail server. It supports SMTP, POP3 and IMAP protocols. This can be very useful for testing email functionality of an application which is being developed and if you do not have any mail server available.
For more details visit: https://james.apache.org/documentation.html
We are going to see following:
1- Install Apache James on windows
2- Add local domain
3- Add user account
4- Use of Mozilla Thunderbird to send and receive emails
Pre-requisites:
1- Java 1.8 or later. Download Java 1.8 From here
2- Apache james-server-app-3.2.0 or newer. Download James Server from here
List of all versions can be found here: https://james.apache.org/download.cgi#Apache_James_Server
3- Mozilla Thunderbird email client. Download latest version from here
Let's get started....
-------------------------------------------------------------------------------------------------------------------
Installing the james-server-app:
-------------------------------------------------------------------------------------------------------------------
Assuming you have already downloaded latest distribution from the download site. Please follow these steps:
1- Extract the james-server-app-3.2.0-app.zip to a local folder say C:\Personal\ProjectSofts\MailServer
2- Open windows command prompt
3- Change the directory to bin folder (<installationDir>/james-server-app-3.2.0\bin) for example C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin.
Note: Before run Apache James mail server, make sure you have Java 1.8 installed on your machine
-------------------------------------------------------------------------------------------------------------------
Starting up james mail server:
-------------------------------------------------------------------------------------------------------------------
Follow these steps:
1- Execute run.bat in the dos window then Apache James server started.
2- When Apache James mail server starts, it starts both SMTP and POP3 mail server.
As we know that SMTP is used to send email out while POP3 is used to receive income email.
Port number 25 is the default SMTP server port, and Port number 110 is the default for POP3.
3- If you want to change the port numbers, then you can do following:
3.1- Go to <installationDir>/james-server-app-3.2.0\conf. for example:
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\conf
|
3.2- Open smtpserver.xml in notepad or any text editor
3.3- Find <bind> element and update the port number as needed. I am using default port for now
<smtpservers>
<!-- The SMTP server is enabled by
default -->
<!-- Disabling blocks will stop them
from listening, -->
<!-- but does not free as many
resources as removing them would -->
<smtpserver
enabled="true">
<jmxName>smtpserver</jmxName>
<!-- Configure this to bind to a
specific inetaddress -->
<!-- Please NOTE: you should add this
IP also to your RemoteAddrNotInNetwork -->
<!-- in order to avoid relay check
for locallly generated bounces -->
<!--
Port 25 is the well-known/IANA
registered port for SMTP.
Port 465 is the well-known/IANA
registered port for SMTP over TLS.
-->
<bind>0.0.0.0:25</bind>
<connectionBacklog>200</connectionBacklog>
…..
….
</smtpservers>
|
3.4- Open pop3server.xml in notepad or any text editor
3.5- Find <bind> element and update the port number as needed. I am using default port for now
<pop3servers>
<!-- The POP3 server is enabled by
default -->
<!-- Disabling blocks will stop them
from listening, -->
<!-- but does not free as many
resources as removing them would -->
<pop3server
enabled="true">
<jmxName>pop3server</jmxName>
<!-- Configure this to bind to a
specific inetaddress -->
<!-- port 995 is the
well-known/IANA registered port for POP3S
ie over SSL/TLS -->
<!-- port 110 is the
well-known/IANA registered port for Standard POP3 -->
<bind>0.0.0.0:110</bind>
<connectionBacklog>200</connectionBacklog>…..
….
</pop3servers>
|
3.6- Now restart Apache James server, it will use the new SMTP and POP3 port number if changed
So far we have seen how to install, start and simple configurations of Apache james mail server. Let's proceed further with its usage.
Apache James is shipped with another tool called james-cli. Its a tool used for command line inputs. We will use james-cli command line interface for adding/removing domain, users etc.
-------------------------------------------------------------------------------------------------------------------
Add a local domain: It will be used to create users against this domain.
-------------------------------------------------------------------------------------------------------------------
Follow these steps:
1- Open command prompt and go to <installationDir>/james-server-app-3.2.0\bin. Example as shown above:
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin
|
2- Start the james server if not already started.
3- On command prompt execute following command:
c:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin>james-cli.bat
|
This will print all available command line options for Apache james mail server configuration.
usage: java
org.apache.james.cli.ServerCmd --host <arg> <command>
-h,--host <arg> node hostname or ip address
-p,--port <arg> remote jmx agent port number
AddUser <username>
<password>
RemoveUser <username>
ListUsers
AddDomain <domainName>
RemoveDomain <domainName>
ContainsDomain
<domainName>
ListDomains
ListMappings
ListUserDomainMappings
<user> <domain>
AddAddressMapping
<fromUser> <fromDomain> <toAddress>
RemoveAddressMapping
<fromUser> <fromDomain> <toAddress>
AddRegexMapping <user>
<domain> <regex>
RemoveRegexMapping <user>
<domain> <regex>
SetPassword <username>
<password>
CopyMailbox <srcBean>
<dstBean>
DeleteUserMailboxes
<user>
CreateMailbox <namespace>
<user> <name>
ListUserMailboxes <user>
DeleteMailbox <namespace>
<user> <name>
ImportEml <namespace>
<user> <name> <path>
GetStorageQuota
<quotaroot>
GetMessageCountQuota
<quotaroot>
GetQuotaroot <namespace>
<user> <name>
GetMaxStorageQuota
<quotaroot>
GetMaxMessageCountQuota
<quotaroot>
SetMaxStorageQuota
<quotaroot> <maxMessageCount>
SetMaxMessageCountQuota
<quotaroot> <maxStorage>
SetGlobalMaxStorageQuota
<maxStorage>
SetGlobalMaxMessageCountQuota
<maxMessageCount>
GetGlobalMaxStorageQuota
GetGlobalMaxMessageCountQuota
ReindexMailbox
<namespace> <user> <name>
ReindexAll
GetSieveQuota
SetSieveQuota <quota>
RemoveSieveQuota
GetSieveUserQuota
<username>
SetSieveUserQuota
<username> <quota>
RemoveSieveUserQuota
<username>
AddActiveSieveScript
<username> <scriptname> <path>
|
4- Let's say i want to add domain as "abhinav.com", so to add domain use following command.
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin>james-cli.bat
AddDomain abhinav.com
AddDomain command executed successfully in 276 ms.
|
It will show the message on command prompt if domain is added successfully or else you will get error if there is any.
-------------------------------------------------------------------------------------------------------------------
Add an user: Since we have created domain already, let's add a user which will send/receive emails
-------------------------------------------------------------------------------------------------------------------
Follow these steps:
1- Open command prompt and go to <installationDir>/james-server-app-3.2.0\bin. Example as shown above:
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin
|
2- Start the james server if not already started.
3- Let's say i want to add user as "admin@abhinav.com" with password as "admin".
4- Run following command to add user against the domain specified above. We will use "AddUser" command to add users
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin>james-cli.bat
AddUser admin@abhinav.com admin
AddUser command executed successfully in 225 ms.
|
It will show the message on command prompt if user is added successfully or else you will get error if there is any.
-------------------------------------------------------------------------------------------------------------------
Now it's time to use Thunderbird To Connect Apache James Mail Server On Localhost.
--------------------------------------------------------------------------------------------------------------------
Follow these steps as given below:
1- Download and install Thunderbird client.
2- Edit hosts file in Windows, add below IP domain mappings.With this change Mozilla Thunderbird will know that both domain smtp.abhinav.com and pop3.abhinav.com will be resolved to IP 127.0.0.1.
127.0.0.1 abhinav.com
127.0.0.1 smtp.abhinav.com
127.0.0.1 pop3.abhinav.com
|
Note: Close the host file after editing.
3- Start Thunderbird for the first time, then click Email in Accounts —> Set up an account section.
4- Input Your name : Admin, Email address : admin@abhinav.com, Password : admin, in the popup dialog.
5- Click "Continue". It will check the configurations and prompt for next steps.
6- In the next step, Select "POP3" radio button.
7- Select "Manual config". It will give some additional options to configure ports, authentication mechanisms and security.
8- Update the outgoing email port to 25, change the host from mail.abhinav.com to just "abhinav.com", update the SSL option to "None" and leave other values as is.
9- Click "Re-test" button to check whether the configuration is correct or not.
10- Click "Done" button in above picture then it goes to domain not use encryption security warning dialog, check the checkbox and click Done button to finish the settings.
11- Let's add another user so that we can test sending and receiving of emails.
C:\Personal\ProjectSofts\MailServer\james-server-app-3.2.0\bin>james-cli.bat
AddUser test@abhinav.com test
AddUser
command executed successfully in 225 ms.
|
12- Add the newly added account to the Mozilla Thunderbird client following the same above steps.
13- Let's send and receive and emails to these two email Ids.
Now you can see we are able to send and receive emails successfully.
References: https://james.apache.org/documentation.html
-------------------------------------------------------------------------------------------------------
There are many other open source alternatives for using local SMTP servers.
1- Hedwid: It is an open source IMAP, SMTP, POP3 server written in Java, designed with ease of installation and configuration in mind. Hedwig enables storage of mail message headers in a relational database(MySQL or Oracle) and mail messages in a file system.
Download and Try:
There are many other open source alternatives for using local SMTP servers.
1- Hedwid: It is an open source IMAP, SMTP, POP3 server written in Java, designed with ease of installation and configuration in mind. Hedwig enables storage of mail message headers in a relational database(MySQL or Oracle) and mail messages in a file system.
Download and Try:
2- FakeSMTP: It is a Free Fake SMTP Server with GUI for testing emails in applications easily. It is written in Java.
Configure your application to use "localhost" as your SMTP server, and all emails will be intercepted and displayed in this software.
Download latest version:
Nice and informative article. Thanks for sharing.
ReplyDeleteThanks Parag
DeleteAwesome ✌️✌️✌️✌️
ReplyDeleteThanks Abhi
DeleteHi, did you by any chance try out the jamesui from https://sourceforge.net/projects/jamesui/?? I am having grief getting it to work and hope you can help me out.
ReplyDeletePlease let me know if you do manage to use jamesui from https://sourceforge.net/projects/jamesui/ to manage the james-server.
ReplyDeleteNo i have not used jamesui. It is not official tool. It better to follow the apache james documentation.
ReplyDeletehttps://james.apache.org/documentation.html
First of all thanks for this great content. In my case it setup but not getting mail. How can I cross verify it?
ReplyDeleteCan you check and see if you get any error on james server console when trying to send email?
DeleteAlso re-check all the steps and verify whether smtp and pop3 ports are configured correctly/open and not being blocked by any firewall rule
Delete