You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by be...@apache.org on 2006/09/27 08:33:30 UTC
svn commit: r450344 - in
/james/postage/trunk/src/main/java/org/apache/james/postage/mail:
AbstractMailFactory.java DefaultMailFactory.java
Author: berndf
Date: Tue Sep 26 23:33:29 2006
New Revision: 450344
URL: http://svn.apache.org/viewvc?view=rev&rev=450344
Log:
extract abstract MailFactory to facilitate development of custom test mails (POSTAGE-5)
Added:
james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java
Modified:
james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java
Added: james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java
URL: http://svn.apache.org/viewvc/james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java?view=auto&rev=450344
==============================================================================
--- james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java (added)
+++ james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java Tue Sep 26 23:33:29 2006
@@ -0,0 +1,92 @@
+package org.apache.james.postage.mail;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.james.postage.configuration.MailSender;
+import org.apache.james.postage.result.MailProcessingRecord;
+
+public abstract class AbstractMailFactory {
+
+ private static Log log = LogFactory.getLog(DefaultMailFactory.class);
+
+ private static final char[] CHARSET = new char[]
+ {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
+ 'u', 'v', 'w', 'x', 'y', 'z',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
+ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z'};
+
+ public static char getRandomChar() {
+ return CHARSET[getRandomInt()];
+ }
+
+ private static int getRandomInt() {
+ return (int)(Math.random() * (double)(CHARSET.length - 1));
+ }
+
+ public static byte getRandomByte() {
+ return (byte)CHARSET[getRandomInt()];
+ }
+
+ public AbstractMailFactory() {
+ super();
+ }
+
+ /**
+ * generates a mail containing data common to all test mails: postage headers,
+ */
+ public Message createMail(Session mailSession, MailSender mailSender, MailProcessingRecord mailProcessingRecord) {
+
+ MimeMessage message = new MimeMessage(mailSession);
+
+ try {
+ message.addHeader(HeaderConstants.JAMES_POSTAGE_HEADER, "This is a test mail sent by James Postage");
+ message.addHeader(HeaderConstants.JAMES_POSTAGE_VALIDATORCLASSNAME_HEADER, getValidatorClass().getName());
+ message.setSubject(mailSender.getSubject());
+ message.addHeader("Message-ID", "Postage-" + System.currentTimeMillis());
+ mailProcessingRecord.setSubject(mailSender.getSubject());
+
+ if (mailProcessingRecord.getMailId() != null) {
+ message.addHeader(HeaderConstants.MAIL_ID_HEADER, mailProcessingRecord.getMailId());
+ } else {
+ log.warn("ID header is NULL!");
+ throw new RuntimeException("could not create mail with ID = NULL");
+ }
+
+ populateMessage(message, mailSender, mailProcessingRecord);
+
+ } catch (MessagingException e) {
+ mailProcessingRecord.setErrorTextSending(e.toString());
+ log.error("mail could not be created", e);
+ return null;
+ }
+ return message;
+ }
+
+ /**
+ * here, the test case specific data must be added to the message.
+ * @param message
+ * @param mailSender
+ * @param mailProcessingRecord
+ * @throws MessagingException
+ */
+ abstract protected void populateMessage(MimeMessage message, MailSender mailSender, MailProcessingRecord mailProcessingRecord) throws MessagingException;
+
+ /**
+ * the class representing the validator
+ *
+ * @return validator class
+ */
+ abstract protected Class getValidatorClass();
+
+ protected int generateRandomPartSize(int sizeMin, int sizeMax) {
+ return (int)(Math.random() * (double)(sizeMax - sizeMin)) + sizeMin;
+ }
+
+}
\ No newline at end of file
Modified: james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java
URL: http://svn.apache.org/viewvc/james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java?view=diff&rev=450344&r1=450343&r2=450344
==============================================================================
--- james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java (original)
+++ james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java Tue Sep 26 23:33:29 2006
@@ -20,110 +20,62 @@
package org.apache.james.postage.mail;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.james.postage.configuration.MailSender;
import org.apache.james.postage.result.MailProcessingRecord;
import javax.activation.DataHandler;
-import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
-import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
-public class DefaultMailFactory implements MailFactory {
+public class DefaultMailFactory extends AbstractMailFactory implements MailFactory {
- private static Log log = LogFactory.getLog(DefaultMailFactory.class);
+ protected void populateMessage(MimeMessage message, MailSender mailSender, MailProcessingRecord mailProcessingRecord) throws MessagingException {
+ message.addHeader("Mime-Version", "1.0");
+ message.addHeader("Content-Type", "multipart/mixed");
- private final static char[] CHARSET = new char[]
- {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
- 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
- 'u', 'v', 'w', 'x', 'y', 'z',
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
- 'U', 'V', 'W', 'X', 'Y', 'Z'};
-
-
- public Message createMail(Session mailSession, MailSender mailSender, MailProcessingRecord mailProcessingRecord) {
- MimeMessage message = new MimeMessage(mailSession);
-
- try {
- message.addHeader("Mime-Version", "1.0");
- message.addHeader(HeaderConstants.JAMES_POSTAGE_HEADER, "This is a test mail sent by James Postage");
- message.addHeader(HeaderConstants.JAMES_POSTAGE_VALIDATORCLASSNAME_HEADER, "org.apache.james.postage.mail.DefaultMailValidator");
- message.setSubject(mailSender.getSubject());
- message.addHeader("Message-ID", "Postage-" + System.currentTimeMillis());
- mailProcessingRecord.setSubject(mailSender.getSubject());
- message.addHeader("Content-Type", "multipart/mixed");
-
- Multipart multipart = new MimeMultipart("mixed");
-
- if (mailProcessingRecord.getMailId() != null) {
- message.addHeader(HeaderConstants.MAIL_ID_HEADER, mailProcessingRecord.getMailId());
- } else {
- // TODO resolve situations when ID is null
- log.warn("ID header is NULL!");
- throw new RuntimeException("could not create mail with ID = NULL");
- }
-
- if (mailSender.sendTextPart()) {
- int sizeMinText = mailSender.getSizeMinText();
- int sizeMaxText = mailSender.getSizeMaxText();
- MimeBodyPart part = new MimeBodyPart();
+ Multipart multipart = new MimeMultipart("mixed");
- int mailSize = generateRandomPartSize(sizeMinText, sizeMaxText);
- mailProcessingRecord.setByteSendText(mailSize);
+ if (mailSender.sendTextPart()) {
+ int sizeMinText = mailSender.getSizeMinText();
+ int sizeMaxText = mailSender.getSizeMaxText();
+ MimeBodyPart part = new MimeBodyPart();
- StringBuffer textBody = new StringBuffer(mailSize);
- for (int i = 0; i < mailSize; i++) textBody.append(getRandomChar());
+ int mailSize = generateRandomPartSize(sizeMinText, sizeMaxText);
+ mailProcessingRecord.setByteSendText(mailSize);
- part.setText(textBody.toString());
+ StringBuffer textBody = new StringBuffer(mailSize);
+ for (int i = 0; i < mailSize; i++) textBody.append(getRandomChar());
+
+ part.setText(textBody.toString());
// part.setDataHandler(new DataHandler(textBody.toString(), "text/plain"));
-
- multipart.addBodyPart(part);
- }
-
- if (mailSender.sendBinaryPart()) {
- int sizeMinBinary = mailSender.getSizeMinBinary();
- int sizeMaxBinary = mailSender.getSizeMaxBinary();
- MimeBodyPart part = new MimeBodyPart();
-
- int mailSize = generateRandomPartSize(sizeMinBinary, sizeMaxBinary);
- mailProcessingRecord.setByteSendBinary(mailSize);
-
- byte[] bytes = new byte[mailSize];
- for (int i = 0; i < mailSize; i++) bytes[i] = getRandomByte();
-
- part.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "application/octet-stream")));
- multipart.addBodyPart(part);
- }
- message.setContent(multipart);
- } catch (MessagingException e) {
- mailProcessingRecord.setErrorTextSending(e.toString());
- log.error("mail could not be created", e);
- return null;
- }
- return message;
- }
-
- private int generateRandomPartSize(int sizeMin, int sizeMax) {
- return (int)(Math.random() * (double)(sizeMax - sizeMin)) + sizeMin;
- }
-
- public static char getRandomChar() {
- return CHARSET[getRandomInt()];
- }
-
- private static int getRandomInt() {
- return (int)(Math.random() * (double)(CHARSET.length - 1));
- }
-
- public static byte getRandomByte() {
- return (byte)CHARSET[getRandomInt()];
- }
+
+ multipart.addBodyPart(part);
+ }
+
+ if (mailSender.sendBinaryPart()) {
+ int sizeMinBinary = mailSender.getSizeMinBinary();
+ int sizeMaxBinary = mailSender.getSizeMaxBinary();
+ MimeBodyPart part = new MimeBodyPart();
+
+ int mailSize = generateRandomPartSize(sizeMinBinary, sizeMaxBinary);
+ mailProcessingRecord.setByteSendBinary(mailSize);
+
+ byte[] bytes = new byte[mailSize];
+ for (int i = 0; i < mailSize; i++) bytes[i] = getRandomByte();
+
+ part.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "application/octet-stream")));
+ multipart.addBodyPart(part);
+ }
+ message.setContent(multipart);
+ }
+
+ protected Class getValidatorClass() {
+ return DefaultMailValidator.class;
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
Re: svn commit: r450344 - in /james/postage/trunk/src/main/java/org/apache/james/postage/mail: AbstractMailFactory.java DefaultMailFactory.java
Posted by Bernd Fondermann <be...@googlemail.com>.
ok, there is room for improvement... I am working on fixing format and
adding headers.
Bernd
On 9/27/06, berndf@apache.org <be...@apache.org> wrote:
> Author: berndf
> Date: Tue Sep 26 23:33:29 2006
> New Revision: 450344
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=450344
> Log:
> extract abstract MailFactory to facilitate development of custom test mails (POSTAGE-5)
>
> Added:
> james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java
> Modified:
> james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java
>
> Added: james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java
> URL: http://svn.apache.org/viewvc/james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java?view=auto&rev=450344
> ==============================================================================
> --- james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java (added)
> +++ james/postage/trunk/src/main/java/org/apache/james/postage/mail/AbstractMailFactory.java Tue Sep 26 23:33:29 2006
> @@ -0,0 +1,92 @@
> +package org.apache.james.postage.mail;
>
> +
>
> +import javax.mail.Message;
>
> +import javax.mail.MessagingException;
>
> +import javax.mail.Session;
>
> +import javax.mail.internet.MimeMessage;
>
> +
>
> +import org.apache.commons.logging.Log;
>
> +import org.apache.commons.logging.LogFactory;
>
> +import org.apache.james.postage.configuration.MailSender;
>
> +import org.apache.james.postage.result.MailProcessingRecord;
>
> +
>
> +public abstract class AbstractMailFactory {
>
> +
>
> + private static Log log = LogFactory.getLog(DefaultMailFactory.class);
>
> +
>
> + private static final char[] CHARSET = new char[]
>
> + {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
>
> + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
>
> + 'u', 'v', 'w', 'x', 'y', 'z',
>
> + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
>
> + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
>
> + 'U', 'V', 'W', 'X', 'Y', 'Z'};
>
> +
>
> + public static char getRandomChar() {
>
> + return CHARSET[getRandomInt()];
>
> + }
>
> +
>
> + private static int getRandomInt() {
>
> + return (int)(Math.random() * (double)(CHARSET.length - 1));
>
> + }
>
> +
>
> + public static byte getRandomByte() {
>
> + return (byte)CHARSET[getRandomInt()];
>
> + }
>
> +
>
> + public AbstractMailFactory() {
>
> + super();
>
> + }
>
> +
>
> + /**
>
> + * generates a mail containing data common to all test mails: postage headers,
>
> + */
>
> + public Message createMail(Session mailSession, MailSender mailSender, MailProcessingRecord mailProcessingRecord) {
>
> +
>
> + MimeMessage message = new MimeMessage(mailSession);
>
> +
>
> + try {
>
> + message.addHeader(HeaderConstants.JAMES_POSTAGE_HEADER, "This is a test mail sent by James Postage");
>
> + message.addHeader(HeaderConstants.JAMES_POSTAGE_VALIDATORCLASSNAME_HEADER, getValidatorClass().getName());
>
> + message.setSubject(mailSender.getSubject());
>
> + message.addHeader("Message-ID", "Postage-" + System.currentTimeMillis());
>
> + mailProcessingRecord.setSubject(mailSender.getSubject());
>
> +
>
> + if (mailProcessingRecord.getMailId() != null) {
>
> + message.addHeader(HeaderConstants.MAIL_ID_HEADER, mailProcessingRecord.getMailId());
>
> + } else {
>
> + log.warn("ID header is NULL!");
>
> + throw new RuntimeException("could not create mail with ID = NULL");
>
> + }
>
> +
>
> + populateMessage(message, mailSender, mailProcessingRecord);
>
> +
>
> + } catch (MessagingException e) {
>
> + mailProcessingRecord.setErrorTextSending(e.toString());
>
> + log.error("mail could not be created", e);
>
> + return null;
>
> + }
>
> + return message;
>
> + }
>
> +
>
> + /**
>
> + * here, the test case specific data must be added to the message.
>
> + * @param message
>
> + * @param mailSender
>
> + * @param mailProcessingRecord
>
> + * @throws MessagingException
>
> + */
>
> + abstract protected void populateMessage(MimeMessage message, MailSender mailSender, MailProcessingRecord mailProcessingRecord) throws MessagingException;
>
> +
>
> + /**
>
> + * the class representing the validator
>
> + *
>
> + * @return validator class
>
> + */
>
> + abstract protected Class getValidatorClass();
>
> +
>
> + protected int generateRandomPartSize(int sizeMin, int sizeMax) {
>
> + return (int)(Math.random() * (double)(sizeMax - sizeMin)) + sizeMin;
>
> + }
>
> +
>
> +}
> \ No newline at end of file
>
> Modified: james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java
> URL: http://svn.apache.org/viewvc/james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java?view=diff&rev=450344&r1=450343&r2=450344
> ==============================================================================
> --- james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java (original)
> +++ james/postage/trunk/src/main/java/org/apache/james/postage/mail/DefaultMailFactory.java Tue Sep 26 23:33:29 2006
> @@ -20,110 +20,62 @@
>
> package org.apache.james.postage.mail;
>
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
> import org.apache.james.postage.configuration.MailSender;
> import org.apache.james.postage.result.MailProcessingRecord;
>
> import javax.activation.DataHandler;
> -import javax.mail.Message;
> import javax.mail.MessagingException;
> import javax.mail.Multipart;
> -import javax.mail.Session;
> import javax.mail.internet.MimeBodyPart;
> import javax.mail.internet.MimeMessage;
> import javax.mail.internet.MimeMultipart;
> import javax.mail.util.ByteArrayDataSource;
>
> -public class DefaultMailFactory implements MailFactory {
> +public class DefaultMailFactory extends AbstractMailFactory implements MailFactory {
>
> - private static Log log = LogFactory.getLog(DefaultMailFactory.class);
> + protected void populateMessage(MimeMessage message, MailSender mailSender, MailProcessingRecord mailProcessingRecord) throws MessagingException {
> + message.addHeader("Mime-Version", "1.0");
> + message.addHeader("Content-Type", "multipart/mixed");
>
> - private final static char[] CHARSET = new char[]
> - {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
> - 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
> - 'u', 'v', 'w', 'x', 'y', 'z',
> - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
> - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
> - 'U', 'V', 'W', 'X', 'Y', 'Z'};
> -
> -
> - public Message createMail(Session mailSession, MailSender mailSender, MailProcessingRecord mailProcessingRecord) {
> - MimeMessage message = new MimeMessage(mailSession);
> -
> - try {
> - message.addHeader("Mime-Version", "1.0");
> - message.addHeader(HeaderConstants.JAMES_POSTAGE_HEADER, "This is a test mail sent by James Postage");
> - message.addHeader(HeaderConstants.JAMES_POSTAGE_VALIDATORCLASSNAME_HEADER, "org.apache.james.postage.mail.DefaultMailValidator");
> - message.setSubject(mailSender.getSubject());
> - message.addHeader("Message-ID", "Postage-" + System.currentTimeMillis());
> - mailProcessingRecord.setSubject(mailSender.getSubject());
> - message.addHeader("Content-Type", "multipart/mixed");
> -
> - Multipart multipart = new MimeMultipart("mixed");
> -
> - if (mailProcessingRecord.getMailId() != null) {
> - message.addHeader(HeaderConstants.MAIL_ID_HEADER, mailProcessingRecord.getMailId());
> - } else {
> - // TODO resolve situations when ID is null
> - log.warn("ID header is NULL!");
> - throw new RuntimeException("could not create mail with ID = NULL");
> - }
> -
> - if (mailSender.sendTextPart()) {
> - int sizeMinText = mailSender.getSizeMinText();
> - int sizeMaxText = mailSender.getSizeMaxText();
> - MimeBodyPart part = new MimeBodyPart();
> + Multipart multipart = new MimeMultipart("mixed");
>
> - int mailSize = generateRandomPartSize(sizeMinText, sizeMaxText);
> - mailProcessingRecord.setByteSendText(mailSize);
> + if (mailSender.sendTextPart()) {
> + int sizeMinText = mailSender.getSizeMinText();
> + int sizeMaxText = mailSender.getSizeMaxText();
> + MimeBodyPart part = new MimeBodyPart();
>
> - StringBuffer textBody = new StringBuffer(mailSize);
> - for (int i = 0; i < mailSize; i++) textBody.append(getRandomChar());
> + int mailSize = generateRandomPartSize(sizeMinText, sizeMaxText);
> + mailProcessingRecord.setByteSendText(mailSize);
>
> - part.setText(textBody.toString());
> + StringBuffer textBody = new StringBuffer(mailSize);
> + for (int i = 0; i < mailSize; i++) textBody.append(getRandomChar());
> +
> + part.setText(textBody.toString());
>
> // part.setDataHandler(new DataHandler(textBody.toString(), "text/plain"));
> -
> - multipart.addBodyPart(part);
> - }
> -
> - if (mailSender.sendBinaryPart()) {
> - int sizeMinBinary = mailSender.getSizeMinBinary();
> - int sizeMaxBinary = mailSender.getSizeMaxBinary();
> - MimeBodyPart part = new MimeBodyPart();
> -
> - int mailSize = generateRandomPartSize(sizeMinBinary, sizeMaxBinary);
> - mailProcessingRecord.setByteSendBinary(mailSize);
> -
> - byte[] bytes = new byte[mailSize];
> - for (int i = 0; i < mailSize; i++) bytes[i] = getRandomByte();
> -
> - part.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "application/octet-stream")));
> - multipart.addBodyPart(part);
> - }
> - message.setContent(multipart);
> - } catch (MessagingException e) {
> - mailProcessingRecord.setErrorTextSending(e.toString());
> - log.error("mail could not be created", e);
> - return null;
> - }
> - return message;
> - }
> -
> - private int generateRandomPartSize(int sizeMin, int sizeMax) {
> - return (int)(Math.random() * (double)(sizeMax - sizeMin)) + sizeMin;
> - }
> -
> - public static char getRandomChar() {
> - return CHARSET[getRandomInt()];
> - }
> -
> - private static int getRandomInt() {
> - return (int)(Math.random() * (double)(CHARSET.length - 1));
> - }
> -
> - public static byte getRandomByte() {
> - return (byte)CHARSET[getRandomInt()];
> - }
> +
> + multipart.addBodyPart(part);
> + }
> +
> + if (mailSender.sendBinaryPart()) {
> + int sizeMinBinary = mailSender.getSizeMinBinary();
> + int sizeMaxBinary = mailSender.getSizeMaxBinary();
> + MimeBodyPart part = new MimeBodyPart();
> +
> + int mailSize = generateRandomPartSize(sizeMinBinary, sizeMaxBinary);
> + mailProcessingRecord.setByteSendBinary(mailSize);
> +
> + byte[] bytes = new byte[mailSize];
> + for (int i = 0; i < mailSize; i++) bytes[i] = getRandomByte();
> +
> + part.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "application/octet-stream")));
> + multipart.addBodyPart(part);
> + }
> + message.setContent(multipart);
> + }
> +
> + protected Class getValidatorClass() {
> + return DefaultMailValidator.class;
> + }
> +
> }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org