<?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 Apr 12, 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>James Server - 
    Frequently Asked Questions</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="James Project Web Team" />
    <meta name="Date-Revision-yyyymmdd" content="20120412" />
    <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-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="James Server" />
                </a>
                              <a href="http://www.apache.org/" 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-04-12</span>
                  &nbsp;| <span id="projectVersion">Version: 1.6</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>James Server</h5>
                  <ul>
                  <li class="none">
                          <a href="index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="design_objectives.html" title="Objectives">Objectives</a>
            </li>
                  <li class="none">
            <strong>Server FAQ</strong>
          </li>
                  <li class="none">
                          <a href="rfclist.html" title="Useful RFCs">Useful RFCs</a>
            </li>
                  <li class="none">
                          <a href="http://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
                  <li class="none">
                          <a href="http://svn.apache.org/viewvc/james/server/" title="Source">Source</a>
            </li>
          </ul>
                       <h5>Documentation</h5>
                  <ul>
                  <li class="none">
                          <a href="3/index.html" title="Server v3">Server v3</a>
            </li>
                  <li class="none">
                          <a href="2/index.html" title="Server v2">Server v2</a>
            </li>
                  <li class="none">
                          <a href="archive/document_archive.html" title="Archive">Archive</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="../weare.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="http://people.apache.org/builds/james/nightly/" 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>This FAQ<a name="This_FAQ"></a></h2>
      <p>This is a living document that provides answers to common questions about James, installation, configuration, admin and running not already answered in the documentation. Last Updated January 2005.</p>
    </div>
  
    <div class="section"><h2>Questions<a name="Questions"></a></h2>
      <p>
        </p><ul>
          <li>
            <a href="#How_do_I_set_up_a_mailing_list">How do I set up a mailing list</a>
          </li>
          <li>
            <a href="#James_seems_to_be_an_open_relay_for_Spam_is_it">Is James an Open Relay for Spam?</a>
          </li>
          <li>
            <a href="#I_can_send_messages_to_James_but_nobody_is_receiving_them.__What_do_I_do">I can send messages to James, but nobody is receiving them.  What do I do?</a>
          </li>
          <li>
            <a href="#I_can_send_people_messages_via_James_but_nobody_can_send_me_messages.__What_do_I_do">I can send people messages via James, but nobody can send me messages.  What do I do?</a>
          </li>
          <li>
            <a href="#Im_trying_to_debug_messages_that_James_is_trying_to_deliver.__Where_should_I_look">I'm trying to debug messages that James is trying to deliver.  Where should I look?</a>
          </li>
          <li>
            <a href="#What_about_IMAP_support">What about IMAP support?</a>
          </li>
          <li>
            <a href="#What_about_support_virtual_hosting">What about support virtual hosting?</a>
          </li>
          <li>
            <a href="#Where_do_I_stick_classes_and_jars">Where do I stick classes and jars?</a>
          </li>
          <li>
            <a href="#How_do_I_upgrade_to_a_newer_version_of_James">How do I upgrade to a newer version of James?</a>
          </li>
          <li>
            <a href="#How_do_I_run_James_as_an_NT2kXP_service">How do I run James as an NT/2k/XP service?</a>
          </li>
          <li>
            <a href="#Why_isnt_my_mailet_making_changes_to_a_MimeMessage">Why isn't my mailet making changes to a MimeMessage?</a>
          </li>
          <li>
            <a href="#How_to_remove_unneeded_services_like_NNTP_POP3">How to remove unneeded services like NNTP, POP3?</a>
          </li>
          <li>
            <a href="#How_can_I_contribute_to_James">How can I contribute to James?</a>
          </li>
          <li>
            <a href="#How_can_I_make_sendmail_route_local_mail_or_all_mail_through_James_on_the_same_machine">How can I make sendmail route local mail (or all mail) through James on the same machine?</a>
          </li>
          <li>
            <a href="#I_am_using_Microsofts_SQL_Type_4_JDBC_Driver_why_do_I_get_a_Cant_start_manual_transaction_mode_because_there_are_cloned_connections_exception">I am using Microsoft's SQL Type 4 JDBC Driver, why do I get a &quot;Can't start manual transaction mode because there are cloned connections&quot; exception?</a>
          </li>
          <li>
            <a href="#I_am_using_James_with_a_MySQL_database_and_I_keep_getting_a_Packet_is_larger_than_max_allowed_packet_when_receiving_large_messages_despite_the_fact_that_my_max_packet_size_is_configured_to_be_larger_than_my_max_message_size.__Whats_going_on">I am using James with a MySQL database and I keep getting a &quot;Packet is larger than max_allowed_packet&quot; when receiving large messages despite the fact that my max packet size is configured to be larger than my max message size.  What's going on?</a>
          </li>
          <li>
            <a href="#How_do_I_use_Subversion_to_get_James_source_code">How do I use Subversion to get James source code?</a>
          </li>
          <li>
          <a href="#How_can_I_control_Suns_JVM_DNS_Lookup_Configuration.">How can I control Sun's JVM DNS Lookup Configuration.</a>
          </li>
          <li>
          <a href="james_and_sendmail.html">James and Sendmail.</a>
          </li>
        </ul>
      
    </div>
    
    <div class="section"><h2>Answers<a name="Answers"></a></h2>

      <div class="section"><h3>How do I set up a mailing list<a name="How_do_I_set_up_a_mailing_list"></a></h3>
        <p>Read more on <a class="externalLink" href="http://james.apache.org/server/3/config-listmanager.html">James Server 3 List-Manager configuration</a>.</p>
      </div>
      
      <div class="section"><h3>James seems to be an open relay for Spam, is it?<a name="James_seems_to_be_an_open_relay_for_Spam_is_it"></a></h3>
        <p>In some simple tests of mail relays James appears to be an open relay, properly configured it is not. </p>
        <p>Because James is an email application platform it currently accepts all mail delivered to it via SMTP for processing. Only after the mail has been recieved does this processing begin.</p>
        <p>This means that James accepts Spam. However the default configuration, and any sensible re-configuration has a number of anti-spam measures which will prevent the re-transmisson of spam from James. This makes it a blackhole for spam.</p>
        <p>This also means that James will not verify addresses, but of course this means that valid addresses can't be harvested from James by spammers either.</p>
      </div>
      
      <div class="section"><h3>I can send messages to James, but nobody is receiving them.  What do I do?<a name="I_can_send_messages_to_James_but_nobody_is_receiving_them.__What_do_I_do"></a></h3>
        <p>Check that you've added valid DNS servers to your James installation.  Email delivery requires the use of special mail related DNS information (MX records), so James needs to explicitly be given DNS servers.  Look at your config.xml file for a &lt;dnsserver&gt; section and add one or more DNS servers.</p>
        <p>Additionally, check the RemoteAddrNotInNetwork matcher under&lt;processor name=&quot;transport&quot;&gt;. By default it looks like this:</p>
        <div class="source"><pre>
