GERONIMO-4135 Too many CRLF at the end of the message
Uncovered by the James test suite.
git-svn-id: https://svn.apache.org/repos/asf/geronimo/javamail/trunk@670717 13f79535-47bb-0310-9956-ffa450edef68
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 3528af7..1b7f64a 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
@@ -1438,20 +1438,20 @@
// The MIME output stream performs those two functions on behalf of
// the content
// writer.
- OutputStream mimeOut = new MIMEOutputStream(outputStream);
+ MIMEOutputStream mimeOut = new MIMEOutputStream(outputStream);
msg.writeTo(mimeOut);
- mimeOut.flush();
+
+ // now to finish, we send a CRLF sequence, followed by a ".".
+ mimeOut.writeSMTPTerminator();
+ // and flush the data to send it along
+ mimeOut.flush();
} catch (IOException e) {
throw new MessagingException(e.toString());
} catch (MessagingException e) {
throw new MessagingException(e.toString());
}
- // now to finish, we send a CRLF sequence, followed by a ".".
- sendLine("");
- sendLine(".");
-
// use a longer time out here to give the server time to process the
// data.
try {
diff --git a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/MIMEOutputStream.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/MIMEOutputStream.java
index 0409331..cd073bd 100644
--- a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/MIMEOutputStream.java
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/MIMEOutputStream.java
@@ -96,4 +96,37 @@
// remember this last one for CRLF tracking purposes.
lastWrite = ch;
}
+
+
+ /**
+ * Force the stream to be terminated at a line break.
+ * This is generally in preparation for the transport to
+ * write out an end-of-data marker, which generally
+ * needs to be preceded by a CRLF sequence.
+ *
+ * @exception IOException
+ */
+ public void forceTerminatingLineBreak() throws IOException {
+ if (!atLineBreak) {
+ out.write((byte) '\r');
+ out.write((byte) '\n');
+ // we've just taken a break;
+ atLineBreak = true;
+ }
+ }
+
+
+ /**
+ * Write out the SMTP terminator to the output stream.
+ * This ensures that we don't write out an extra
+ * CRLF if the data terminates with that value.
+ *
+ * @exception IOException
+ */
+ public void writeSMTPTerminator() throws IOException {
+ forceTerminatingLineBreak();
+ out.write('.');
+ out.write('\r');
+ out.write('\n');
+ }
}