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]