&lt;mailet match=&quot;RemoteAddrNotInNetwork=127.0.0.1&quot; class=&quot;ToProcessor&quot;&gt;
    &lt;processor&gt; spam &lt;/processor&gt;
&lt;/mailet&gt;
</pre></div>
        <p>because most mail programs will use the external IP address (as opposed to 127.0.0.1) when processing mail, you need to add your internal network and/or your static IP address to this list.  You may also use a DNS domain name in this list.  The resulting entry would look something like this:</p>
        <div class="source"><pre>
&lt;mailet match=&quot;RemoteAddrNotInNetwork=127.0.0.1,192.168.1.*&quot;
        class=&quot;ToProcessor&quot;&gt;
    &lt;processor&gt; spam &lt;/processor&gt;
&lt;/mailet&gt;
</pre></div>
        <p>This tells the processor that anything not in this address list should go to the spam processor.</p>
        <p>Please note that if you wish to configure James to allow users to send email from any domain or IP address you will need to disable this matcher.  In this situation you must use SMTP AUTH to ensure that your server does not act as an open relay.  For more on open relays, please see <a class="externalLink" href="http://www.ordb.org">the Open Relay Database</a>.</p>
      </div>
      
      <div class="section"><h3>I can send people messages via James, but nobody can send me messages.  What do I do?<a name="I_can_send_people_messages_via_James_but_nobody_can_send_me_messages.__What_do_I_do"></a></h3>
        <p>You need to do one of two things:
               </p><ol style="list-style-type: decimal">
            <li>Update your domain's DNS entries so there are MX records that point to the machine that is running James.  Note that it is illegal for MX records to point to IP addresses.  You need to point MX records to a valid CNAME or A name entry, and then map that eventually to an IP address.</li>
            <li>You could alternatively give people an email address with IP addresses.  Most people will think it's a very strange email address, but hello@[192.168.0.1] is a valid email address.  Note that you need to wrap the IP address in brackets.</li>
          </ol>
        
      </div>
      
      <div class="section"><h3>I'm trying to debug messages that James is trying to deliver.  Where should I look?<a name="Im_trying_to_debug_messages_that_James_is_trying_to_deliver.__Where_should_I_look"></a></h3>
        <p>First step is to look in the log directory at the mailet.log file.  Look for entries that include the text &quot;RemoteDelivery&quot;.  This should provide some high-level debug information of James' attempt to delivery mail remotely.</p>
        <p>If you want to delve into the code, look at the RemoteDelivery mailet.  You may also want to review the mail repository source code for the repository type you are using (file, db, etc...).</p>
      </div>
      
      <div class="section"><h3>What about IMAP support?<a name="What_about_IMAP_support"></a></h3>
        <p>IMAP development had been stalled, but has recently attracted new activity.  IMAP support is scheduled for inclusion in James v3.  In the meantime, there is experimental code in the repository.  If you are interested in working on or trying the IMAP prototype code, join the james-dev mailing list and let us know.</p>
      </div>
      
      <div class="section"><h3>What about support virtual hosting?<a name="What_about_support_virtual_hosting"></a></h3>
        <p>James v2.1+ includes a new mailet for database users, <a href="2.3.1/apidocs/org/apache/james/transport/mailets/JDBCVirtualUserTable.html">JDBCVirtualUserTable</a>, that mimics some of the sendmail capabilities of the same name.</p>
        <p>JDBCVirtualUserTable does not provide any administation tools.
