Please create a Bugzilla issue for this and attach a patch file.
Erik
On Saturday, August 2, 2003, at 03:30 PM, Michael Davey wrote:
Hello,
Here is a patch for org/tools/mail/MailMessage.java that adds the following:
* Support for message encoding (alphabets)
* Fixes to headers for when an optional header hasn't been set (used to send blank headers) (we should check that at least one header from the set: to, cc, bcc, resent-to, resent-cc, resent-bcc exists - but don't at the moment)
* changes to some comments
-- Michael
Index: ant/src/main/org/apache/tools/mail/MailMessage.java
===================================================================
RCS file: /home/cvspublic/ant/src/main/org/apache/tools/mail/MailMessage.java,v
retrieving revision 1.17
diff -u -r1.17 MailMessage.java
--- ant/src/main/org/apache/tools/mail/MailMessage.java 19 Jul 2003 11:20:23 -0000 1.17
+++ ant/src/main/org/apache/tools/mail/MailMessage.java 2 Aug 2003 17:40:03 -0000
@@ -66,6 +66,7 @@
import java.io.PrintStream;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.InetAddress;
import java.util.Vector;
@@ -131,9 +132,15 @@
*/
public class MailMessage {
+ /** default mailhost */ + public static final String DEFAULT_HOST = "localhost"; + /** default port for SMTP: 25 */ public static final int DEFAULT_PORT = 25;
+ /** default encoding: iso-8859-1 */ + public static final String DEFAULT_ENCODING = "iso-8859-1"; + /** host name for the mail server */ private String host;
@@ -161,6 +168,8 @@
private Socket socket;
+ private String encoding;
+
/**
* Constructs a new MailMessage to send an email.
* Use localhost as the mail server with port 25.
@@ -168,7 +177,7 @@
* @exception IOException if there's any problem contacting the mail server
*/
public MailMessage() throws IOException {
- this("localhost", DEFAULT_PORT);
+ this(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_ENCODING);
}
/**
@@ -179,7 +188,7 @@
* @exception IOException if there's any problem contacting the mail server
*/
public MailMessage(String host) throws IOException {
- this(host, DEFAULT_PORT);
+ this(host, DEFAULT_PORT, DEFAULT_ENCODING);
}
/**
@@ -191,8 +200,14 @@
* @exception IOException if there's any problem contacting the mail server
*/
public MailMessage(String host, int port) throws IOException {
+ this(host, port, DEFAULT_ENCODING);
+ }
+
+ public MailMessage(String host, int port, String encoding)
+ throws IOException, UnsupportedEncodingException {
this.port = port;
this.host = host;
+ this.encoding = encoding;
replyto = new Vector();
to = new Vector();
cc = new Vector();
@@ -299,19 +314,30 @@
return out;
}
+ + // RFC 822 s4.1: "From:" header must be sent + // We rely on error checking by the MTA void setFromHeader() { setHeader("From", from); }
+ // RFC 822 s4.1: "Reply-To:" header is optional void setReplyToHeader() { + if ( ! replyto.isEmpty() ) { setHeader("Reply-To", vectorToList(replyto)); + } } + void setToHeader() { - setHeader("To", vectorToList(to)); + if ( ! to.isEmpty() ) { + setHeader("To", vectorToList(to)); + } }
void setCcHeader() { - setHeader("Cc", vectorToList(cc)); + if ( ! cc.isEmpty() ) { + setHeader("Cc", vectorToList(cc)); + } }
String vectorToList(Vector v) { @@ -327,7 +353,10 @@ }
void flushHeaders() throws IOException {
- // XXX Should I care about order here?
+ // RFC 822 s4.1:
+ // "Header fields are NOT required to occur in any particular order,
+ // except that the message body MUST occur AFTER the headers"
+ // (the same section specifies a reccommended order, which we ignore)
Enumeration e = headers.keys();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
@@ -389,11 +418,12 @@
// * * * * * Raw protocol methods below here * * * * *
- void connect() throws IOException { + void connect() throws IOException, UnsupportedEncodingException { socket = new Socket(host, port); out = new MailPrintStream( new BufferedOutputStream( - socket.getOutputStream())); + socket.getOutputStream()), + encoding); in = new SmtpResponseReader(socket.getInputStream()); getReady(); } @@ -493,6 +523,12 @@ super(out, true); // deprecated, but email is byte-oriented }
+ public MailPrintStream(OutputStream out, String encoding)
+ throws UnsupportedEncodingException
+ {
+ super(out, true, encoding); // deprecated, but email is byte-oriented
+ }
+
// Mac does \n\r, but that's tough to distinguish from Windows \r\n\r\n.
// Don't tackle that problem right now.
public void write(int b) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
