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 ba...@apache.org on 2006/10/04 20:29:23 UTC

svn commit: r452965 - in /james/server/trunk: lib/ src/java/org/apache/james/smtpserver/core/ src/java/org/apache/james/transport/mailets/ src/test/org/apache/james/smtpserver/

Author: bago
Date: Wed Oct  4 11:29:22 2006
New Revision: 452965

URL: http://svn.apache.org/viewvc?view=rev&rev=452965
Log:
Updated javamail to 1.4.1ea 15/Sep/2006 (CDDL)
Re-enabled code previously disabled per javamail bugs and added few tests.
They seem to pass and 1.4.1ea works fine! (JAMES-52, JAMES-410)

Added:
    james/server/trunk/lib/mail-1.4.1ea-SNAPSHOT.jar   (with props)
Removed:
    james/server/trunk/lib/mail-1.4.jar
Modified:
    james/server/trunk/src/java/org/apache/james/smtpserver/core/EhloCmdHandler.java
    james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
    james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java

Added: james/server/trunk/lib/mail-1.4.1ea-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/james/server/trunk/lib/mail-1.4.1ea-SNAPSHOT.jar?view=auto&rev=452965
==============================================================================
Binary file - no diff available.

Propchange: james/server/trunk/lib/mail-1.4.1ea-SNAPSHOT.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: james/server/trunk/src/java/org/apache/james/smtpserver/core/EhloCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/EhloCmdHandler.java?view=diff&rev=452965&r1=452964&r2=452965
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/core/EhloCmdHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/core/EhloCmdHandler.java Wed Oct  4 11:29:22 2006
@@ -83,7 +83,7 @@
         esmtpextensions.add("PIPELINING");
         esmtpextensions.add("ENHANCEDSTATUSCODES");
         // see http://issues.apache.org/jira/browse/JAMES-419 