You'll have to create and maintain the database table yourself.  The
standard configuration is as follows:</p>
        <div class="source"><pre>
CREATE TABLE VirtualUserTable
(
 user varchar(64) NOT NULL default '',
 domain varchar(255) NOT NULL default '',
 target_address varchar(255) NOT NULL default '',
 PRIMARY KEY (user,domain)
);
</pre></div>
        <p>The standard query used with VirtualUserTable is:</p>
        <div class="source"><pre>
select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains
where (VirtualUserTable.user like ? or VirtualUserTable.user like &quot;\%&quot;)
and (VirtualUserTable.domain like ?
or (VirtualUserTable.domain like &quot;\%&quot; and VUTDomains.domain like ?))
order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1
</pre></div>
        <p>For a given [user, domain, domain] used with the query, this will
match as follows (in precedence order):
</p><ol style="list-style-type: decimal">
            <li>user@domain    - explicit mapping for user@domain</li>
            <li>user@%         - catchall mapping for user anywhere</li>
            <li>%@domain       - catchall mapping for anyone at domain</li>
            <li>null           - no valid mapping</li>
          </ol>
        
        <p>A sample mailet looks like:</p>
        <div class="source"><pre>
&lt;mailet match=&quot;All&quot; class=&quot;JDBCVirtualUserTable&quot;&gt;
  &lt;table&gt;db://maildb/VirtualUserTable&lt;/table&gt;
