X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMessage.java;h=9d91a18304ee32fae234e3f434fb147bf4619229;hb=2a1d65e90e0dbae298a366fdf865b0025d7b15ed;hp=bc8cfdf0a3e56681b1072c13f5279bb5a390ed37;hpb=49050475c3966ef0ed33e8e7ed6c50301c49d477;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Message.java b/src/org/ibex/mail/Message.java index bc8cfdf..9d91a18 100644 --- a/src/org/ibex/mail/Message.java +++ b/src/org/ibex/mail/Message.java @@ -13,8 +13,9 @@ import java.util.*; import java.net.*; import java.io.*; -// FIXME: messages must NEVER contain 8-bit binary data; this is a violation of IMAP -// FIXME: RFC822 1,000-char limit per line [soft line limit (suggested): 78 chars / hard line limit: 998 chars] +// FIXME: body constraints (how to enforce?) +// - messages must NEVER contain 8-bit binary data; this is a violation of IMAP +// - RFC822 1,000-char limit per line [soft line limit (suggested): 78 chars / hard line limit: 998 chars] // FEATURE: PGP-signature-parsing // FEATURE: mailing list header parsing (?) @@ -43,12 +44,13 @@ public class Message extends MIME.Part { public static Message newMessage(Fountain in) throws Malformed { return new Message(in); } + /* public Message reply(Fountain in, Address from, boolean includeReInSubject) throws Malformed { - /* Address to = null; if (to==null) to = Address.parse(headers.get("reply-to")); if (to==null) to = Address.parse(headers.get("from")); if (to==null) to = envelopeFrom; + if (to==null) throw new Malformed("cannot reply to a message without a return address"); Message ret = newMessage(in, from, to); ret.headers.put("In-Reply-To", messageid); String references = headers.get("references"); @@ -56,10 +58,8 @@ public class Message extends MIME.Part { if (includeReInSubject && subject!=null && !subject.toLowerCase().trim().startsWith("re:")) headers.put("subject", "Re: "+subject); return ret; - */ - // FIXME - return null; } + */ // FIXME //public static Message newMessage(Headers headers, Fountain body, Address from, Address to) throws Malformed { @@ -133,6 +133,7 @@ public class Message extends MIME.Part { } */ + // Helpers ///////////////////////////////////////////////////////////////////////////// // http://www.jwz.org/doc/mid.html @@ -162,8 +163,7 @@ public class Message extends MIME.Part { if (envelopeFrom==null || envelopeFrom.toString().equals("")) return null; Log.warn(Message.class, "bouncing message due to: " + reason); - Headers h = new Headers.Original(headers.getStream()); - h = h.set(new String[] { + Headers h = new Headers(headers, new String[] { "Envelope-To", envelopeFrom.toString(), "Return-Path", "<>", "From", "MAILER-DAEMON <>", @@ -172,6 +172,7 @@ public class Message extends MIME.Part { }); String error = + "\r\n"+ "Hi. This is the Ibex Mail Server. I'm afraid I wasn't able to deliver\r\n"+ "your message to the following addresses. This is a permanent error;\r\n"+ "I've given up. Sorry it didn't work out\r\n."+ @@ -183,7 +184,7 @@ public class Message extends MIME.Part { "\r\n"; try { - return newMessage(new Fountain.Concatenate(new Fountain.StringFountain(h.getString()+"\r\n"+error), getBody())); + return newMessage(Fountain.Util.concat(h, Fountain.Util.create(error), getBody())); } catch (Message.Malformed e) { Log.error(this, "caught Message.Malformed in Message.bounce(); this should never happen"); Log.error(this, e);