<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.    
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Jun 16, 2012 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>
  Apache James Server 3 - Installation</title>
    <style type="text/css" media="all">
      @import url("./css/james.css");
      @import url("./css/maven-base.css");
      @import url("./css/maven-theme.css");
      @import url("./css/site.css");
      @import url("./js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
      @import url("./js/jquery/css/print.css");
      @import url("./js/fancybox/jquery.fancybox-1.3.4.css");
    </style>
    <script type="text/javascript" src="./js/jquery/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="./js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
    <script type="text/javascript" src="./js/fancybox/jquery.fancybox-1.3.4.js"></script>
    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    <meta name="Date-Revision-yyyymmdd" content="20120616" />
    <meta http-equiv="Content-Language" content="en" />
                                                    
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
                      
          <!-- Google Analytics -->
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1384591-1']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
      })();

    </script>
    </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../index.html" id="bannerLeft" title="james-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="Apache James Server 3.0" />
                </a>
                              <a href="http://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2012-06-16</span>
                      </div>
            <div class="xright">                    <a href="../../index.html" title="Home">Home</a>
            |
                        <a href="../index.html" title="Server">Server</a>
            |
                        <a href="../../hupa/index.html" title="Hupa">Hupa</a>
            |
                        <a href="../../protocols/index.html" title="Protocols">Protocols</a>
            |
                        <a href="../../imap/index.html" title="IMAP">IMAP</a>
            |
                        <a href="../../mailet/index.html" title="Mailets">Mailets</a>
            |
                        <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a>
            |
                        <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a>
            |
                        <a href="../../jsieve/index.html" title="jSieve">jSieve</a>
            |
                        <a href="../../jspf/index.html" title="jSPF">jSPF</a>
            |
                        <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a>
            |
                        <a href="../../mpt/index.html" title="MPT">MPT</a>
            |
                        <a href="../../postage/index.html" title="Postage">Postage</a>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>Overview</h5>
                  <ul>
                  <li class="none">
                          <a href="index.html" title="Introduction">Introduction</a>
            </li>
                  <li class="none">
                          <a href="release-notes.html" title="Release Notes">Release Notes</a>
            </li>
          </ul>
                       <h5>Features</h5>
                  <ul>
                  <li class="none">
                          <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
            </li>
                  <li class="none">
                          <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a>
            </li>
                  <li class="none">
                          <a href="feature-persistence.html" title="Persistence">Persistence</a>
            </li>
                  <li class="none">
                          <a href="feature-protocols.html" title="Protocols">Protocols</a>
            </li>
                  <li class="none">
                          <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
            </li>
                  <li class="none">
                          <a href="feature-performance.html" title="Performance">Performance</a>
            </li>
                  <li class="none">
                          <a href="feature-security.html" title="Security">Security</a>
            </li>
          </ul>
                       <h5>User Manual</h5>
                  <ul>
                  <li class="none">
                          <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a>
            </li>
                  <li class="none">
            <strong>2. Install James</strong>
          </li>
                                                                                                                                                                                                                                                                                                                                <li class="collapsed">
                          <a href="config.html" title="3. Configure James">3. Configure James</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="manage.html" title="4. Manage">4. Manage</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="monitor.html" title="5. Monitor">5. Monitor</a>
                  </li>
                                                                                      <li class="collapsed">
                          <a href="upgrade.html" title="6. Upgrade">6. Upgrade</a>
                  </li>
          </ul>
                       <h5>Developers Corner</h5>
                  <ul>
                  <li class="none">
                          <a href="dev.html" title="Architecture">Architecture</a>
            </li>
                  <li class="none">
                          <a href="dev-build.html" title="Build from source">Build from source</a>
            </li>
                  <li class="none">
                          <a href="dev-database-schema.html" title="Database Schema">Database Schema</a>
            </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                  </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/apache-james/" title="Nightly builds">Nightly builds</a>
            </li>
          </ul>
                       <h5>References</h5>
                  <ul>
                  <li class="none">
                          <a href="apidocs/index.html" title="Javadoc">Javadoc</a>
            </li>
                  <li class="none">
                          <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
          </ul>
                       <h5>About James</h5>
                  <ul>
                  <li class="none">
                          <a href="../../index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../../newsarchive.html" title="News">News</a>
            </li>
                  <li class="none">
                          <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../../contribute.html" title="Contributing">Contributing</a>
            </li>
                  <li class="none">
                          <a href="../../guidelines.html" title="Guidelines">Guidelines</a>
            </li>
                  <li class="none">
                          <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
            </li>
                  <li class="none">
                          <a href="../../team-list.html" title="Who We Are">Who We Are</a>
            </li>
                  <li class="none">
                          <a href="../../license.html" title="License">License</a>
            </li>
          </ul>
                       <h5>Download</h5>
                  <ul>
                  <li class="none">
                          <a href="../../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></a>
            </li>
          </ul>
        <h5>Apache Software Foundation</h5>
  <ul>
    <li>
      <strong>
        <a title="ASF" href="http://www.apache.org/">ASF</a>
      </strong>
    </li>
    <li>
      <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
    </li>
    <li>
      <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
    </li>
    <li>
      <a title="License" href="http://www.apache.org/licenses/" >License</a>
    </li>
    <li>
      <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
    </li>
    <li>
      <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
    </li>
    <li>
      <a title="Security" href="http://www.apache.org/security/">Security</a>
    </li>
  </ul>
                       <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
                   
                
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <!-- Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License. -->

 

