JDKIM-42 Remove apache-jdkim-mailets

The JDKIM mailet has been moved into James server project
diff --git a/assemble/pom.xml b/assemble/pom.xml
index 2468208..8dec225 100644
--- a/assemble/pom.xml
+++ b/assemble/pom.xml
@@ -51,10 +51,6 @@
             <groupId>org.apache.james.jdkim</groupId>
             <artifactId>apache-jdkim-library</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.james.jdkim</groupId>
-            <artifactId>apache-jdkim-mailets</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/mailets/pom.xml b/mailets/pom.xml
deleted file mode 100644
index 846c386..0000000
--- a/mailets/pom.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>apache-jdkim-project</artifactId>
-        <groupId>org.apache.james.jdkim</groupId>
-        <version>0.3-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>apache-jdkim-mailets</artifactId>
-    <packaging>bundle</packaging>
-
-    <name>Apache James :: jDKIM :: Mailets</name>
-    <description>Mailets integrating DKIM functions</description>
-    <url>http://james.apache.org/jdkim/mailets/</url>
-
-    <dependencies>
-        <dependency>
-            <groupId>ca.juliusdavies</groupId>
-            <artifactId>not-yet-commons-ssl</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.javamail</groupId>
-            <artifactId>geronimo-javamail_1.4_mail</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-activation_1.1_spec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-base</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-base</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james.jdkim</groupId>
-            <artifactId>apache-jdkim-library</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-mime4j-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-mime4j-dom</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james.jdkim</groupId>
-            <artifactId>apache-jdkim-library</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-mime4j-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-mime4j-dom</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/CRLFOutputStream.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/CRLFOutputStream.java
deleted file mode 100644
index b686b72..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/CRLFOutputStream.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/****************************************************************
- * 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.jdkim.mailets;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A Filter for use with SMTP or other protocols in which lines must end with
- * CRLF. Converts every "isolated" occourency of \r or \n with \r\n
- * 
- * RFC 2821 #2.3.7 mandates that line termination is CRLF, and that CR and LF
- * must not be transmitted except in that pairing. If we get a naked LF, convert
- * to CRLF.
- * 
- */
-public class CRLFOutputStream extends FilterOutputStream {
-
-    /**
-     * Counter for number of last (0A or 0D).
-     */
-    protected int statusLast;
-
-    protected final static int LAST_WAS_OTHER = 0;
-
-    protected final static int LAST_WAS_CR = 1;
-
-    protected final static int LAST_WAS_LF = 2;
-
-    protected boolean startOfLine = true;
-
-    /**
-     * Constructor that wraps an OutputStream.
-     * 
-     * @param out
-     *            the OutputStream to be wrapped
-     */
-    public CRLFOutputStream(OutputStream out) {
-        super(out);
-        statusLast = LAST_WAS_LF; // we already assume a CRLF at beginning
-        // (otherwise TOP would not work correctly
-        // !)
-    }
-
-    /**
-     * Writes a byte to the stream Fixes any naked CR or LF to the RFC 2821
-     * mandated CFLF pairing.
-     * 
-     * @param b
-     *            the byte to write
-     * 
-     * @throws IOException
-     *             if an error occurs writing the byte
-     */
-    public void write(int b) throws IOException {
-        switch (b) {
-            case '\r':
-                out.write('\r');
-                out.write('\n');
-                startOfLine = true;
-                statusLast = LAST_WAS_CR;
-                break;
-            case '\n':
-                if (statusLast != LAST_WAS_CR) {
-                    out.write('\r');
-                    out.write('\n');
-                    startOfLine = true;
-                }
-                statusLast = LAST_WAS_LF;
-                break;
-            default:
-                // we're no longer at the start of a line
-                out.write(b);
-                startOfLine = false;
-                statusLast = LAST_WAS_OTHER;
-                break;
-        }
-    }
-
-    /**
-     * Provides an extension point for ExtraDotOutputStream to be able to add
-     * dots at the beginning of new lines.
-     * 
-     * @see java.io.FilterOutputStream#write(byte[], int, int)
-     */
-    protected void writeChunk(byte buffer[], int offset, int length)
-            throws IOException {
-        out.write(buffer, offset, length);
-    }
-
-    /**
-     * @see java.io.FilterOutputStream#write(byte[], int, int)
-     */
-    public synchronized void write(byte buffer[], int offset, int length)
-            throws IOException {
-        /* optimized */
-        int lineStart = offset;
-        for (int i = offset; i < length + offset; i++) {
-            switch (buffer[i]) {
-                case '\r':
-                    // CR case. Write down the last line
-                    // and position the new lineStart at the next char
-                    writeChunk(buffer, lineStart, i - lineStart);
-                    out.write('\r');
-                    out.write('\n');
-                    startOfLine = true;
-                    lineStart = i + 1;
-                    statusLast = LAST_WAS_CR;
-                    break;
-                case '\n':
-                    if (statusLast != LAST_WAS_CR) {
-                        writeChunk(buffer, lineStart, i - lineStart);
-                        out.write('\r');
-                        out.write('\n');
-                        startOfLine = true;
-                    }
-                    lineStart = i + 1;
-                    statusLast = LAST_WAS_LF;
-                    break;
-                default:
-                    statusLast = LAST_WAS_OTHER;
-            }
-        }
-        if (length + offset > lineStart) {
-            writeChunk(buffer, lineStart, length + offset - lineStart);
-            startOfLine = false;
-        }
-    }
-
-    /**
-     * Ensure that the stream is CRLF terminated.
-     * 
-     * @throws IOException
-     *             if an error occurs writing the byte
-     */
-    public void checkCRLFTerminator() throws IOException {
-        if (statusLast == LAST_WAS_OTHER) {
-            out.write('\r');
-            out.write('\n');
-            statusLast = LAST_WAS_CR;
-        }
-    }
-}
diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/ConvertTo7Bit.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/ConvertTo7Bit.java
deleted file mode 100644
index 72e4e77..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/ConvertTo7Bit.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************
- * 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.jdkim.mailets;
-
-import java.io.IOException;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePart;
-
-import org.apache.mailet.Mail;
-import org.apache.mailet.base.GenericMailet;
-
-/**
- * Make sure the message stream is 7bit. Every 8bit part is encoded to
- * quoted-printable or base64 and the message is saved.
- */
-public class ConvertTo7Bit extends GenericMailet {
-
-    public void service(Mail mail) throws MessagingException {
-        MimeMessage message = mail.getMessage();
-        try {
-            convertTo7Bit(message);
-            message.saveChanges();
-        } catch (IOException e) {
-            throw new MessagingException(
-                    "IOException converting message to 7bit: " + e.getMessage(),
-                    e);
-        }
-    }
-
-    /**
-     * Converts a message to 7 bit.
-     * 
-     * @param part
-     */
-    private void convertTo7Bit(MimePart part) throws MessagingException,
-            IOException {
-        if (part.isMimeType("multipart/*")) {
-            MimeMultipart parts = (MimeMultipart) part.getContent();
-            int count = parts.getCount();
-            for (int i = 0; i < count; i++) {
-                convertTo7Bit((MimePart) parts.getBodyPart(i));
-            }
-        } else if ("8bit".equals(part.getEncoding())) {
-            // The content may already be in encoded the form (likely with mail
-            // created from a stream). In that case, just changing the encoding
-            // to quoted-printable will mangle the result when this is
-            // transmitted.
-            // We must first convert the content into its native format, set it
-            // back, and only THEN set the transfer encoding to force the
-            // content to be encoded appropriately.
-
-            // if the part doesn't contain text it will be base64 encoded.
-            String contentTransferEncoding = part.isMimeType("text/*") ? "quoted-printable"
-                    : "base64";
-            part.setContent(part.getContent(), part.getContentType());
-            part
-                    .setHeader("Content-Transfer-Encoding",
-                            contentTransferEncoding);
-            part.addHeader("X-MIME-Autoconverted", "from 8bit to "
-                    + contentTransferEncoding + " by "
-                    + getMailetContext().getServerInfo());
-        }
-    }
-
-}
diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
deleted file mode 100644
index c71d754..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/****************************************************************
- * 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.jdkim.mailets;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.GeneralSecurityException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.mail.Header;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.ssl.PKCS8Key;
-import org.apache.james.jdkim.DKIMSigner;
-import org.apache.james.jdkim.api.BodyHasher;
-import org.apache.james.jdkim.api.Headers;
-import org.apache.james.jdkim.api.SignatureRecord;
-import org.apache.james.jdkim.exceptions.PermFailException;
-import org.apache.mailet.Mail;
-import org.apache.mailet.base.GenericMailet;
-
-/**
- * This mailet sign a message using the DKIM protocol
- * If the privateKey is encoded using a password then you can pass
- * the password as privateKeyPassword parameter.
- * 
- * Sample configuration:
- * 
- * <pre><code>
- * &lt;mailet match=&quot;All&quot; class=&quot;DKIMSign&quot;&gt;
- *   &lt;signatureTemplate&gt;v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;&lt;/signatureTemplate&gt;
- *   &lt;privateKey&gt;
- *   -----BEGIN RSA PRIVATE KEY-----
- *   MIICXAIBAAKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoT
- *   M5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRH
- *   r7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB
- *   AoGBAI8XcwnZi0Sq5N89wF+gFNhnREFo3rsJDaCY8iqHdA5DDlnr3abb/yhipw0I
- *   /1HlgC6fIG2oexXOXFWl+USgqRt1kTt9jXhVFExg8mNko2UelAwFtsl8CRjVcYQO
- *   cedeH/WM/mXjg2wUqqZenBmlKlD6vNb70jFJeVaDJ/7n7j8BAkEA9NkH2D4Zgj/I
- *   OAVYccZYH74+VgO0e7VkUjQk9wtJ2j6cGqJ6Pfj0roVIMUWzoBb8YfErR8l6JnVQ
- *   bfy83gJeiQJBAOHk3ow7JjAn8XuOyZx24KcTaYWKUkAQfRWYDFFOYQF4KV9xLSEt
- *   ycY0kjsdxGKDudWcsATllFzXDCQF6DTNIWECQEA52ePwTjKrVnLTfCLEG4OgHKvl
- *   Zud4amthwDyJWoMEH2ChNB2je1N4JLrABOE+hk+OuoKnKAKEjWd8f3Jg/rkCQHj8
- *   mQmogHqYWikgP/FSZl518jV48Tao3iXbqvU9Mo2T6yzYNCCqIoDLFWseNVnCTZ0Q
- *   b+IfiEf1UeZVV5o4J+ECQDatNnS3V9qYUKjj/krNRD/U0+7eh8S2ylLqD3RlSn9K
- *   tYGRMgAtUXtiOEizBH6bd/orzI9V9sw8yBz+ZqIH25Q=
- *   -----END RSA PRIVATE KEY-----
- *   &lt;/privateKey&gt;
- * &lt;/mailet&gt;
- * </code></pre>
- * 
- * By default the mailet assume that Javamail will convert LF to CRLF when sending 
- * so will compute the hash using converted newlines. If you don't want this 
- * behaviout then set forceCRLF attribute to false. 
- */
-public class DKIMSign extends GenericMailet {
-
-    private String signatureTemplate;
-    private PrivateKey privateKey;
-    private boolean forceCRLF;
-
-	/**
-	 * @return the signatureTemplate
-	 */
-	protected String getSignatureTemplate() {
-		return signatureTemplate;
-	}
-
-	/**
-	 * @return the privateKey
-	 */
-	protected PrivateKey getPrivateKey() {
-		return privateKey;
-	}
-
-    public void init() throws MessagingException {
-        signatureTemplate = getInitParameter("signatureTemplate");
-        String privateKeyString = getInitParameter("privateKey");
-        String privateKeyPassword = getInitParameter("privateKeyPassword", null);
-        forceCRLF = getInitParameter("forceCRLF", true);
-        try {
-            PKCS8Key pkcs8 = new PKCS8Key(new ByteArrayInputStream(
-                    privateKeyString.getBytes()),
-                    privateKeyPassword != null ? privateKeyPassword
-                            .toCharArray() : null);
-            privateKey = pkcs8.getPrivateKey();
-            // privateKey = DKIMSigner.getPrivateKey(privateKeyString);
-        } catch (NoSuchAlgorithmException e) {
-            throw new MessagingException("Unknown private key algorythm: "
-                    + e.getMessage(), e);
-        } catch (InvalidKeySpecException e) {
-            throw new MessagingException(
-                    "PrivateKey should be in base64 encoded PKCS8 (der) format: "
-                            + e.getMessage(), e);
-        } catch (GeneralSecurityException e) {
-            throw new MessagingException("General security exception: "
-                    + e.getMessage(), e);
-        }
-    }
-
-    public void service(Mail mail) throws MessagingException {
-        DKIMSigner signer = new DKIMSigner(getSignatureTemplate(), getPrivateKey());
-        SignatureRecord signRecord = signer
-                .newSignatureRecordTemplate(getSignatureTemplate());
-        try {
-            BodyHasher bhj = signer.newBodyHasher(signRecord);
-            MimeMessage message = mail.getMessage();
-            Headers headers = new MimeMessageHeaders(message);
-            try {
-            	OutputStream os = new HeaderSkippingOutputStream(bhj.getOutputStream());
-            	if (forceCRLF) os = new CRLFOutputStream(os);
-                message.writeTo(os);
-                bhj.getOutputStream().close();
-            } catch (IOException e) {
-                throw new MessagingException("Exception calculating bodyhash: "
-                        + e.getMessage(), e);
-            }
-            String signatureHeader = signer.sign(headers, bhj);
-            // Unfortunately JavaMail does not give us a method to add headers
-            // on top.
-            // message.addHeaderLine(signatureHeader);
-            prependHeader(message, signatureHeader);
-        } catch (PermFailException e) {
-            throw new MessagingException("PermFail while signing: "
-                    + e.getMessage(), e);
-        }
-
-    }
-
-    private void prependHeader(MimeMessage message, String signatureHeader)
-            throws MessagingException {
-        List<String> prevHeader = new LinkedList<String>();
-        // read all the headers
-        for (Enumeration<String> e = message.getAllHeaderLines(); e.hasMoreElements();) {
-            String headerLine = e.nextElement();
-            prevHeader.add(headerLine);
-        }
-        // remove all the headers
-        for (Enumeration<Header> e = message.getAllHeaders(); e.hasMoreElements();) {
-            Header header = e.nextElement();
-            message.removeHeader(header.getName());
-        }
-        // add our header
-        message.addHeaderLine(signatureHeader);
-        // add the remaining headers using "addHeaderLine" that won't alter the
-        // insertion order.
-        for (String header : prevHeader) {
-            message.addHeaderLine(header);
-        }
-    }
-
-}
diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
deleted file mode 100644
index 68c0cf9..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/****************************************************************

- * 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.jdkim.mailets;

-

-import java.io.IOException;

-import java.io.OutputStream;

-import java.util.List;

-

-import javax.mail.MessagingException;

-import javax.mail.internet.MimeMessage;

-

-import org.apache.james.jdkim.DKIMVerifier;

-import org.apache.james.jdkim.api.BodyHasher;

-import org.apache.james.jdkim.api.Headers;

-import org.apache.james.jdkim.api.SignatureRecord;

-import org.apache.james.jdkim.exceptions.FailException;

-import org.apache.mailet.Mail;

-import org.apache.mailet.base.GenericMailet;

-

-/**

- * This mailet verify a message using the DKIM protocol

- * 

- * Sample configuration:

- * <pre><code>

- * &lt;mailet match=&quot;All&quot; class=&quot;DKIMVerify&quot;&gt;

- * &lt;/mailet&gt;

- * </code></pre>

- * 

- * By default the mailet assume that Javamail will use LF instead of CRLF 

- * so it will verify the hash using converted newlines. If you don't want this 

- * behaviout then set forceCRLF attribute to false. 

- */

