Changes since RC2 are attached. I've done an upload to ~noel/james, but before I tag and we vote, is there anything else that anyone feels should go into the release?
Last call at the saloon. :-) --- Noel
Index: /home/noel/ASF/james/server/branches/v2.3/UPGRADE.txt =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/UPGRADE.txt (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 0) +++ /home/noel/ASF/james/server/branches/v2.3/UPGRADE.txt (.../home/noel/ASF/james/server/branches/v2.3) (revision 441112) @@ -0,0 +1,99 @@ + ======================================================================= + === The Apache Software Foundation JAMES Server === + ======================================================================= + + Upgrading ... + ----------------- + + Please note that you need to start james 2.3.0 once before this steps can be performed. For installation guidelines + read the README. + + + Step 1: Copy mailboxes and users + + Remove the apps/james/var directory and copy the apps/james/var directory of the old james + installation in this place. + + + Step 2: Copy and modify config.xml + + Step 2.1 : Remove fetchpop block + + Its necessary to remove the fetchpop block in config.xml cause fetchpop was removed in 2.3. + + + Step 2.2 : Move mailet and matcher packages config + + Move <mailetpackages> and <matcherpackages> outside from the <spoolmanager> block. + + + Step 2.3 : Add neccassary mailets + + Add the <mailet match="All" class="PostmasterAlias"/> as the first mailet of the "root" processor. + This was hardcoded in 2.2.0 and previous. Now we made it configurable. + + + Step 2.4 : Move the spoolrepository config + + Move the spoolrepository out of the mailstore. Its also necessary to change the config syntax. For example : + + <spoolRepository> + <repository destinationURL="db://maildb/spool/spool" type="SPOOL"/> + </spoolRepository> + + Must converted to + <spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/> + + + Step 2.5 : Move the objectstore + + Move the objectstore config into the mailstore config. + + Step 2.6 : Add SSL to server-sockets + + To be able to use SSL you need to add this SSL config to the server-sockets block: + + <!-- + <factory name="ssl" class="org.apache.avalon.cornerstone.blocks.sockets.TLSServerSocketFactory"> + <ssl-factory> + <keystore> + <file>conf/keystore</file> + <password>secret</password> + <key-password>keysecret</key-password> + <type>JKS</type> + <protocol>TLS</protocol> + <algorithm>SunX509</algorithm> + <authenticate-client>false</authenticate-client> + </keystore> + </ssl-factory> + </factory> + --> + + + Step 3: Modify costum mailets if necessary + Please note the following things which were changed. So maybe its necessary for you to + change some stuff in your mailets. + + Avalon updates: + + o avalon Component has been replaced by avalon Service + o avalon Composable has been replaced by avalon Serviceable + o avalon ComponentManager has been replaced by avalon ServiceManager + + + Cornerstone updates: + + o MailStore interface has been removed: mailets looking up the MailStore should now lookup + a Store (org.apache.avalon.cornerstone.services.store.Store) + + + Step 4: Start james + + Now you should be able to start james without problems. + + + Good luck :) + + + The James Project + http://james.apache.org/ Index: /home/noel/ASF/james/server/branches/v2.3/default.properties =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/default.properties (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/default.properties (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -8,7 +8,7 @@ name=james Name=James Mail Server -version=2.3.0rc2 +version=2.3.0rc3 mailet-version=2.3 mailet-api-version=2.3 #package-version=3.0a1 Index: /home/noel/ASF/james/server/branches/v2.3/phoenix-bin/bin/phoenix.sh =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/phoenix-bin/bin/phoenix.sh (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/phoenix-bin/bin/phoenix.sh (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -138,7 +138,6 @@ # Get the run cmd RUN_CMD="$JAVA_HOME/bin/java $JVM_OPTS \ - $JVM_OPTS \ $DEBUG \ -Djava.security.policy=jar:file:$PHOENIX_HOME/bin/phoenix-loader.jar!/META-INF/java.policy \ $PHOENIX_JVM_OPTS \ Index: /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -1,20 +1,24 @@ -/*********************************************************************** - * Copyright (c) 1999-2006 The Apache Software Foundation. * - * All rights reserved. * - * ------------------------------------------------------------------- * - * Licensed 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. * - ***********************************************************************/ +/**************************************************************** + * 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. * + ****************************************************************/ + + package org.apache.james.mailrepository; import org.apache.avalon.framework.configuration.Configuration; @@ -141,20 +145,20 @@ public boolean accept (String key, String state, long lastUpdated, String errorMessage) { if (Mail.ERROR.equals(state)) { - //if it's an error message, test the time + //if it's an error message, test the time long processingTime = delay + lastUpdated; - if (processingTime < System.currentTimeMillis()) { - //It's time to process + if (processingTime < System.currentTimeMillis()) { + //It's time to process return true; + } else { + //We don't process this, but we want to possibly reduce the amount of time + // we sleep so we wake when this message is ready. + if (sleepUntil == 0 || processingTime < sleepUntil) { + sleepUntil = processingTime; + } + return false; + } } else { - //We don't process this, but we want to possibly reduce the amount of time - // we sleep so we wake when this message is ready. - if (sleepUntil == 0 || processingTime < sleepUntil) { - sleepUntil = processingTime; - } - return false; - } - } else { return true; } } @@ -189,12 +193,12 @@ //Loop through until we are either out of pending messages or have a message // that we can lock PendingMessage next = null; - while ((next = getNextPendingMessage()) != null && !Thread.currentThread().isInterrupted()) { + while ((next = getNextPendingMessage(filter)) != null && !Thread.currentThread().isInterrupted()) { //Check whether this is time to expire - boolean shouldProcess = filter.accept (next.key, next.state, next.lastUpdated, next.errorMessage); + // boolean shouldProcess = filter.accept (next.key, next.state, next.lastUpdated, next.errorMessage); - if (shouldProcess && lock(next.key)) { + if (/*shouldProcess && */ lock(next.key)) { try { Mail mail = retrieve(next.key); // Retrieve can return null if the mail is no longer on the spool @@ -241,11 +245,12 @@ * checks the last time pending messages was loaded and load if * it's been more than 1 second (should be configurable). */ - private PendingMessage getNextPendingMessage() { + private PendingMessage getNextPendingMessage(SpoolRepository.AcceptFilter filter) { synchronized (pendingMessages) { if (pendingMessages.size() == 0 && pendingMessagesLoadTime < System.currentTimeMillis()) { - pendingMessagesLoadTime = LOAD_TIME_MININUM + System.currentTimeMillis(); - loadPendingMessages(); + // pendingMessagesLoadTime = LOAD_TIME_MININUM + System.currentTimeMillis(); + loadPendingMessages(filter); + pendingMessagesLoadTime = Math.max(filter.getWaitTime(), LOAD_TIME_MININUM) + System.currentTimeMillis(); } if (pendingMessages.size() == 0) { @@ -259,7 +264,7 @@ /** * Retrieves the pending messages that are in the database */ - private void loadPendingMessages() { + private void loadPendingMessages(SpoolRepository.AcceptFilter filter) { //Loads a vector with PendingMessage objects synchronized (pendingMessages) { pendingMessages.clear(); @@ -272,7 +277,11 @@ listMessages = conn.prepareStatement(sqlQueries.getSqlString("listMessagesSQL", true)); listMessages.setString(1, repositoryName); - listMessages.setMaxRows(maxPendingMessages); + // Too simplistic. When filtering, we may need to see + // more than just maxPendingMessages to load the + // cache, so just hope that the driver and server use + // cursors properly. + // --> listMessages.setMaxRows(maxPendingMessages); rsListMessages = listMessages.executeQuery(); // Continue to have it loop through the list of messages until we hit // a possible message, or we retrieve maxPendingMessages messages. @@ -283,7 +292,9 @@ String state = rsListMessages.getString(2); long lastUpdated = rsListMessages.getTimestamp(3).getTime(); String errorMessage = rsListMessages.getString(4); - pendingMessages.add(new PendingMessage(key, state, lastUpdated, errorMessage)); + if (filter.accept(key, state, lastUpdated, errorMessage)) { + pendingMessages.add(new PendingMessage(key, state, lastUpdated, errorMessage)); + } } } catch (SQLException sqle) { //Log it and avoid reloading for a bit Index: /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -1,20 +1,23 @@ -/*********************************************************************** - * Copyright (c) 2000-2006 The Apache Software Foundation. * - * All rights reserved. * - * ------------------------------------------------------------------- * - * Licensed 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. * - ***********************************************************************/ +/**************************************************************** + * 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. * + ****************************************************************/ + package org.apache.james.remotemanager; import org.apache.avalon.cornerstone.services.connection.ConnectionHandler; @@ -54,6 +57,11 @@ implements ConnectionHandler, Poolable { /** + * The text string for the MEMSTAT command + */ + private static final String COMMAND_MEMSTAT = "MEMSTAT"; + + /** * The text string for the ADDUSER command */ private static final String COMMAND_ADDUSER = "ADDUSER"; @@ -417,6 +425,8 @@ return doUNSETFORWARDING(argument); } else if (command.equals(COMMAND_USER)) { return doUSER(argument); + } else if (command.equals(COMMAND_MEMSTAT)) { + return doMEMSTAT(argument); } else if (command.equals(COMMAND_QUIT)) { return doQUIT(argument); } else if (command.equals(COMMAND_SHUTDOWN)) { @@ -428,6 +438,29 @@ } /** + * Handler method called upon receipt of an MEMSTAT command. + * Returns whether further commands should be read off the wire. + * + * @param argument the argument passed in with the command + */ + private boolean doMEMSTAT(String argument) { + writeLoggedFlushedResponse("Current memory statistics:"); + writeLoggedFlushedResponse("\tFree Memory: " + Runtime.getRuntime().freeMemory()); + writeLoggedFlushedResponse("\tTotal Memory: " + Runtime.getRuntime().totalMemory()); + writeLoggedFlushedResponse("\tMax Memory: " + Runtime.getRuntime().maxMemory()); + + if ("-gc".equalsIgnoreCase(argument)) { + System.gc(); + writeLoggedFlushedResponse("And after System.gc():"); + writeLoggedFlushedResponse("\tFree Memory: " + Runtime.getRuntime().freeMemory()); + writeLoggedFlushedResponse("\tTotal Memory: " + Runtime.getRuntime().totalMemory()); + writeLoggedFlushedResponse("\tMax Memory: " + Runtime.getRuntime().maxMemory()); + } + + return true; + } + + /** * Handler method called upon receipt of an ADDUSER command. * Returns whether further commands should be read off the wire. * Index: /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/LogMessage.java =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/LogMessage.java (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/LogMessage.java (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -54,7 +54,7 @@ try { passThrough = (getInitParameter("passThrough") == null) ? true : new Boolean(getInitParameter("passThrough")).booleanValue(); headers = (getInitParameter("headers") == null) ? true : new Boolean(getInitParameter("headers")).booleanValue(); - passThrough = (getInitParameter("body") == null) ? true : new Boolean(getInitParameter("body")).booleanValue(); + body = (getInitParameter("body") == null) ? true : new Boolean(getInitParameter("body")).booleanValue(); bodyMax = (getInitParameter("maxBody") == null) ? 0 : Integer.parseInt(getInitParameter("maxBody")); comment = getInitParameter("comment"); } catch (Exception e) { Index: /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_1.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_1.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_1.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -40,7 +40,9 @@ or pass the message to an external API or component. This can include delivering a message to its destination repository or SMTP server.</p> <p>The Mailet API is currently in its second revision. Although, the Mailet API is expected to undergo substantial changes in the near future, it is our aim that existing Mailets that abided purely by the prior Mailet API interfaces will continue to run with the revised specification.</p> +<!-- <p>The Javadoc for the Mailet API can be found <a href="mailet/index.html">here</a>.</p> +--> <p>James bundles a number of Matchers and Mailets in its distribution. Descriptions of provided matchers can be found <a href="provided_matchers_2_1.html">here</a>, while descriptions of provided mailets can be found <a href="provided_mailets_2_1.html">here</a>.</p> Index: /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_3.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_3.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/mailet_api_2_3.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -40,7 +40,7 @@ or pass the message to an external API or component. This can include delivering a message to its destination repository or SMTP server.</p> <p>The Mailet API is currently in its second revision. Although, the Mailet API is expected to undergo substantial changes in the near future, it is our aim that existing Mailets that abided purely by the prior Mailet API interfaces will continue to run with the revised specification.</p> -<p>The Javadoc for the Mailet API can be found <a href="mailet/index.html">here</a>.</p> +<p>The Javadoc for the Mailet API can be found <a href="apidocs/index.html">here</a>.</p> <p>James bundles a number of Matchers and Mailets in its distribution. Descriptions of provided matchers can be found <a href="provided_matchers_2_3.html">here</a>, while descriptions of provided mailets can be found <a href="provided_mailets_2_3.html">here</a>.</p> Index: /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_matchers_2_3.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_matchers_2_3.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_matchers_2_3.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -182,6 +182,17 @@ <p>Configuration string: One of three strings - "blackholes.mail-abuse.org", "relays.mail-abuse.org", or "dialups.mail-abuse.org".</p> </subsection> +<subsection name="IsInWhiteList"> +<p>Description: Matches recipients having the mail sender in the recipient's private whitelist. +The recipient name is always converted to its primary name (handling aliases).</p> +<p>Configuration string: The database name containing the white list table.</p> +<pre><code> +<mailet match="IsInWhiteList=db://maildb" class="ToProcessor"> + <processor> transport </processor> +</mailet> +</code></pre> +</subsection> + <subsection name="IsSingleRecipient"> <p>Description: Matches those messages sent to only a single recipient. The single recipient is returned.</p> <p>Configuration string: None.</p> Index: /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_mailets_2_3.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_mailets_2_3.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/site/xdoc/provided_mailets_2_3.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -30,10 +30,11 @@ <p>James provides a number of implemented Mailets for use by James administrators in their configurations. These are primarily mailets that members of the James developer or user communities have found useful in their own configurations. A description of how to configure -Mailets and use them in the James SpoolManager can be found <a href="spoolmanager_configuration_2_1.html">here</a>.</p> +Mailets and use them in the James SpoolManager can be found <a href="spoolmanager_configuration_2_3.html">here</a>.</p> <subsection name="AddFooter"> <p>Description: This mailet adds a text footer to the message.</p> + <p>Parameters: <ul> <li><strong>text</strong> (required) - the text that will be added as a footer to the message.</li> @@ -43,23 +44,19 @@ <subsection name="AddHabeasWarrantMark"> <p>Description: This mailet adds a Habeas warrant mark (see <a href="http://habeas.com">http://habeas.com</a> for details) to the message.</p> + <p>Parameters: None.</p> </subsection> <subsection name="AddHeader"> <p>Description: This mailet is <strong>deprecated</strong> .Please use SetMimeHeader .</p> -<p>Parameters: -<ul> -<li><strong>name</strong> (required) - the name of the header to be added to the message.</li> -<li><strong>value</strong> (required) - the text that will be added as a header to the message.</li> -</ul> -</p> </subsection> <subsection name="AvalonListserv"> <p>Provides basic list server functionality. Implements basic filters for emails sent to the list, including restriction of senders to members, diallowing attachments in list messages, and subject line processing</p> + <p>Parameters: <ul> <li><strong>repositoryName</strong> (required) - the name of the user repository that contains the users @@ -83,6 +80,7 @@ <list-name>-off@<host> where <list-name> and lt;host> are arbitrary. Note that this should be used in tandem with a CommandForListserv matcher to ensure that only commands intended for a specific list are processed.</p> + <p>Parameters: <ul> <li><strong>repositoryName</strong> (required) - the name of the user repository that contains the users @@ -93,6 +91,7 @@ <subsection name="BayesianAnalysis"> <p>Description: Spam detection mailet using bayesian analysis techniques.</p> + <p>Parameters: <ul> <li><strong>repositoryPath</strong> (required) - The repositoryPath which is used.</li> @@ -106,6 +105,7 @@ <subsection name="BayesianAnalysisFeeder"> <p>Description: Feeds ham OR spam messages to train the BayesianAnalysis mailet.</p> + <p>Parameters: <ul> <li><strong>repositoryPath</strong> (required) - The repositoryPath which is used.</li> @@ -117,6 +117,7 @@ <subsection name="Bounce"> <p>Description: Generates a response to the reverse-path address.</p> + <p>Parameters: <ul> <li><strong>sender</strong> - The senderAddress which will be used for sending the bounce. Possible values: <i>address</i>, <i>postmaster</i> , <i>sender</i>, @@ -140,6 +141,7 @@ <subsection name="ClamAVScan"> <p>Description: Does an antivirus scan check using a ClamAV daemon (CLAMD).</p> + <p>Parameters: <ul> <li><strong>host</strong> - The host name of the server where CLAMD runs. The default is <i>localhost</i></li> @@ -156,6 +158,67 @@ </p> </subsection> +<subsection name="CommandListservFooter"> +<p>Description: CommandListservFooter is based on the AddFooter mailet. It is used by the CommandListservProcessor to inject a footer into mailing list.</p> + +<p>Parameters: None.</p> +</subsection> + +<subsection name="CommandListservManager"> +<p> Description: CommandListservManager is the default implementation of ICommandListservManager. +It loads all the configured IListServCommands and delegates to them at runtime. +<br/> +It isn't responsible for procesing messages sent to the main mailing list, but is responsible for +individual commands sent by users, such as: info, subscribe, etc... +<br/> +Requests sent to the CommandListservManager take the form of: +<pre> +<listName>-<commandName>@domain +</pre> + +If the command isn't recognized an error will be sent. +<br/> +<br/> +The configuration for this mailet sould be in the 'root' processor block.</p> + +<p>Parameters: +<ul> +<li><strong>listName</strong> - The listname </li> +<li><strong>displayName</strong> - The full listname</li> +<li><strong>listOwner</strong> - An emailaddress which will be used as owneraddress.</li> +<li><strong>repositoryName</strong> - the repository name </li> +<li><strong>listDomain</strong> - The domain</li> +</ul> +</p> +<br/> +<p> Example configuration: +<source> +<mailet match="[EMAIL PROTECTED]" class="CommandListservManager"> + <listName>announce</listName> + <displayName>Announce mailing list</displayName> + <listOwner>[EMAIL PROTECTED]</listOwner> + <repositoryName>list-announce</repositoryName> + <listDomain>localhost</listDomain> + + <commandpackages> + <commandpackage>org.apache.james.transport.mailets.listservcommands</commandpackage> + </commandpackages> + + <commands> + <command name="subscribe" class="Subscribe"/> + <command name="subscribe-confirm" class="SubscribeConfirm"/> + <command name="unsubscribe" class="UnSubscribe"/> + <command name="unsubscribe-confirm" class="UnSubscribeConfirm"/> + <command name="error" class="ErrorCommand"/> + <command name="owner" class="Owner"/> + <command name="info" class="Info"/> + </commands> + </mailet> +</source> +</p> +</subsection> + + <subsection name="DSNBounce"> <p>Description: Generates a Delivery Status Notification (DSN). Note that this is different than a mail-client's reply, which would use the Reply-To or From header.Bounced messages are attached in their entirety (headers and @@ -164,6 +227,7 @@ meaning that no reply should be sent. A sender of the notification message can optionally be specified. If one is not specified, the postmaster's address will be used.</p> + <p>Parameters: <ul> <li><strong>sender</strong> - An address, postmaster,sender or unaltered. Default is <i>postmaster</i></li> @@ -181,6 +245,7 @@ <subsection name="Forward"> <p>Description: This mailet forwards the message to a set of recipients.</p> + <p>Parameters: <ul> <li><strong>forwardto</strong> (required) - a comma delimited list of email addresses.</li> @@ -190,6 +255,7 @@ <subsection name="FromRepository"> <p>Description: This mailet ee-spools mail found in the specified Repository.</p> + <p>Parameters: <ul> <li><strong>repositoryPath</strong> (required) - The repositoryPath which is used.</li> @@ -199,8 +265,15 @@ </p> </subsection> +<subsection name="ICommandListservManager"> +<p>Description: ICommandListservManager is the interface that describes the functionality of any command based list serv managers.</p> + +<p>Parameters: None.</p> +</subsection> + <subsection name="JDBCAlias"> <p>Description: This mailet does alias translation for email addresses stored in a database table.</p> + <p>Parameters: <ul> <li><strong>mappings</strong> (required) - a URL of the form db://<data-source>/<table>, where @@ -214,6 +287,7 @@ <subsection name="JDBCVirtualUserTable"> <p>Description: This mailet does complex alias translation for email addresses stored in a database table.</p> + <p>Parameters: <ul> <li><strong>table</strong> (required) - the URL describing the database table. This URL has the form @@ -227,11 +301,28 @@ <subsection name="LocalDelivery"> <p>Description: This mailet delivers messages to local mailboxes.</p> + <p>Parameters: None.</p> </subsection> +<subsection name="LogMessage"> +<p>Description: Logs Message Headers and/or Body.</p> + +<p>Parameters: +<ul> +<li><strong>passThrough</strong> (optional) - If the "passThrough" in confs is true the mail will be left untouched in +the pipe. If false will be destroyed. Default is true.</li> +<li><strong>headers</strong> (optional) - If set to true the headers get logged. Default is true"</li> +<li><strong>body</strong> (optional) - If set to true the body get logged. Default is true.</li> +<li><strong>bodyMax</strong> (optional) - The max length wich should be logged. Default is log all.</li> +<li><strong>comment</strong> (optional) - The comment which should be logged Default is none.</li> +</ul> +</p> +</subsection> + <subsection name="NotifyPostmaster"> <p>Description: This mailet forwards the message as an attachment to the James postmaster.</p> + <p>Parameters: <ul> <li><strong>sendingAddress</strong> (optional) - the address from which the forwarded email will be @@ -245,6 +336,7 @@ <subsection name="NotifySender"> <p>Description: This mailet forwards the message as an attachment to the original sender.</p> + <p>Parameters: <ul> <li><strong>sendingAddress</strong> (optional) - the address from which the forwarded email will be @@ -258,6 +350,7 @@ <subsection name="Null"> <p>Description: This mailet ends processing for this mail.</p> + <p>Parameters: None.</p> </subsection> @@ -266,6 +359,7 @@ of the domains managed by this James server and substitutes the configured James postmaster address for the original recipient address. This mailet is inserted automatically by James at the head of the root processor.</p> + <p>Parameters: None.</p> </subsection> @@ -280,12 +374,14 @@ By extending it and overriding one or more of its methods new behaviour can be quickly created without the author having to address any other issue than the relevant one. For more information see the javadocs - <a href="javadocs/org/apache/james/transport/mailets/Redirect.html">here</a>.</p> -<p>Parameters: <a href="javadocs/org/apache/james/transport/mailets/Redirect.html">See javadocs.</a></p> + <a href="apidocs/org/apache/james/transport/mailets/Redirect.html">here</a>.</p> + +<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/Redirect.html">See javadocs.</a></p> </subsection> <subsection name="RemoteDelivery"> <p>Manages delivery of messages to recipients on remote SMTP hosts.</p> + <p>Parameters: <ul> <li><strong>outgoing</strong> (required) - The URL for the repository that will hold messages being processed @@ -323,12 +419,14 @@ </subsection> <subsection name="RemoveAllMailAttributes"> -<p>Desctription: Removes all attributes on the Mail instance.</p> -<p>Parameters: None. </p> +<p>Description: Removes all attributes on the Mail instance.</p> + +<p>Parameters: None.</p> </subsection> -<subsection name="RemoveAllMailAttributes"> -<p>Desctription: Remove attributes on the Mail instance.</p> +<subsection name="RemoveMailAttributes"> +<p>Description: Remove attributes on the Mail instance.</p> + <p>Parameters: <ul> <li><strong>name</strong> (required) - The name of the attribute to remove.</li> @@ -336,13 +434,85 @@ </p> </subsection> +<subsection name="Resend"> +<p>Description:A mailet providing configurable redirection services. For more information see +the javadocs <a href="apidocs/org/apache/james/transport/mailets/Resend.html">here</a>.</p> + +<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/Resend.html">See javadocs.</a></p> +</subsection> + <subsection name="ServerTime"> <p>Description: This mailet sends a message to the sender of the original mail message with a server timestamp.</p> + <p>Parameters: None.</p> </subsection> +<subsection name="SetMailAttributes"> +<p>Description: Set attributes on the Mail instance.</p> + +<p>Parameters: +<ul> +<li><strong>name</strong> (required) - The name of the attribute to set.</li> +</ul> +</p> +</subsection> + +<subsection name="SetMimeHeader"> +<p>Description: Set an MimeHeader on a MimeMessage.</p> + +<p>Parameters: +<ul> +<li><strong>name</strong> (required) - the name of the header to be added to the message.</li> +<li><strong>value</strong> (required) - the text that will be added as a header to the message.</li> +</ul> +</p> +</subsection> + +<subsection name="SMIMECheckSignature"> +<p>Description: Verifies the s/mime signature of a message. The s/mime signing ensure that +the private key owner is the real sender of the message. To be checked by +this mailet the s/mime signature must contain the actual signature, the +signer's certificate and optionally a set of certificate that can be used to +create a chain of trust that starts from the signer's certificate and leads +to a known trusted certificate. +</p> +<p> +This check is composed by two steps: firstly it's ensured that the signature +is valid, then it's checked if a chain of trust starting from the signer +certificate and that leads to a trusted certificate can be created. The first +check verifies that the the message has not been modified after the signature +was put and that the signer's certificate was valid at the time of the +signing. The latter should ensure that the signer is who he declare to be. +</p> + +<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMECheckSignature.html">See javadocs.</a></p> +</subsection> + +<subsection name="SMIMEDecrypt"> +<p>Description: This mailet decrypts a s/mime encrypted message. It takes as input an +encrypted message and it tries to dechiper it using the key specified in its +configuration. If the decryption is successful the mail will be changed and +it will contain the decrypted message. The mail attribute +<code>org.apache.james.SMIMEDecrypt</code> will contain the public +certificate of the key used in the process. </p> + +<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMEDecrypt.html">See javadocs.</a></p> +</subsection> + +<subsection name="SMIMESign"> +<p>Description: Puts a <i>server-side</i> SMIME signature on a message. +It is a concrete subclass of SMIMEAbstractSign, with very few modifications to it.</p> +<p>A text file with an explanation text is attached to the original message, +and the resulting message with all its attachments is signed. +The resulting appearence of the message is almost unchanged: only an extra attachment +and the signature are added.</p> + +<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMESign.html">See javadocs.</a></p> +</subsection> + <subsection name="ToProcessor"> -<p>Redirects processing of the mail message to the specified processor.</p> +<p>Description: Redirects processing of the mail message to the specified processor.</p> + <p>Parameters: <ul> <li><strong>processor</strong> (required) - the name of the processor to which the message @@ -354,8 +524,29 @@ </p> </subsection> +<subsection name="ToMultiRepository"> +<p>Description: Receives a Mail from JamesSpoolManager and takes care of delivery of the +message to local inboxes or a specific repository. + +Differently from LocalDelivery this does not lookup the UserRepository This +simply store the message in a repository named like the local part of the +recipient address. + +If no repository is specified then this fallback to MailServer.getUserInbox. +Otherwise you can add your own configuration for the repository.</p> +<p>Parameters: +<ul> +<li><strong>repositoryUrl</strong> (required) - the URL of the repository to which the message +is to be added.</li> +<li><strong>addDeliveryHeader</strong> (optional) - a String value which can be used specify a header which will add to the message. +Default is to not add a header.</li> +</ul> +</p> +</subsection> + <subsection name="ToRepository"> <p>Places a copy of the message in the specified repository.</p> + <p>Parameters: <ul> <li><strong>repositoryPath</strong> (required) - the URL of the repository to which the message @@ -370,6 +561,7 @@ <p>Description: Ignores the recipients associated with the Mail interface. Instead, it regenerates the mail recipients from the MimeMessage headers (To, Cc, Bcc) and inserts a new message at the queue root these new recipients. The original message is GHOSTed.</p> + <p>Parameters: <ul> <li><strong>debug</strong> (optional) - a boolean value (true/false) indicating whether debugging is @@ -377,6 +569,58 @@ </ul> </p> </subsection> + +<subsection name="UsersRepositoryAliasingForwarding"> +<p>Receives a Mail from JamesSpoolManager and takes care of delivery of the +message to local inboxes.</p> + +<p>Parameters: +<ul> +<li><strong>enableAliases</strong> (optional) - Specify wether the user aliases should +be looked up or not. Default is false.</li> +<li><strong>enableForwarding</strong> (optional) -Enable the forwarding. Default to +false.</li> +<li><strong>usersRepository</strong> (optional) - Specific users repository +name. Default to empty. If empty does lookup the default userRepository. +</li> +</ul> +</p> +</subsection> + +<subsection name="WhiteListManager"> +<p>Manages for each local user a "white list" of remote addresses whose messages +should never be blocked as spam.</p> +<p>The normal behaviour is to check, for a local sender, if a remote recipient +is already in the list: if not, it will be automatically inserted. +This is under the interpretation that if a local sender <i>X</i> sends a message to a +remote recipient <i>Y</i>, then later on if a message is sent by <i>Y</i> to <i>X</i> it should be +considered always valid and never blocked; hence <i>Y</i> should be in the white list +of <i>X</i>.</p> +<p>Another mode of operations is when a local sender sends a message to <i>whitelistManagerAddress</i> +with one of three specific values in the subject, to +(i) send back a message displaying a list of the addresses in his own list; +(ii) insert some new addresses in his own list; +(iii) remove some addresses from his own list. +In all this cases the message will be ghosted and the postmaster will reply +to the sender.</p> +<p> The sender name is always converted to its primary name (handling aliases).</p> + +<p>Parameters: +<ul> +<li><strong>repositoryPath</strong> - The repository path.</li> +<li><strong>automaticInsert</strong> (optional) - If true automatically inserts the local sender to remote +recipients entries in the whitelist. Default is false.</li> +<li><strong>whitelistManagerAddress</strong> (optional) - Set this to an email address of the "whitelist manager" to send +commands to (default is null).</li> +<li><strong>displayFlag</strong> (optional) - Set this to a unique text that you can use (by sending a +message to the "whitelist manager" above) to tell the mailet to send back the contents of the white list. Default is null.</li> +<li><strong>insertFlag</strong> (optional) - Set this to a unique text that you can use (by sending a message to the "whitelist manager" above) +to tell the mailet to insert some new remote recipients to the white list. Default is null.</li> +<li><strong>removeFlag</strong> (optional) - Set this to a unique text that you can use (by sending a message to the "whitelist manager" above) +to tell the mailet to remove some remote recipients from the white list. Default is null.</li> +</ul> +</p> +</subsection> </section> </body> </document> Index: /home/noel/ASF/james/server/branches/v2.3/src/conf/james-config.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/conf/james-config.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/src/conf/james-config.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -19,7 +19,7 @@ <!-- In case the defaults do not suit you, the items you are most likely to need to change --> <!-- are preceded by a CHECKME! or CONFIRM? comment in the left margin. --> -<!-- For production use you will probably n"src/conf/james-assembly.xml"eed to make more extensive changes, see --> +<!-- For production use you will probably need to make more extensive changes, see --> <!-- http://james.apache.org/documentation_2_1.html --> <!-- $Revision$ Committed on $Date$ by: $Author$ --> Index: /home/noel/ASF/james/server/branches/v2.3/src/test/org/apache/james/core/MimeMessageTest.java =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/src/test/org/apache/james/core/MimeMessageTest.java (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441112) +++ /home/noel/ASF/james/server/branches/v2.3/src/test/org/apache/james/core/MimeMessageTest.java (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -92,7 +92,7 @@ MimeMessage mmCreated = new MimeMessage(Session.getDefaultInstance(new Properties())); mmCreated.setSubject("test"); MimeMultipart mm = new MimeMultipart("alternative"); - mm.addBodyPart(new MimeBodyPart(new InternetHeaders(new ByteArrayInputStream("X-header: test1\r\nContent-Type: text/plain; charset=Cp1252\r\n".getBytes())),"first part òàù".getBytes())); + mm.addBodyPart(new MimeBodyPart(new InternetHeaders(new ByteArrayInputStream("X-header: test1\r\nContent-Type: text/plain; charset=Cp1252\r\n".getBytes())),"first part ���".getBytes())); mm.addBodyPart(new MimeBodyPart(new InternetHeaders(new ByteArrayInputStream("X-header: test2\r\nContent-Type: text/plain; charset=Cp1252\r\nContent-Transfer-Encoding: quoted-printable\r\n".getBytes())),"second part =E8=E8".getBytes())); mmCreated.setContent(mm); mmCreated.saveChanges(); Index: /home/noel/ASF/james/server/branches/v2.3/build.xml =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/build.xml (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/build.xml (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -140,6 +140,7 @@ <include name="LICENSE.txt"/> <include name="NOTICE.txt"/> <include name="README"/> + <include name="UPGRADE.txt"/> </fileset> </copy> <fixcrlf srcdir="${java.dir}" includes="**/*.java" eol="lf" tab="remove" tablength="4" /> @@ -632,6 +633,7 @@ <include name="README"/> <include name="LICENSE.txt"/> <include name="NOTICE.txt"/> + <include name="UPGRADE.txt"/> <include name="build.*"/> <include name="lib/**"/> <include name="${phoenix.dir}/**"/> @@ -648,6 +650,7 @@ <include name="README"/> <include name="LICENSE.txt"/> <include name="NOTICE.txt"/> + <include name="UPGRADE.txt"/> <include name="build.*"/> <include name="lib/**"/> <include name="${phoenix.dir}/**"/> @@ -674,6 +677,7 @@ <include name="tools/**"/> <include name="*.txt"/> <include name="README"/> + <include name="UPGRADE.txt"/> <include name="KEYS"/> <include name="LICENSE.txt"/> <include name="NOTICE.txt"/> @@ -689,6 +693,7 @@ <include name="tools/**"/> <include name="*.txt"/> <include name="README"/> + <include name="UPGRADE.txt"/> <include name="KEYS"/> <include name="LICENSE.txt"/> <include name="NOTICE.txt"/> Index: /home/noel/ASF/james/server/branches/v2.3/README.txt =================================================================== --- /home/noel/ASF/james/server/branches/v2.3/README.txt (.../https://svn.apache.org/repos/asf/james/server/tags/build_2_3_0_RC2) (revision 441120) +++ /home/noel/ASF/james/server/branches/v2.3/README.txt (.../home/noel/ASF/james/server/branches/v2.3) (working copy) @@ -26,7 +26,7 @@ These are some JAMES features: o complete portability: James is a 100% pure Java(tm) application - based on the Java 2 platform and the JavaMail 1.3.1 API. + based on the Java 2 platform and the JavaMail 1.4 API. o protocol abstraction: unlike other mail engines, protocols are seen only like "communication languages" ruling communications between clients and @@ -97,8 +97,8 @@ Step 2: start phoenix. M$ users should just run /bin/run.bat. Unix users will find run.sh - under the same folder - you may need to chmod +x run.sh. A JVM must be in - the path. + under the same folder - you may need to chmod +x run.sh and chmod +x phoenix.sh. + A JVM must be in the path. Phoenix will unpack the james.sar into apps/james. Note that port 1111 must be available for Phoenix to run (used by RMI server). @@ -106,8 +106,9 @@ Most UNIX systems require superuser privileges to open sockets below 1024, which includes the IANA-standard SMTP (on port 25), POP3 (on port 110), IMAP (port ) and NNTP (port ). You will get an error message with - 'org.apache.avalon.framework.atlantis.ApplicationException: Failed to - load block imapserver' + 'org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleException: Component + named "xxx" failed to pass through the Starting stage. (Reason: java.net.BindException: + Permission denied).' or something similar if you have not got the right privileges. If you have the right privileges, you should see @@ -155,14 +156,14 @@ Trace out JAMES actions in /logs/*info.log. Action that will be taken by JAMES on incoming mail are configurated in - the mailet pipe line (/conf/james.conf.xml). Look at it if you want to + the mailet pipe line (/apps/james/SAR-INF/config.xml). Look at it if you want to understand what's happening. Step 5: configuration. - The configuration files are in apps/james/conf. For new users, the only - elements you need to worry about are in config.xml. You probably want to - change the root password in the remote manager section and to add your + The configuration files are in apps/james/conf and apps/james/SAR-INF/. For new + users, the only elements you need to worry about are in config.xml. You probably + want to change the root password in the remote manager section and to add your local network's IP address to the anti-spam mailet.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]