GERONIMO-6547 ensure smtp socket accesses are appropriate even for bad servers
git-svn-id: https://svn.apache.org/repos/asf/geronimo/javamail/trunk@1704974 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/SMTPConnection.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPConnection.java
index aa21a6a..2dbba7e 100644
--- a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPConnection.java
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/transport/smtp/SMTPConnection.java
@@ -542,6 +542,7 @@
mimeOut.writeSMTPTerminator();
// and flush the data to send it along
mimeOut.flush();
+ this.outputStream.flush(); // most of the time MIMEOutputStream#flush does nothing so ensure we actually flush the data
} catch (IOException e) {
throw new MessagingException(e.toString());
} catch (MessagingException e) {
@@ -667,10 +668,8 @@
if (socket == null || !socket.isConnected()) {
throw new MessagingException("no connection");
}
- try {
- outputStream.write(data.getBytes("ISO8859-1"));
- outputStream.write(CR);
- outputStream.write(LF);
+ try { // don't write it in multiple times, ie build the data + "\r\n" string in memory to not get surprises on servers read() side
+ outputStream.write((data + "\r\n").getBytes("ISO8859-1"));
outputStream.flush();
} catch (IOException e) {
throw new MessagingException(e.toString());
diff --git a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceInputStream.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceInputStream.java
index 037585f..8465fed 100644
--- a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceInputStream.java
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceInputStream.java
@@ -99,4 +99,12 @@
}
return b;
}
+
+ public int read(byte[] b) throws IOException {
+ final int read = in.read(b);
+ if (debug && read > 0) {
+ traceStream.write(b, 0, read);
+ }
+ return read;
+ }
}
diff --git a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceOutputStream.java b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceOutputStream.java
index 57ce0d4..7910626 100644
--- a/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceOutputStream.java
+++ b/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/util/TraceOutputStream.java
@@ -80,4 +80,18 @@
}
super.write(b);
}
+
+ public void write(byte[] b, int off, int len) throws IOException {
+ if (this.debug) {
+ this.traceStream.write(b, off, len);
+ }
+ out.write(b, off, len);
+ }
+
+ public void write(byte[] b) throws IOException {
+ if (this.debug) {
+ this.traceStream.write(b);
+ }
+ out.write(b);
+ }
}