-public class DKIMVerify extends GenericMailet {

-

-    public static final String DKIM_AUTH_RESULT_ATTRIBUTE = "jDKIM.AUTHRESULT";

-    

-    protected DKIMVerifier verifier = null;

-    private boolean forceCRLF;

-

-    @Override

-    public void init() throws MessagingException {

-        verifier = new DKIMVerifier();

-        forceCRLF = getInitParameter("forceCRLF", true);

-    }

-    

-    public void service(Mail mail) throws MessagingException {

-        try {

-            MimeMessage message = mail.getMessage();

-            List<SignatureRecord> res = verify(verifier, message, forceCRLF);

-            if (res == null || res.isEmpty()) {

-                // neutral

-                mail.setAttribute(DKIM_AUTH_RESULT_ATTRIBUTE, "neutral (no signatures)");

-            } else {

-                // pass

-                StringBuilder msg = new StringBuilder();

-                msg.append("pass");

-                for (SignatureRecord rec : res) {

-                    msg.append(" (");

-                    msg.append("identity ");

-                    msg.append(rec.getIdentity().toString());

-                    msg.append(")");

-                }

-                mail.setAttribute(DKIM_AUTH_RESULT_ATTRIBUTE, msg.toString());

-            }

-        } catch (FailException e) {

-            // fail

-            mail.setAttribute(DKIM_AUTH_RESULT_ATTRIBUTE, "fail ("+(e.getRelatedRecordIdentity() != null ? "identity "+ e.getRelatedRecordIdentity() + ": " : "")+e.getMessage()+")");

-        }

-        

-    }

-

-	protected static List<SignatureRecord> verify(DKIMVerifier verifier, MimeMessage message, boolean forceCRLF)

-			throws MessagingException, FailException {

-		Headers headers = new MimeMessageHeaders(message);

-		BodyHasher bh = verifier.newBodyHasher(headers);

-		try {

-		    if (bh != null) {

-		    	OutputStream os = new HeaderSkippingOutputStream(bh

-		                .getOutputStream());

-		    	if (forceCRLF) os = new CRLFOutputStream(os);

-		        message.writeTo(os);

-		        bh.getOutputStream().close();

-		    }

-		    

-		} catch (IOException e) {

-		    throw new MessagingException("Exception calculating bodyhash: "

-		            + e.getMessage(), e);

-		}

-		return verifier.verify(bh);

-	}

-}

diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/HeaderSkippingOutputStream.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/HeaderSkippingOutputStream.java
deleted file mode 100644
index 16e7f25..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/HeaderSkippingOutputStream.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************
- * 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.jdkim.mailets;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Ignore writes until the given sequence is found.
- */
-public class HeaderSkippingOutputStream extends FilterOutputStream {
-
-    boolean inHeaders = true;
-    final byte[] skipTo = "\r\n\r\n".getBytes();
-    int pos = 0;
-
-    public HeaderSkippingOutputStream(OutputStream out) {
-        super(out);
-    }
-
-    public void write(byte[] b, int off, int len) throws IOException {
-        if (inHeaders) {
-            for (int i = off; i < off + len; i++) {
-                if (b[i] == skipTo[pos]) {
-                    pos++;
-                    if (pos == skipTo.length) {
-                        inHeaders = false;
-                        if (len - i - 1 > 0)
-                            out.write(b, i + 1, len - i - 1);
-                        break;
-                    }
-                } else
-                    pos = 0;
-            }
-        } else {
-            out.write(b, off, len);
-        }
-    }
-
-    public void write(int b) throws IOException {
-        if (inHeaders) {
-            if (skipTo[pos] == b) {
-                pos++;
-                if (pos == skipTo.length)
-                    inHeaders = false;
-            } else
-                pos = 0;
-        } else {
-            out.write(b);
-        }
-    }
-
-}
diff --git a/mailets/src/main/java/org/apache/james/jdkim/mailets/MimeMessageHeaders.java b/mailets/src/main/java/org/apache/james/jdkim/mailets/MimeMessageHeaders.java
deleted file mode 100644
index 5b70968..0000000
--- a/mailets/src/main/java/org/apache/james/jdkim/mailets/MimeMessageHeaders.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************

