The goal of the document is to allow anyone to start with James binary Spring distribution as an operational mail server.
For more complete ways of deploying James server please refer to the James installation guide
Step 0: Requirements #################### * JDK 11 * root (linux/unix) or Administrator (Windows) * libc6 (linux) * 512MB RAM (launches with -Xmx512M - can use less, can need more, depending on load) Step 1: Download ################# * Download apache-james-3.8.1-app.zip from https://james.apache.org/download.cgi#Apache_James_Server Step 2: Deploy ############## * Unzip apache-james-3.8.1-app.zip. * You should have a folder with sub-folders bin, conf, lib, log, var and four text files. $ unzip apache-james-3.8.1-app.zip $ cd apache-james-3.8.1-app $ ls (linux) / dir (windows) bin BUILD.txt conf lib LICENSE.txt log NOTICE.txt README.txt var Step 3: Understand James Features ################################# Persistence - Mailbox is for users' Inbox, Sent Items, Trash... folders - Mailbox persistence is configured in spring-beans.xml (by default jpa, you set the database connection properties in database.properties). We think to move this config out-of spring-beans.xml. - Mailrepositorystore is for spam, error,... mails, so nothing to do with users visible mails. Available mailstore persistence are defined in mailstore.xml. Each has an URL prefix (file, db, dbfile,...) that can be used in mailetcontainer.xml to define where to store spam,... mails (exemple: file://var/mail/error/). - Domain persistence is configured in domainlist.xml - Users persistence is configured in usersrepository.xml - All database connection use the database.properties in case of database access. Mailet Container - http://james.apache.org/server/feature-mailetcontainer.html SMTP Hooks - http://james.apache.org/server/feature-smtp-hooks.html Step 4: Configure ################# * All configuration files are embedded in jars. * We ship in the conf folder the configuration files. * You can override the default configuration by editing these files database.properties META-INF/persistence.xml dnsservice.xml domainlist.xml fetchmail.xml imapserver.xml james-listmanager.xml jmx.properties lmtpserver.xml log4j.properties mailetcontainer.xml mailbox.xml mailserver.xml mailrepositorystore.xml pop3server.xml recipientrewritetable.xml smtpserver.xml sqlResources.xml usersrepository.xml wrapper.xml lib folder (for your additional jar, e.g. JDBC drviers,...) James is packaged with virtual hosting enabled, JPA (Derby database) storage for the mails, users, and domains. On SMTP (see smtpserver.xml config) * authRequired is true by default, so you can safely deploy James on the Internet (it won't be an open relay). * verifyIdentity is true by default (you can only send mails with a FROM being the authenticated user). To use another database: * Edit the database.properties and change the values according to your database. * Add the needed JDBC driver jar in the ./conf/lib folder according to your database. Step 5: Start ############# $ cd bin $ ./james start * !! you need libc6 installed on Linux !! - sudo apt-get install libc6-i386 libc6-dev-i386 on ubuntu * You can see log result in the log/wrapper.log file. Step 6: Create Domains and Users ################################ Time to add domains and users. We will show how to via the james-cli (client interface). You also can achieve this via JMX (launch jconsole). JMX has more operations than james-cli. * cd bin * james-cli -h localhost -p 9999 adddomain mydomain.tld * james-cli -h localhost -p 9999 adduser myuser@mydomain.tld mypassword * The username to use in your mail client will be myuser@mydomain.tld Step 7: Test ############ $ telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 172.16.1.131 SMTP Server (JAMES SMTP Server 3.0.0) ready Wed, 20 Jul 2017 17:31:33 +0100 (CET) ehlo test 250-172.16.1.131 Hello test (aoscommunity.com [127.0.0.1]) 250-PIPELINING 250-ENHANCEDSTATUSCODES 250 8BITMIME mail from:<YOUR_NAME@YOUR_DOMAIN> 250 2.1.0 Sender <YOUR_NAME@YOUR_DOMAIN> OK rcpt to:<YOUR_NAME@YOUR_DOMAIN> 250 2.1.5 Recipient <YOUR_NAME@YOUR_DOMAIN> OK data 354 Ok Send data ending with <CRLF>.<CRLF> subject: test this is a test . 250 2.6.0 Message received quit Connection closed by foreign host. Step 8: Manage ############## 8.1. Manage via james-cli 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 Available commands: adduser </username> </password> removeuser </username> listusers adddomain </domainname> removedomain </domainname> listdomains 8.2. Manage via JMX * Launch jconsole (or any other JMX client) and connect on URL=service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi * Select the MBeans tab and open the org.apache.james node to view attributes and execute operations. Step 9: Monitor ############### * Monitor the ./log/wrapper.log log file. * Monitor via JMX (launch any JMX client and connect to URL=service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi) * Check ./var folder usage mail +-error +-address-error +-relay-denied +-spam store +-derby +-jackrabbit +-activemq +-brokers +-james +-blob-transfer +-outgoing +-spool * Check /tmp folder usage
Time to fine-tune your James Server!
Read more on the install, configure, manage, monitor and develop pages.