diff --git a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPTransport.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPTransport.java
index 1b7f64a..0aef127 100644
--- a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPTransport.java
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPTransport.java
@@ -54,6 +54,7 @@
 import org.apache.geronimo.javamail.authentication.DigestMD5Authenticator;
 import org.apache.geronimo.javamail.authentication.LoginAuthenticator;
 import org.apache.geronimo.javamail.authentication.PlainAuthenticator;
+import org.apache.geronimo.javamail.util.CountingOutputStream;
 import org.apache.geronimo.javamail.util.MIMEOutputStream;
 import org.apache.geronimo.javamail.util.TraceInputStream;
 import org.apache.geronimo.javamail.util.TraceOutputStream;
@@ -1407,6 +1408,53 @@
         // response information
         return !line.isError();
     }
+    
+    /**
+     * Get an estimate of the transmission size for this 
+     * message.  This size is the complete message as it is 
+     * encoded and transmitted on the DATA command, not counting 
+     * the terminating ".CRLF". 
+     * 
+     * @param msg    The message we're sending.
+     * 
+     * @return The count of bytes, if it can be calculated. 
+     */
+    protected int getSizeEstimate(Message msg) {
+        // now the data... I could look at the type, but
+        try {
+            CountingOutputStream outputStream = new CountingOutputStream(); 
+            
+            // the data content has two requirements we need to meet by
+            // filtering the
+            // output stream. Requirement 1 is to conicalize any line breaks.
+            // All line
+            // breaks will be transformed into properly formed CRLF sequences.
+            //
+            // Requirement 2 is to perform byte-stuff for any line that begins
+            // with a "."
+            // so that data is not confused with the end-of-data marker (a
+            // "\r\n.\r\n" sequence.
+            //
+            // The MIME output stream performs those two functions on behalf of
+            // the content
+            // writer.
+            MIMEOutputStream mimeOut = new MIMEOutputStream(outputStream);
+
+            msg.writeTo(mimeOut);
+
+            // now to finish, we make sure there's a line break at the end.  
+            mimeOut.forceTerminatingLineBreak();   
+            // and flush the data to send it along 
+            mimeOut.flush();   
+            
+            return outputStream.getCount();   
+        } catch (IOException e) {
+            return 0;     // can't get an estimate 
+        } catch (MessagingException e) {
+            return 0;     // can't get an estimate 
+        }
+    }
+    
 
     /**
      * Sends the data in the message down the socket. This presumes the server
@@ -1604,13 +1652,19 @@
         StringBuffer command = new StringBuffer();
 
         // start building up the command
-        if (sendAs8bit) {
-        }
         command.append("MAIL FROM: ");
         command.append(fixEmailAddress(from));
         if (sendAs8bit) {
             command.append(" BODY=8BITMIME"); 
         }
+        
+        // some servers ask for a size estimate on the initial send 
+        if (supportsExtension("SIZE")) {
+            int estimate = getSizeEstimate(message); 
+            if (estimate > 0) {
+                command.append(" SIZE=" + estimate); 
+            }
+        }
 
         // does this server support Delivery Status Notification? Then we may
         // need to add some extra to the command.
diff --git a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/CountingOutputStream.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/CountingOutputStream.java
new file mode 100644
index 0000000..8a772aa
--- /dev/null
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/CountingOutputStream.java
@@ -0,0 +1,60 @@
+/*
+ * 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.geronimo.javamail.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * An implementation of an OutputStream just counts
+ * the number of bytes written to the stream. 
+ * @version $Rev$ $Date$
+ */
+public class CountingOutputStream extends OutputStream {
+    // the counting accumulator 
+    int count = 0; 
+
+    // in order for this to work, we only need override the single character
+    // form, as the others
+    // funnel through this one by default.
+    public void write(int ch) throws IOException {
+        // just increment the count 
+        count++; 
+    }
+    
+    
+    /**
+     * Get the current accumulator total for this stream. 
+     * 
+     * @return The current count. 
+     */
+    public int getCount() {
+        return count; 
+    }
+    
+    
+    /**
+     * Reset the counter to zero. 
+     */
+    public void reset() {
+        count = 0; 
+    }
+}
+