- * 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.jdkim.mailets;

-

-import java.util.Enumeration;

-import java.util.HashMap;

-import java.util.LinkedList;

-import java.util.List;

-import java.util.Map;

-

-import javax.mail.MessagingException;

-import javax.mail.internet.MimeMessage;

-

-import org.apache.james.jdkim.api.Headers;

-

-/**

- * An adapter to let DKIMSigner read headers from MimeMessage

- */

-final class MimeMessageHeaders implements Headers {

-

-    private final Map<String, List<String>> headers;

-    private final List<String> fields;

-

-    public MimeMessageHeaders(MimeMessage message)

-            throws MessagingException {

-        headers = new HashMap<String, List<String>>();

-        fields = new LinkedList<String>();

-        for (Enumeration<String> e = message.getAllHeaderLines(); e

-                .hasMoreElements();) {

-            String head = e.nextElement();

-            int p = head.indexOf(':');

-            if (p <= 0)

-                throw new MessagingException("Bad header line: " + head);

-            String headerName = head.substring(0, p).trim();

-            String headerNameLC = headerName.toLowerCase();

-            fields.add(headerName);

-            List<String> strings = headers.get(headerNameLC);

-            if (strings == null) {

-                strings = new LinkedList<String>();

-                headers.put(headerNameLC, strings);

-            }

-            strings.add(head);

-        }

-    }

-

-    public List<String> getFields() {

-        return fields;

-    }

-

-    public List<String> getFields(String name) {

-        return headers.get(name.toLowerCase());

-    }

-}
\ No newline at end of file
diff --git a/mailets/src/reporting-site/site.xml b/mailets/src/reporting-site/site.xml
deleted file mode 100644
index d919164..0000000
--- a/mailets/src/reporting-site/site.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-    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.    
--->
-<project name="${project.name}">
-
-    <body>
-
-        <menu ref="parent" />
-        <menu ref="reports" />
-
-    </body>
-
-</project>
diff --git a/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java b/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
deleted file mode 100644
index 2e46dd0..0000000
--- a/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/****************************************************************
- * 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.jdkim.mailets;
-
-import org.apache.james.jdkim.DKIMVerifier;
-import org.apache.james.jdkim.MockPublicKeyRecordRetriever;
-import org.apache.james.jdkim.api.SignatureRecord;
-import org.apache.james.jdkim.exceptions.FailException;
-import org.apache.james.jdkim.exceptions.PermFailException;
-import org.apache.mailet.Mail;
-import org.apache.mailet.Mailet;
-import org.apache.mailet.base.test.FakeMail;
-import org.apache.mailet.base.test.FakeMailContext;
-import org.apache.mailet.base.test.FakeMailetConfig;
-import org.junit.Assert;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import org.junit.Test;
-
-import javax.mail.Address;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMessage.RecipientType;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-
-public class DKIMSignTest {
-
-    private static final String TESTING_PEM = "-----BEGIN RSA PRIVATE KEY-----\r\n" +
-            "MIICXAIBAAKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoT\r\n" +
-            "M5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRH\r\n" +
-            "r7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB\r\n" +
-            "AoGBAI8XcwnZi0Sq5N89wF+gFNhnREFo3rsJDaCY8iqHdA5DDlnr3abb/yhipw0I\r\n" +
-            "/1HlgC6fIG2oexXOXFWl+USgqRt1kTt9jXhVFExg8mNko2UelAwFtsl8CRjVcYQO\r\n" +
-            "cedeH/WM/mXjg2wUqqZenBmlKlD6vNb70jFJeVaDJ/7n7j8BAkEA9NkH2D4Zgj/I\r\n" +
-            "OAVYccZYH74+VgO0e7VkUjQk9wtJ2j6cGqJ6Pfj0roVIMUWzoBb8YfErR8l6JnVQ\r\n" +
-            "bfy83gJeiQJBAOHk3ow7JjAn8XuOyZx24KcTaYWKUkAQfRWYDFFOYQF4KV9xLSEt\r\n" +
-            "ycY0kjsdxGKDudWcsATllFzXDCQF6DTNIWECQEA52ePwTjKrVnLTfCLEG4OgHKvl\r\n" +
-            "Zud4amthwDyJWoMEH2ChNB2je1N4JLrABOE+hk+OuoKnKAKEjWd8f3Jg/rkCQHj8\r\n" +
-            "mQmogHqYWikgP/FSZl518jV48Tao3iXbqvU9Mo2T6yzYNCCqIoDLFWseNVnCTZ0Q\r\n" +
-            "b+IfiEf1UeZVV5o4J+ECQDatNnS3V9qYUKjj/krNRD/U0+7eh8S2ylLqD3RlSn9K\r\n" +
-            "tYGRMgAtUXtiOEizBH6bd/orzI9V9sw8yBz+ZqIH25Q=\r\n" +
-            "-----END RSA PRIVATE KEY-----\r\n";
-    private static final FakeMailContext FAKE_MAIL_CONTEXT = FakeMailContext.defaultContext();
-
-    @Test
-    public void testDKIMSign() throws MessagingException, IOException,
-            FailException {
-        String message = "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova\r\n";
-
-        Mailet mailet = new DKIMSign();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        mailet.init(mci);
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(new MimeMessage(Session
-                .getDefaultInstance(new Properties()),
-                new ByteArrayInputStream(message.getBytes())))
-            .build();
-
-        mailet.service(mail);
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-        verify(rawMessage, mockPublicKeyRecordRetriever);
-    }
-
-    private List<SignatureRecord> verify(ByteArrayOutputStream rawMessage,
-                                         MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever)
-            throws MessagingException, FailException {
-        List<SignatureRecord> signs = DKIMVerify.verify(new DKIMVerifier(mockPublicKeyRecordRetriever), new MimeMessage(Session.getDefaultInstance(new Properties()), new ByteArrayInputStream(rawMessage.toByteArray())), true);
-        assertNotNull(signs);
-        assertEquals(1, signs.size());
-        return signs;
-    }
-
-    @Test
-    public void testDKIMSignFuture() throws MessagingException, IOException,
-            FailException {
-        String message = "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova\r\n";
-
-        Mailet mailet = new DKIMSign();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; t=" + ((System.currentTimeMillis() / 1000) + 1000) + "; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        mailet.init(mci);
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(new MimeMessage(Session
-                .getDefaultInstance(new Properties()),
-                new ByteArrayInputStream(message.getBytes())))
-            .build();
-
-        mailet.service(mail);
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-        try {
-            verify(rawMessage, mockPublicKeyRecordRetriever);
-            Assert.fail("Expecting signature to be ignored");
-        } catch (PermFailException e) {
-            // signature ignored, so fail for missing signatures.
-        }
-    }
-
-
-    @Test
-    public void testDKIMSignTime() throws MessagingException, IOException,
-            FailException {
-        String message = "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova\r\n";
-
-        Mailet mailet = new DKIMSign();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; t=; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        mailet.init(mci);
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(new MimeMessage(Session
-                .getDefaultInstance(new Properties()),
-                new ByteArrayInputStream(message.getBytes())))
-            .build();
-
-        mailet.service(mail);
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-        verify(rawMessage, mockPublicKeyRecordRetriever);
-
-        List<SignatureRecord> rs = verify(rawMessage, mockPublicKeyRecordRetriever);
-
-        // check we have a valued signatureTimestamp
-        Assert.assertNotNull(rs.get(0).getSignatureTimestamp());
-        long ref = System.currentTimeMillis() / 1000;
-        // Chech that the signature timestamp is in the past 60 seconds.
-        Assert.assertTrue(rs.get(0).getSignatureTimestamp() <= ref);
-        Assert.assertTrue(rs.get(0).getSignatureTimestamp() >= ref - 60);
-    }
-
-    @Test
-    public void testDKIMSignMessageAsText() throws MessagingException,
-            IOException, FailException {
-        MimeMessage mm = new MimeMessage(Session
-                .getDefaultInstance(new Properties()));
-        mm.addFrom(new Address[]{new InternetAddress("io@bago.org")});
-        mm.addRecipient(RecipientType.TO, new InternetAddress("io@bago.org"));
-        mm.setText("An 8bit encoded body with \u20ACuro symbol.", "ISO-8859-15");
-
-        Mailet mailet = new DKIMSign();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        mailet.init(mci);
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(mm)
-            .build();
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-
-        mailet.service(mail);
-
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-
-        verify(rawMessage, mockPublicKeyRecordRetriever);
-    }
-
-    @Test
-    public void testDKIMSignMessageAsObjectConvertedTo7Bit()
-            throws MessagingException, IOException, FailException {
-        MimeMessage mm = new MimeMessage(Session
-                .getDefaultInstance(new Properties()));
-        mm.addFrom(new Address[]{new InternetAddress("io@bago.org")});
-        mm.addRecipient(RecipientType.TO, new InternetAddress("io@bago.org"));
-        mm.setContent("An 8bit encoded body with \u20ACuro symbol.",
-                "text/plain; charset=iso-8859-15");
-        mm.setHeader("Content-Transfer-Encoding", "8bit");
-        mm.saveChanges();
-
-        FakeMailContext FakeMailContext = FAKE_MAIL_CONTEXT;
-        FakeMailContext.getServerInfo();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(mm)
-            .build();
-
-        Mailet mailet = new DKIMSign();
-        mailet.init(mci);
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-        m7bit.service(mail);
-
-        mailet.service(mail);
-
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-        verify(rawMessage, mockPublicKeyRecordRetriever);
-    }
-
-    @Test
-    public void testDKIMSignMessageAsObjectNotConverted()
-            throws MessagingException, IOException, FailException {
-        MimeMessage mm = new MimeMessage(Session
-                .getDefaultInstance(new Properties()));
-        mm.addFrom(new Address[]{new InternetAddress("io@bago.org")});
-        mm.addRecipient(RecipientType.TO, new InternetAddress("io@bago.org"));
-        mm.setContent("An 8bit encoded body with \u20ACuro symbol.",
-                "text/plain; charset=iso-8859-15");
-        mm.setHeader("Content-Transfer-Encoding", "8bit");
-        mm.saveChanges();
-
-        FakeMailContext FakeMailContext = FAKE_MAIL_CONTEXT;
-        FakeMailContext.getServerInfo();
-
-        FakeMailetConfig mci = FakeMailetConfig.builder()
-                .mailetName("Test")
-                .mailetContext(FAKE_MAIL_CONTEXT)
-                .setProperty(
-                        "signatureTemplate",
-                        "v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;")
-                .setProperty("privateKey", TESTING_PEM)
-                .build();
-
-        Mail mail = FakeMail.builder()
-            .mimeMessage(mm)
-            .build();
-
-        Mailet mailet = new DKIMSign();
-        mailet.init(mci);
-
-        Mailet m7bit = new ConvertTo7Bit();
-        m7bit.init(mci);
-        // m7bit.service(mail);
-
-        mailet.service(mail);
-
-        m7bit.service(mail);
-
-        ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
-        mail.getMessage().writeTo(rawMessage);
-
-        MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever = new MockPublicKeyRecordRetriever(
-                "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",
-                "selector", "example.com");
-        try {
-            verify(rawMessage, mockPublicKeyRecordRetriever);
-            Assert.fail("Expected PermFail");
-        } catch (PermFailException e) {
-
-        }
-    }
-
-}
diff --git a/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMVerifyTest.java b/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMVerifyTest.java
deleted file mode 100644
index cf4129a..0000000
--- a/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMVerifyTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************

- * 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.jdkim.mailets;

-

-import java.io.ByteArrayInputStream;

-import java.io.IOException;

-import java.util.Properties;

-

-import javax.mail.MessagingException;

-import javax.mail.Session;

-import javax.mail.internet.MimeMessage;

-

-import org.apache.james.jdkim.DKIMVerifier;

-import org.apache.james.jdkim.MockPublicKeyRecordRetriever;

-import org.apache.james.jdkim.exceptions.FailException;

-import org.apache.mailet.Mail;

-import org.apache.mailet.Mailet;

-import org.apache.mailet.base.test.FakeMail;

-import org.apache.mailet.base.test.FakeMailContext;

-import org.apache.mailet.base.test.FakeMailetConfig;

-import org.junit.Assert;

-import org.junit.Test;

-

-public class DKIMVerifyTest {

-

-    @Test

-    public void testDKIMVerifyPass() throws MessagingException, IOException,

-            FailException {

-        String message = "DKIM-Signature: v=1; d=example.com; t=1284762805; b=ZFfwSIzTQM7k9syRnl9VfQh0/dr99euvBe1gn/DiTrnEZjxyjzQBD2MMvowVdbHpPMtSjtCtehU9zZ3urXmj5iHKujpEkP92FEKinzElkQ2eT2zoxdg1zByPHsKPX+KjrBespAJcO2k052aOK5kIBFxpQumP4aiW7ZklBKSWMBk=; s=selector; a=rsa-sha256; bh=rHOD7fd9xnNxK7OSl5ellpQVF14NNFbOIizqtUMhnio=; h=from:to:received:received;\r\n"

-            + "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova\r\n";

-

-        Mail mail = process(message);

-        

-        String attr = (String) mail.getAttribute(DKIMVerify.DKIM_AUTH_RESULT_ATTRIBUTE);

-        Assert.assertNotNull(attr);

-        Assert.assertTrue(attr.startsWith("pass"));

-    }

-

-    @Test

-    public void testDKIMVerifyFail() throws MessagingException, IOException,

-            FailException {

-        // altered message body

-        String message = "DKIM-Signature: v=1; d=example.com; t=1284762805; b=ZFfwSIzTQM7k9syRnl9VfQh0/dr99euvBe1gn/DiTrnEZjxyjzQBD2MMvowVdbHpPMtSjtCtehU9zZ3urXmj5iHKujpEkP92FEKinzElkQ2eT2zoxdg1zByPHsKPX+KjrBespAJcO2k052aOK5kIBFxpQumP4aiW7ZklBKSWMBk=; s=selector; a=rsa-sha256; bh=rHOD7fd9xnNxK7OSl5ellpQVF14NNFbOIizqtUMhnio=; h=from:to:received:received;\r\n"

-            + "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova altered\r\n";

-

-        Mail mail = process(message);

-        

-        String attr = (String) mail.getAttribute(DKIMVerify.DKIM_AUTH_RESULT_ATTRIBUTE);

-        Assert.assertNotNull(attr);

-        Assert.assertTrue(attr.startsWith("fail"));

-    }

-

-    @Test

-    public void testDKIMVerifyFailInvalid() throws MessagingException, IOException,

-            FailException {

-        // invalid version v=2

-        String message = "DKIM-Signature: v=2; d=example.com; t=1284762805; b=ZFfwSIzTQM7k9syRnl9VfQh0/dr99euvBe1gn/DiTrnEZjxyjzQBD2MMvowVdbHpPMtSjtCtehU9zZ3urXmj5iHKujpEkP92FEKinzElkQ2eT2zoxdg1zByPHsKPX+KjrBespAJcO2k052aOK5kIBFxpQumP4aiW7ZklBKSWMBk=; s=selector; a=rsa-sha256; bh=rHOD7fd9xnNxK7OSl5ellpQVF14NNFbOIizqtUMhnio=; h=from:to:received:received;\r\n"

-            + "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova\r\n";

-

-        Mail mail = process(message);

-        

-        String attr = (String) mail.getAttribute(DKIMVerify.DKIM_AUTH_RESULT_ATTRIBUTE);

-        Assert.assertNotNull(attr);

-        Assert.assertTrue(attr.startsWith("fail"));

-    }

-

-    @Test

-    public void testDKIMVerifyNeutral() throws MessagingException, IOException,

-            FailException {

-        // no signatures!

-        String message = ""

-            + "Received: by 10.XX.XX.12 with SMTP id dfgskldjfhgkljsdfhgkljdhfg;\r\n\tTue, 06 Oct 2009 07:37:34 -0700 (PDT)\r\nReturn-Path: <bounce@example.com>\r\nReceived: from example.co.uk (example.co.uk [XX.XXX.125.19])\r\n\tby mx.example.com with ESMTP id dgdfgsdfgsd.97.2009.10.06.07.37.32;\r\n\tTue, 06 Oct 2009 07:37:32 -0700 (PDT)\r\nFrom: apache@bago.org\r\nTo: apache@bago.org\r\n\r\nbody\r\nprova altered\r\n";

-

-        Mail mail = process(message);

-        

-        String attr = (String) mail.getAttribute(DKIMVerify.DKIM_AUTH_RESULT_ATTRIBUTE);

-        Assert.assertNotNull(attr);

-        Assert.assertTrue(attr.startsWith("neutral"));

-    }

-

-    private Mail process(String message) throws MessagingException {

-        Mailet mailet = new DKIMVerify() {

-

-            @Override

-            public void init() throws MessagingException {

-                verifier = new DKIMVerifier(new MockPublicKeyRecordRetriever(

-                        "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoTM5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRHr7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB;",

-                        "selector", "example.com"));

-            }

-            

-        };

-

-        FakeMailetConfig mci = FakeMailetConfig.builder()

-                .mailetName("Test")

-                .mailetContext(FakeMailContext.defaultContext())

-                .build();

-

-        mailet.init(mci);

-

-        Mail mail = FakeMail.builder()

-            .mimeMessage(new MimeMessage(Session

-                .getDefaultInstance(new Properties()),

-                new ByteArrayInputStream(message.getBytes())))

-            .build();

-

-        mailet.service(mail);

-        return mail;

-    }

-}

diff --git a/main/pom.xml b/main/pom.xml
index 6d6c375..20c2d0b 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -61,20 +61,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-base</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>apache-mailet-base</artifactId>
-            <scope>test</scope>
-            <classifier>tests</classifier>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.james</groupId>
             <artifactId>apache-mime4j-core</artifactId>
         </dependency>
         <dependency>
diff --git a/pom.xml b/pom.xml
index f1e0082..478988a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,6 @@
 
     <modules>
         <module>assemble</module>
-        <module>mailets</module>
         <module>main</module>
     </modules>
 
@@ -62,7 +61,6 @@
     </distributionManagement>
 
     <properties>
-        <apache-mailet.version>3.1.0-SNAPSHOT</apache-mailet.version>
         <apache-mime4j.version>0.8.3</apache-mime4j.version>
         <commons-codec.version>1.13</commons-codec.version>
         <commons-logging.version>1.2</commons-logging.version>
@@ -134,70 +132,6 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.james</groupId>
-                <artifactId>apache-mailet-api</artifactId>
-                <version>${apache-mailet.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>javax.activation</groupId>
-                        <artifactId>activation</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>javax.mail</groupId>
-                        <artifactId>mail</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.james</groupId>
-                <artifactId>apache-mailet-base</artifactId>
-                <version>${apache-mailet.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>javax.activation</groupId>
-                        <artifactId>activation</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>javax.mail</groupId>
-                        <artifactId>mail</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.james</groupId>
-                <artifactId>apache-mailet-base</artifactId>
-                <version>${apache-mailet.version}</version>
-                <type>test-jar</type>
-                <scope>test</scope>
-                <exclusions>
-                    <exclusion>
-                        <groupId>javax.activation</groupId>
-                        <artifactId>activation</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>javax.mail</groupId>
-                        <artifactId>mail</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.james</groupId>
-                <artifactId>apache-mailet-base</artifactId>
-                <version>${apache-mailet.version}</version>
-                <scope>test</scope>
-                <classifier>tests</classifier>
-                <exclusions>
-                    <exclusion>
-                        <groupId>javax.mail</groupId>
-                        <artifactId>mail</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>javax.activation</groupId>
-                        <artifactId>activation</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.james</groupId>
                 <artifactId>apache-mime4j-core</artifactId>
                 <version>${apache-mime4j.version}</version>
             </dependency>
@@ -219,11 +153,6 @@
                 <scope>test</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.james.jdkim</groupId>
-                <artifactId>apache-jdkim-mailets</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
                 <groupId>org.apache.logging.log4j</groupId>
                 <artifactId>log4j-core</artifactId>
                 <scope>runtime</scope>