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]