&lt;/mailet&gt;
</pre></div>
        <p>More generalized viirtual hosting is something the developers are still discussing.  One issue is that POP3 does not support virtual hosting in that it does not have a command to indicate what domain the user is in.  What this means is the mail server needs to support a 'mapping' or 'translation' convention, e.g., 'user1@domaina.com' gets a username 'domaina.user1'.  This allows the mail server to have a single username namespace.  We have seen a few good proposals put forward, but nothing that seemed the clear solution, as ideally we could have this part solve the next issue.</p>
        <p>Beyond that, James needs to refine virtual hosting for mailet processing.  With the current user model, the mailet API has a Mail.getUser() method that no longer would be useable as a reliable indicator of whether they were in the local username namespace.  To date we are unclear of the best way to bring this translation into the mailet processing.  Similarly, it would be nice to support different mailet processing based on the domain, although this is somewhat feasible using the limited processing flow offered with a HostIs matcher.</p>
        <p>Virtual hosting is one of the most requested features, and additional work is scheduled for the 3.0 release.</p>
      </div>
      
      <div class="section"><h3>Where do I stick classes and jars?<a name="Where_do_I_stick_classes_and_jars"></a></h3>
        <p>We are largely reliant on what Avalon is doing in terms of classloading, but here are a few tips and suggestions:
  </p><ul>
            <li>Stick jars in the james/lib directory and add them to the classpath in run.bat or run.sh.</li>
            <li>Instructions for including classes for custom mailets and matchers can be found <a href="2.3.1/custom_mailet.html">here</a> and <a href="2.3.1/custom_matcher.html">here</a> respectively..</li>
          </ul>
  Eventually we hope to support mailet reloading and a special lib and classes directory within the james directory that custom mailets can load from, but for now these are hopefully some useful tips.
      </div>
      
      <div class="section"><h3>How do I upgrade to a newer version of James?<a name="How_do_I_upgrade_to_a_newer_version_of_James"></a></h3>
        <p>
          </p><ol style="list-style-type: decimal">
            <li>Rename the previous james directory into a james.old</li>
            <li>Run phoenix to let the new james.sar be deployed.</li>
            <li>Edit the newly deployed config.xml to reflect your customizations from the previous config.xml.</li>
            <li>If using JDBC, see <a class="externalLink" href="http://wiki.apache.org/james/UpgradingToAttributes">necessary table changes.</a>
            </li>
            <li>Replace the var directory by the previous var directory.  This will copy over user accounts, inboxes, spools, and whatever else.</li>
            <li>Restart James.</li>
          </ol>
        
      </div>
      
      <div class="section"><h3>How do I run James as an NT/2k/XP service?<a name="How_do_I_run_James_as_an_NT2kXP_service"></a></h3>
        <p>The version of Avalon Phoenix distributed with James v2.1 and later includes a <a class="externalLink" href="http://avalon.apache.org/phoenix/guide-administrator.html">wrapper</a> that lets you run James as a service.  An alternative strategy is to install the <a class="externalLink" href="http://www.alexandriasc.com/software/JavaService/index.html">JavaService</a> from Alexandia Software.</p>
      </div>
      
      <div class="section"><h3>Why isn't my mailet making changes to a MimeMessage?<a name="Why_isnt_my_mailet_making_changes_to_a_MimeMessage"></a></h3>
        <p>Check the JavaMail docs.  Per the API, when you call MimeMessage.setContent(blah), you have to call saveChanges() to apply your changes.  James tries to automatically call this method so you don't have to, but in certain cases you'll still have to call saveChanges().</p>
      </div>
      
      <div class="section"><h3>How to remove unneeded services like NNTP, POP3?<a name="How_to_remove_unneeded_services_like_NNTP_POP3"></a></h3>
        <p>The following information is based on James 2.0a3, but the
             upcoming 2.1 version should be similar.</p>
        <p>NNTP and other underlying services are called &quot;blocks&quot; in the
             Avalon Phoenix terminology. Blocks are specified in the
             assembly.xml file which is located in the apps/james/SAR-INF directory (2.1)
             or apps/james/conf directory (2.0a3). Note: this file is created
             during the first startup of James.</p>
        <p>There are dependencies between the blocks, which you can read from
             the file. For example the SMTP Server block depends on the
             users-store block, so if you want SMTP then you cannot remove the
             users-store block even if you only want to relay messages.</p>
        <p>To remove the NNTP Server comment out the following blocks:
             NNTP server, NNTP Authentication Service, NNTP repository.
             To remove the POP3 Server comment out the POP3 Server block.</p>
        <p>If you remove a block it wont't be loaded next time you restart
             James. You must also remove all sections related to the removed
             blocks from the James configuration file - config.xml - otherwise
             you will get error messages, saying that there is no corresponding
             block.</p>
      </div>
      
      <div class="section"><h3>How can I contribute to James<a name="How_can_I_contribute_to_James"></a></h3>
        <p>Read the &quot;Contributors How To&quot; <a href="../contribute.html">here</a>
        </p>
      </div>
      
      <div class="section"><h3>How can I make sendmail route local mail (or all mail) through James on the same machine?<a name="How_can_I_make_sendmail_route_local_mail_or_all_mail_through_James_on_the_same_machine"></a></h3>
        <p>Read the &quot;sendmail How To&quot; <a href="james_and_sendmail.html">here</a>
        </p>
      </div>
      
      <div class="section"><h3>I am using Microsoft's SQL Type 4 JDBC Driver, why do I get a &quot;Can't start manual transaction mode because there are cloned connections&quot; exception?<a name="I_am_using_Microsofts_SQL_Type_4_JDBC_Driver_why_do_I_get_a_Cant_start_manual_transaction_mode_because_there_are_cloned_connections_exception"></a></h3>
        <p>I am using Microsoft's SQL Type 4 JDBC Driver, why do I get the following exception?<br />java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start manual transaction mode because there are cloned connections.</p>
        <p>This seems to be a problem with the Microsoft Type 4 JDBC Driver and concurrent statements/transactions/resultsets on the same database conntection.</p>
        <p>To solve this you need to add <b>;SelectMethod=cursor</b> to the end of your dburl string. Your dburl string would then look something like this<br />&lt;dburl&gt;jdbc:microsoft:sqlserver://dbserver.host.name:1433;SelectMethod=cursor&lt;/dburl&gt;</p>
        <p>NOTE: some people have complained about performance when using this option, the alternative is a 3rd party JDBC driver but these are often not free.</p>
      </div>
      
      <div class="section"><h3>I am using James with a MySQL database and I keep getting a &quot;Packet is larger than max_allowed_packet&quot; when receiving large messages despite the fact that my max packet size is configured to be larger than my max message size.  What's going on?<a name="I_am_using_James_with_a_MySQL_database_and_I_keep_getting_a_Packet_is_larger_than_max_allowed_packet_when_receiving_large_messages_despite_the_fact_that_my_max_packet_size_is_configured_to_be_larger_than_my_max_message_size.__Whats_going_on"></a></h3>
        <p>When a user tries to send a large message that is close to but not quite at the max message limit the send fails and an exception similar to the following appears in the log:</p>
        <p>Sent: 451 Error processing message:<br />
            Exception spooling message: Exception caught while storing mail Container:<br />
            java.lang.IllegalArgumentException: Packet is larger than max_allowed_packet<br />
            from server configuration of 4193280 bytes;<br />
              nested exception is:<br />
                    java.lang.RuntimeException: Exception caught while storing mail<br />
            Container: java.lang.IllegalArgumentException: Packet is larger than<br />
            max_allowed_packet from server configuration of 4193280 bytes<br />
        </p>
        <p>Because of how the JDBC driver is written, a 25%
            factor is necessary between the maximum message size and the max_packet_size
            to prevent the driver from throwing an exception.  So if you want a 4MB
            maximum message size, you need a 5MB max_packet size.  Or a 4MB
            max_packet_size allows only a 3.2MB max message.
            </p>
      </div>
      
        <div class="section"><h3>How do I use Subversion to get James source code?<a name="How_do_I_use_Subversion_to_get_James_source_code"></a></h3>
          <p>First of all read this: <a class="externalLink" href="http://www.apache.org/dev/version-control.html">ASF Source Code</a>.
          <br />Now go to <a class="externalLink" href="http://subversion.tigris.org/">http://subversion.tigris.org/</a> and download a subversion client.
          <br />James subversion repository is at <b>http://svn.apache.org/repos/asf/james/server</b>. Commiters use &quot;https&quot;.
          <br />You may want to search the web, our <a class="externalLink" href="http://www.mail-archive.com/server-dev@james.apache.org/">dev</a> and <a class="externalLink" href="http://www.mail-archive.com/server-user@james.apache.org/">user</a> mail archives or our <a class="externalLink" href="http://wiki.apache.org/james">wiki</a> for more information.</p>
        </div>
        
		<div class="section"><h3>How can I control Sun's JVM DNS Lookup Configuration.<a name="How_can_I_control_Suns_JVM_DNS_Lookup_Configuration."></a></h3>