<div class="section"><h2>Requirements<a name="Requirements"></a></h2>

  <div class="section"><h3>Java Virtual Machine<a name="Java_Virtual_Machine"></a></h3>
  
    <p>James requires a Java Runtime Environment. Java version 1.5 or higher is required to run the 
       James application. The exact JREs available depend on the platform. In addition, the environment variable JAVA_HOME should be set to
       the JRE home directory before running James.</p>
       
    <p>If you run JDK7, James will not start due to a bug in JAXB. As temporary workaround, you can
       download the latest 2.1 version of JAXB from <a class="externalLink" href="http://jaxb.java.net/2.1.13/JAXB2_20100510.jar">
       http://jaxb.java.net/2.1.13/JAXB2_20100510.jar</a>
       and copy the extracted jaxb-impl.jar into conf/lib.</p>
    
    <p>James 3.0 has been successfully tested on OpenJDK, Sun JDK and IBM JDK</p>
  
  </div>
  
  <div class="section"><h3>User Privileges<a name="User_Privileges"></a></h3>
    
    <p>On Linux/Unix platforms, root access will be required to run James (access to ports 
       below 1024 is generally restricted to the root user).  As SMTP, POP3, and IMAP4 
       need to open server sockets on such ports in standard configurations, 
       James requires root access.</p>
    
    <p>On Windows platforms, you also need to run James as Administrator privilege.</p>
  
  </div>
    
  <div class="section"><h3>Libc6<a name="Libc6"></a></h3>
    
    <p>On Linux, to run the startup/shutdown script via the 'james' command, you also need <tt>libc6</tt> 
        (on Ubuntu for example: <tt>sudo apt-get install libc6-i386 libc6-dev-i386</tt>).</p>
        
  </div>
  
  <div class="section"><h3>System Resources<a name="System_Resources"></a></h3>
    
    <p>Obviously James also requires sufficient disk space, processor power, and network bandwidth.  But, 
       other than what's been discussed here, it has no additional special requirements.</p>
    
    <p>James is configured to run with 512 MB RAM (-Xmx512M in the bat/sh) available, but may need more or 
       less depending on the load. With the default configuraiton, JVM can use until 512M (It does not mean it will do).
       It really depends on your traffic, and also which mailbox you will use (you can save much memory 
       if you don't use the default embedded derby database but an external database of your choice).
       Work is still done to minimize the needed memory.
    </p>
  
  </div>
  
  </div>
  
  <div class="section"><h2>Install Step by Step<a name="Install_Step_by_Step"></a></h2>
  
  <div class="section"><h3>Step 1: Download James<a name="Step_1:_Download_James"></a></h3> 
  
    <p>Obtain the full James binary (or source) distribution from 
       the <a class="externalLink" href="http://james.apache.org/download.cgi">James 
       release mirrors</a>.</p>
      
    <p>If you have downloaded a binary distribution, you do not need to build James. 
      Proceed directly to Step 2.</p>
    
    <p>If you have downloaded a source package, process first to 
       the <a href="dev-build.html">build</a> and come back to Step 2.</p>
  
  </div>
  
  <div class="section"><h3>Step 2: Deploy James<a name="Step_2:_Deploy_James"></a></h3>
  
    <p>Unpack the archive into your James installation directory.</p>
  
  </div>
  
  <div class="section"><h3>Step 3: Configure James<a name="Step_3:_Configure_James"></a></h3>
  <!-- <div class="ui-widget">
        <div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"> 
          <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> 
          <strong>Preliminary step for JMX on Windows: </strong>
          to let windows start with JMX username/password enabled, 
          you need to modify the security settings for the JMX files (./conf/jmx.password and ./conf/jmx.access) 
          like described here:
          <a href="http://download.oracle.com/javase/1.5.0/docs/guide/management/security-windows.html">
          http://download.oracle.com/javase/1.5.0/docs/guide/management/security-windows.html</a>
        </p>
        </div>
      </div> -->
    <p>After unpacking the binary, the next step is to adjust the initial configuration.  
       All configuration files are embedded in jars. We ship in the conf foler template configuration files.
    </p>
    
    <p>You can override the default configuration : copy the conf folder any ...-template... you need and update according to your needs.</p>
    
    <p>Additional system files reside under the./conf/META-INF folder.</p>
    
    <p>The out of the box configuration makes certain assumptions and has some default 
       values that are unlikely to be appropriate for real-world servers. 
       There are a few issues that should be addressed immediately upon installation:</p>
       <ul>
        <li>Postmaster Address - Change according to your need - <a href="config-system.html">read more</a>.</li>
        <li>Most UNIX systems require superuser privileges to open sockets below 1024,
            which includes the IANA-standard SMTP (on port 25), POP3 (on port 110) and IMAP4 (on port 143).
            These default ports can be changed in the conf file 
            (read for <a href="config-pop3.html">pop3</a>, <a href="config-smtp.html">smtp</a> 
            and <a href="config-imap4.html">imap4</a>. Obviously, you
            would then need to reconfigure your clients. This may not be an option if
            you want to receive mail from external mail servers.</li>
      </ul>
    
    <p>In addition to adjusting these parameters, you may wish to consult the documentation for a discussion of
       all other configurations.  A list of such configurations, as well as the steps necessary to configure them, can
       be found <a href="config.html">here</a>.</p>
    
  </div>
  
  <div class="section"><h3>Step 4: Start James<a name="Step_4:_Start_James"></a></h3>
  
    <p>Go to the bin subdirectory of the installation directory and run <tt>$ ./james start</tt>.</p>
      
    <p>Running <tt>$ ./james help</tt> help will provide the list of commands you can invoke. </p>
    
    <p>Once started, you'll see in the log file (./logs/james-server.log) that 
       James is running. This means that Spring has loaded James and is now waiting for a request.</p>
  
  </div>
    
  <div class="section"><h3>Step 5: Create Domains and Users<a name="Step_5:_Create_Domains_and_Users"></a></h3>
  
    <p>Finally, after launch, it will be necessary to create domain and user accounts 
       before the James server will be fully operational. Read instructions on creating 
       <a href="manage-domains.html">domains</a> and <a href="manage-users.html">user accounts</a>.</p>
    
    <p>Since at the beginning James is empty, it will not have any domain (except the default one)nor local users
       registered.</p>
       
    <p>To register a local domain and user, cd bin and type james-cli.sh.
       Follow the given instructions</p>
       
    <p>Invoke &quot;james-cli.sh adddomain &lt;mydomain.tls&gt; &lt;mydomain.tls&gt; is the domain name 
      of the domain you wish to create.</p>
      
    <p>Invoke &quot;james-cli.sh adduser &lt;user&gt; &lt;password&gt;&quot; where &lt;user&gt; is the user name 
      and &lt;password&gt; is the password of the account you wish to create.</p>
      
    <p>Please note that the user name MUST be a complete email address of the form &lt;user&gt;@&lt;domain&gt; 
      (where &lt;domain&gt; is any of the values specified in the &lt;servernames&gt; block of XMLDomainList or
      a domain defined via the <a href="manage-domains.html">domain management</a>).</p>
      
  </div>
  
  <div class="section"><h3>Step 6: Test James<a name="Step_6:_Test_James"></a></h3>

    <p>Once you have some local users registered, try sending mail to one of them
        with SMTP (port 25).</p>
  
<div class="source"><pre>
$ 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-beta4) ready Sat, 6 Nov 2010 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:&lt;YOUR_NAME@YOUR_DOMAIN&gt;
250 2.1.0 Sender &lt;YOUR_NAME@YOUR_DOMAIN&gt; OK
rcpt to:&lt;YOUR_NAME@YOUR_DOMAIN&gt;
250 2.1.5 Recipient &lt;YOUR_NAME@YOUR_DOMAIN&gt; OK
data
354 Ok Send data ending with &lt;CRLF&gt;.&lt;CRLF&gt;
subject: test

this is a test
.
250 2.6.0 Message received
quit
Connection closed by foreign host.
</pre></div>

    <p>Try now to retrieve that mail using POP3 (port 110) or IMAP (port 143).</p>
    
    <p>Trace out James actions in ./logs/james-server.log.</p>
    
    <p>Actions that will be taken by James on incoming mail are configured in
       the mailet pipe line (./conf/mailetcontainer.xml). Look at it if you want to
       understand what's happening.</p>
    
  </div>

</div>




      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2002-2012
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