-        //esmtpextensions.add("8BITMIME");
+        esmtpextensions.add("8BITMIME");
 
         // Iterator i = esmtpextensions.iterator();
         for (int i = 0; i < esmtpextensions.size(); i++) {

Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java?view=diff&rev=452965&r1=452964&r2=452965
==============================================================================
--- james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java (original)
+++ james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java Wed Oct  4 11:29:22 2006
@@ -215,7 +215,7 @@
 
     private Perl5Matcher delayTimeMatcher; //matcher use at init time to parse delaytime parameters
     private MultipleDelayFilter delayFilter = new MultipleDelayFilter ();//used by accept to selcet the next mail ready for processing
-
+    private Properties defprops = new Properties(); // default properties for the javamail Session
     
     /**
      * Initialize the mailet
@@ -361,6 +361,14 @@
         } catch (UnknownHostException e) {
             log("Invalid bind setting (" + bindAddress + "): " + e.toString());
         }
+        Iterator i = getInitParameterNames();
+        while (i.hasNext()) {
+            String name = (String) i.next();
+            if (name.startsWith("mail.")) {
+                defprops.put(name,getInitParameter(name));
+            }
+            
+        }  
     }
 
     /*
@@ -517,7 +525,6 @@
                             // rfc-compliant smtp server.
                             
                             // Temporarily disabled. See JAMES-638
-                            /*
                             if (!smtpTransport.supportsExtension("8BITMIME")) { 
                                 try {
                                     convertTo7Bit(message);
@@ -528,20 +535,6 @@
                                     log("Error during the conversion to 7 bit.", e);
                                 }
                             }
-                            */
-                            
-                            /*
-                             * Workaround for a javamail 1.3.2 bug: if
-                             * a message is sent without encoding information
-                             * and the 8bit allow property is set an exception
-                             * is trown during the mail delivery.
-                             */
-                            
-                            try {
-                                setEncodingIfMissing(message);
-                            } catch (IOException e) {
-                                log("Error while adding encoding information to the message", e);
-                            }
                         } else {
                             // If the transport is not the one
                             // developed by Sun we are not sure of how it
@@ -782,32 +775,6 @@
     }
     
     /**
-     * Adds an encoding information to each text mime part. This is a workaround
-     * for a javamail 1.3.2 bug: if a message is sent without encoding
-     * information a null pointer exception is thrown during the message
-     * delivery.
-     * 
-     * @param part
-     * @throws MessagingException
-     * @throws IOException
-     */
-    private void setEncodingIfMissing(MimePart part) throws MessagingException, IOException {
-        if (part.isMimeType("text/*")) {
-            String enc = part.getEncoding();
-            if (enc == null) part.setHeader("Content-Transfer-Encoding", "7bit");
-        } else if (part.isMimeType("multipart/*")) {
-            Object content = part.getContent();
-            if (content instanceof MimeMultipart) {
-                MimeMultipart parts = (MimeMultipart) content;
-                int count = parts.getCount();
-                for (int i = 0; i < count; i++) {
-                    setEncodingIfMissing((MimePart)parts.getBodyPart(i));
-                }
-            }
-        }
-    }
-    
-    /**
      * Insert the method's description here.
      * Creation date: (2/25/00 1:14:18 AM)
      * @param mail org.apache.james.core.MailImpl
@@ -1066,7 +1033,7 @@
         // send 8 bit data to the server (if it supports the 8bitmime extension).
         // 2006/03/01 reverted to false because of a javamail bug converting to 8bit
         // messages created by an inputstream.
-        props.setProperty("mail.smtp.allow8bitmime", "false");
+        props.setProperty("mail.smtp.allow8bitmime", "true");
         //Sets timeout on going connections
         props.put("mail.smtp.timeout", smtpTimeout + "");
 
@@ -1096,6 +1063,8 @@
         if (authUser != null) {
             props.put("mail.smtp.auth","true");
         }
+        
+        props.putAll(defprops);
 
         Session session = Session.getInstance(props, null);
         try {

Modified: james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java?view=diff&rev=452965&r1=452964&r2=452965
==============================================================================
--- james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java Wed Oct  4 11:29:22 2006
@@ -227,10 +227,10 @@
             capabilitieslist.add(capabilityRes[i].substring(4));
         }
         
-        assertEquals("capabilities", 2, capabilitieslist.size());
+        assertEquals("capabilities", 3, capabilitieslist.size());
         assertTrue("capabilities present PIPELINING", capabilitieslist.contains("PIPELINING"));
         assertTrue("capabilities present ENHANCEDSTATUSCODES", capabilitieslist.contains("ENHANCEDSTATUSCODES"));
-        //assertTrue("capabilities present 8BITMIME", capabilitieslist.contains("8BITMIME"));
+        assertTrue("capabilities present 8BITMIME", capabilitieslist.contains("8BITMIME"));
 
         smtpProtocol.setSender("mail@localhost");
         smtpProtocol.addRecipient("mail@localhost");
@@ -1098,7 +1098,7 @@
      * This is useful code to run tests on javamail bugs 
      * http://issues.apache.org/jira/browse/JAMES-52
      * 
-     * This 
+     * This one passes with javamail 1.4.1EA
      * @throws Exception
      */
     public void test8bitmimeFromStream() throws Exception {
@@ -1116,7 +1116,97 @@
         mci.setProperty("gatewayPort",""+m_smtpListenerPort);
         rd.init(mci);
         
-        String sources = "Content-Type: text/plain;\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        //String sources = "Content-Type: text/plain;\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: 8bit\r\nSubject: test\r\n\r\nBody\u20AC\r\n";
+        String sender = "test@localhost";
+        String recipient = "test@localhost";
+        MimeMessage mm = new MimeMessage(Session.getDefaultInstance(new Properties()),new ByteArrayInputStream(sources.getBytes()));
+        MailImpl mail = new MailImpl("name",new MailAddress(sender),Arrays.asList(new MailAddress[] {new MailAddress(recipient)}),mm);
+        
+        rd.service(mail);
+        
+        while (outgoingSpool.size() > 0) {
+            Thread.sleep(1000);
+        }
+
+        // verifyLastMail(sender, recipient, mm);
+        verifyLastMail(sender, recipient, null);
+        
+        // THIS WOULD FAIL BECAUSE OF THE JAVAMAIL BUG
+        assertEquals(mm.getContent(),m_mailServer.getLastMail().getMessage().getContent());
+        
+        mail.dispose();
+    }
+    
+    /**
+     * This is useful code to run tests on javamail bugs 
+     * http://issues.apache.org/jira/browse/JAMES-52
+     * 
+     * This one passes with javamail 1.4.1EA
+     * @throws Exception
+     */
+    public void test8bitmimeFromStreamWith8bitContent() throws Exception {
+        finishSetUp(m_testConfiguration);
+        outgoingSpool = new InMemorySpoolRepository();
+        ((MockStore) m_serviceManager.lookup(Store.ROLE)).add("outgoing", outgoingSpool);
+        
+        RemoteDelivery rd = new RemoteDelivery();
+        
+        MockMailContext mmc = new MockMailContext();
+        mmc.setAttribute(Constants.AVALON_COMPONENT_MANAGER,m_serviceManager);
+        mmc.setAttribute(Constants.HELLO_NAME,"localhost");
+        MockMailetConfig mci = new MockMailetConfig("Test",mmc,getStandardParameters());
+        mci.setProperty("gateway","127.0.0.1");
+        mci.setProperty("gatewayPort",""+m_smtpListenerPort);
+        rd.init(mci);
+        
+        //String sources = "Content-Type: text/plain;\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: 8bit\r\nSubject: test\r\n\r\nBody\u20AC\r\n";
+        String sender = "test@localhost";
+        String recipient = "test@localhost";
+        MimeMessage mm = new MimeMessage(Session.getDefaultInstance(new Properties()),new ByteArrayInputStream(sources.getBytes()));
+        MailImpl mail = new MailImpl("name",new MailAddress(sender),Arrays.asList(new MailAddress[] {new MailAddress(recipient)}),mm);
+        
+        rd.service(mail);
+        
+        while (outgoingSpool.size() > 0) {
+            Thread.sleep(1000);
+        }
+
+        // verifyLastMail(sender, recipient, mm);
+        verifyLastMail(sender, recipient, null);
+        
+        // THIS WOULD FAIL BECAUSE OF THE JAVAMAIL BUG
+        assertEquals(mm.getContent(),m_mailServer.getLastMail().getMessage().getContent());
+        
+        mail.dispose();
+    }
+    
+    /**
+     * This is useful code to run tests on javamail bugs 
+     * http://issues.apache.org/jira/browse/JAMES-52
+     * 
+     * This one passes with javamail 1.4.1EA
+     * @throws Exception
+     */
+    public void test8bitmimeFromStreamWithoutContentTransferEncoding() throws Exception {
+        finishSetUp(m_testConfiguration);
+        outgoingSpool = new InMemorySpoolRepository();
+        ((MockStore) m_serviceManager.lookup(Store.ROLE)).add("outgoing", outgoingSpool);
+        
+        RemoteDelivery rd = new RemoteDelivery();
+        
+        MockMailContext mmc = new MockMailContext();
+        mmc.setAttribute(Constants.AVALON_COMPONENT_MANAGER,m_serviceManager);
+        mmc.setAttribute(Constants.HELLO_NAME,"localhost");
+        MockMailetConfig mci = new MockMailetConfig("Test",mmc,getStandardParameters());
+        mci.setProperty("gateway","127.0.0.1");
+        mci.setProperty("gatewayPort",""+m_smtpListenerPort);
+        rd.init(mci);
+        
+        String sources = "Content-Type: text/plain;\r\nSubject: test\r\n\r\nBody\u03B2\r\n";
         //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
         //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: 8bit\r\nSubject: test\r\n\r\nBody\u20AC\r\n";
         String sender = "test@localhost";
@@ -1134,7 +1224,98 @@
         verifyLastMail(sender, recipient, null);
         
         // THIS WOULD FAIL BECAUSE OF THE JAVAMAIL BUG
-        // assertEquals(mm.getContent(),((MimeMessage) m_mailServer.getLastMail()[2]).getContent());
+        assertEquals(mm.getContent(),m_mailServer.getLastMail().getMessage().getContent());
+        
+        mail.dispose();
+    }
+    
+    /**
+     * This is useful code to run tests on javamail bugs 
+     * http://issues.apache.org/jira/browse/JAMES-52
+     * 
+     * This one passes with javamail 1.4.1EA
+     * @throws Exception
+     */
+    public void test8bitmimeFromStreamWithoutContentTransferEncodingSentAs8bit() throws Exception {
+        finishSetUp(m_testConfiguration);
+        outgoingSpool = new InMemorySpoolRepository();
+        ((MockStore) m_serviceManager.lookup(Store.ROLE)).add("outgoing", outgoingSpool);
+        
+        RemoteDelivery rd = new RemoteDelivery();
+        
+        MockMailContext mmc = new MockMailContext();
+        mmc.setAttribute(Constants.AVALON_COMPONENT_MANAGER,m_serviceManager);
+        mmc.setAttribute(Constants.HELLO_NAME,"localhost");
+        MockMailetConfig mci = new MockMailetConfig("Test",mmc,getStandardParameters());
+        mci.setProperty("gateway","127.0.0.1");
+        mci.setProperty("gatewayPort",""+m_smtpListenerPort);
+        rd.init(mci);
+        
+        String sources = "Content-Type: text/plain;\r\nSubject: test\r\n\r\nBody=32=48\r\n";
+        //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: 8bit\r\nSubject: test\r\n\r\nBody\u20AC\r\n";
+        String sender = "test@localhost";
+        String recipient = "test@localhost";
+        MimeMessage mm = new MimeMessage(Session.getDefaultInstance(new Properties()),new ByteArrayInputStream(sources.getBytes()));
+        MailImpl mail = new MailImpl("name",new MailAddress(sender),Arrays.asList(new MailAddress[] {new MailAddress(recipient)}),mm);
+        
+        rd.service(mail);
+        
+        while (outgoingSpool.size() > 0) {
+            Thread.sleep(1000);
+        }
+
+        // verifyLastMail(sender, recipient, mm);
+        verifyLastMail(sender, recipient, null);
+        
+        // THIS WOULD FAIL BECAUSE OF THE JAVAMAIL BUG
+        assertEquals(mm.getContent(),m_mailServer.getLastMail().getMessage().getContent());
+        
+        mail.dispose();
+    }
+    
+    /**
+     * This is useful code to run tests on javamail bugs 
+     * http://issues.apache.org/jira/browse/JAMES-52
+     * 
+     * This one passes with javamail 1.4.1EA
+     * @throws Exception
+     */
+    public void test8bitmimeWith8bitmimeDisabledInServer() throws Exception {
+        finishSetUp(m_testConfiguration);
+        outgoingSpool = new InMemorySpoolRepository();
+        ((MockStore) m_serviceManager.lookup(Store.ROLE)).add("outgoing", outgoingSpool);
+        
+        RemoteDelivery rd = new RemoteDelivery();
+        
+        MockMailContext mmc = new MockMailContext();
+        mmc.setAttribute(Constants.AVALON_COMPONENT_MANAGER,m_serviceManager);
+        mmc.setAttribute(Constants.HELLO_NAME,"localhost");
+        MockMailetConfig mci = new MockMailetConfig("Test",mmc,getStandardParameters());
+        mci.setProperty("gateway","127.0.0.1");
+        mci.setProperty("gatewayPort",""+m_smtpListenerPort);
+        mci.setProperty("mail.smtp.allow8bitmime", "false");
+        rd.init(mci);
+        
+        //String sources = "Content-Type: text/plain;\r\nSubject: test\r\n\r\nBody=32=48\r\n";
+        //String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: quoted-printable\r\nSubject: test\r\n\r\nBody=80\r\n";
+        String sources = "Content-Type: text/plain; charset=iso-8859-15\r\nContent-Transfer-Encoding: 8bit\r\nSubject: test\r\n\r\nBody\u20AC\r\n";
+        String sender = "test@localhost";
+        String recipient = "test@localhost";
+        MimeMessage mm = new MimeMessage(Session.getDefaultInstance(new Properties()),new ByteArrayInputStream(sources.getBytes()));
+        MailImpl mail = new MailImpl("name",new MailAddress(sender),Arrays.asList(new MailAddress[] {new MailAddress(recipient)}),mm);
+        
+        rd.service(mail);
+        
+        while (outgoingSpool.size() > 0) {
+            Thread.sleep(1000);
+        }
+
+        // verifyLastMail(sender, recipient, mm);
+        verifyLastMail(sender, recipient, null);
+        
+        // THIS WOULD FAIL BECAUSE OF THE JAVAMAIL BUG
+        assertEquals(mm.getContent(),m_mailServer.getLastMail().getMessage().getContent());
         
         mail.dispose();
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org