<?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 2024-06-17 -->
<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 Project &#x2013; 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="author" content="Serge Knystautas" />
    <meta name="Date-Revision-yyyymmdd" content="20240617" />
    <meta http-equiv="Content-Language" content="en" />
        
          <!-- 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-logo.png">
              
                                                                            
        <img src="../../images/logos/james-logo.png" alt="James Project" />
                </a>
                              <a href="https://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2024-06-17</span>
                      </div>
            <div class="xright">                    <a href="../../index.html" title="Home">Home</a>
            |
                        <a href="../../documentation.html" title="James">James</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>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>James components</h5>
                  <ul>
                                                                                                                                                                                                                    <li class="collapsed">
                          <a href="../../documentation.html" title="About James">About James</a>
                  </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <li class="collapsed">
                          <a href="../../server/index.html" title="Server">Server</a>
                  </li>
                                                                                                                                                                                                                                                        <li class="collapsed">
                          <a href="../../mailet/index.html" title="Mailets">Mailets</a>
                  </li>
                                                                                                                                                                                                                                                                                      <li class="collapsed">
                          <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a>
                  </li>
                                                                                                                                                                                <li class="collapsed">
                          <a href="../../protocols/index.html" title="Protocols">Protocols</a>
                  </li>
                                                                                                                                                                                      <li class="collapsed">
                          <a href="../../mpt/index.html" title="MPT">MPT</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">
        

  
<section>
<h2><a name="Step_0:_Building._.28only_necessary_for_daily_snapshots.29"></a>Step 0: Building. (only necessary for daily snapshots)</h2> 

<p> If you have downloaded a binary distribution, you do not need to build James. 
  Proceed directory to Step 1. </p>

<p> To compile James from the source code you need <a class="externalLink" href="http://ant.apache.org/">Ant</a>. 
  This is a Java-tailored, XML-configured, extensible build or make system. We 
  are currently using Ant 1.4, which is included in the source distribution.</p>

<p> If you have downloaded a daily snapshot, you need to build a distribution. 
  James includes Ant to compile and package its distribution. Extract the snapshot 
  to your favorite directory, cd to that directory and run the build by calling &quot;build&quot; 
  or &quot;./build.sh&quot; which will create an unpacked binary distribution 
  in the dist directory, but no archives.</p>

<p>This &quot;./dist&quot; directory is the distribution directory used in Step 1 and beyond. 
  You may either cd to ./dist, or you may copy and rename the dist directory to your 
  installation directory.</p>

<p>If you prefer you can run build with the &quot;dist&quot; task &quot;build dist&quot; 
  (or &quot;./build.sh dist&quot;). This will create the distribution in the &quot;./dist&quot; 
  directory as well as create .tgz and .zip copies of this directory, however it may 
  require other resources to build the documentation. </p>

<p> <b>Warning!</b> Any changes you've made in the 'dist' directory 
  will be lost after a recompilation. If you are making changes to the conf.xml 
  or other files, we recommend you backup and then change the copies in src to 
  avoid losing work. </p>
</section> <section>
<h2><a name="Step_1:_Installation."></a>Step 1: Installation.</h2> 

<p> Download distibution. Extract or copy all the files in the archive or dist 
  directory intto your installation directory. </p>
</section>

<section>
<h2><a name="Step_2:_Configuration."></a>Step 2: Configuration.</h2>
  
<p>
    Read the short and snappy documentation at docs/index.html for a proper
    overview of configuring the system.
  </p>
  
<p>
    <b>Summary</b> (for impatient people)
  </p>
  

<p> M$ users should just run /bin/run.bat. Unix users will find run.sh under the 
  same directory. A JVM must be present and its location specified in the JAVA_HOME 
  environment variable. Set this on windows at the command prompt with something 
  similar to &quot;set JAVA_HOME=\jdk1.3\bin&quot; on *nix with JAVA_HOME=/jdk1.3/</p>

<p> Running [run* --help] will provide a simple command line help. </p>
  
<p>
    Most UNIX systems require superuser privileges to open sockets below 1024,
    which includes the IANA-standard SMTP (on port 25) and POP3 (on port 110).
    These default ports can be changed in the conf.xml file. (Obviously, you
    would then need to reconfigure your clients. This may not be an option if
    you want to receive mail from external mailservers.)
  </p>
  

<p> The Avalon framework will unpack the necessary configuration files you will 
  need to start the server.  Wait until it is running, stop it again (ctrl-c), and 
  edit the configuration (thereafter *nix users can run the server in the background 
  using ./run.sh &amp;). For basic use, you only need to set two items in the 
  JAMES.conf.xml file: a root password for the remote administration facility 
  and the IP address of a DNS server. Once you have edited the configuration files, 
  press 'Enter' on the terminal where Avalon is waiting. </p>
</section>

<section>
<h2><a name="Step_4:_Kickstart."></a>Step 4: Kickstart.</h2>
  
<p>
    Once started you'll see a message saying Avalon is running. This means that
    Avalon has loaded JAMES and every other needed Block (see /logs/avalon.log)
    and is now waiting for a socket request.
    Since at the beginning James is empty, it will not have any local users
    registered.
    To register a local user open a telnet session with localhost on port 4555,
    log in as root (&quot;root[enter]  &lt;password-you-set-in-conf.xml&gt;[enter]&quot;) and
    type &quot;help&quot; for a list of available commands in the &quot;JAMES remote
    administrator tool&quot;. It is really a basic set but should allow you to test
    installation.
  </p>
  
<p>
    Once you have some local users registered, try sending mail to one of them
    @localhost with SMTP (port 25) (assuming you have not changed the default
    server names in the conf.xml file). You'll see the mail appear under
    ../var/mail/localinbox/[user].
    Try now to retrieve that mail using POP3 (port 110).
    Trace out JAMES actions in /logs/*info.log.
    Actions that will be taken by JAMES on incoming mail are configured in
    the mailet pipe line (/conf/JAMES.conf.xml). Look at it if you want to
    understand what's happening.
  </p>
  
<p>
  Good luck :)
  </p>
</section>



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