<p>Sun's JVM Internet address lookup uses a cache which is unbounded and doesn't time out.<br />
This is obviously not great for a long running process like a mail server so we have introduced a system property <b>networkaddress.cache.ttl</b> that is used by the distributed phoenix start-up scripts, at startup, to override the java 1.4 <b>Security.setProperty(&quot;networkaddress.cache.ttl&quot;)</b>.<br /> By default this is set to <b>300</b> seconds.</p>
<p>This workaround will only be present if you use James as distributed. If you use James in any other container, including different versions of Phoenix, you will need to ensure that you make a similar configuration change to allow the internet address cache to perform acceptably.</p>
<p>James 2.3 has this workaround and it requires it to operate acceptably. Future versions of James will continue to have the workaround in place but will *not* require it. This will provide continued support for any mailets which you may deploy from other sources which might continue to use Sun's InetAddress class for DNS resolution.</p>
<p>We are not currently aware of the behaviour of this cache in other JVM implementations, nor of the effect, if any, which this change might have on them</p>
<p>For more on this read defect report <a class="externalLink" href="http://issues.apache.org/jira/browse/JAMES-592">JAMES-592</a> and related defects.</p>
		</div>
		
    </div>
    
  
  

      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2006-2012
                        <a href="http://www.apache.org">The Apache Software Foundation</a>.
            All Rights Reserved.      
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
