w.write(allHeaders);
w.write("X-IbexMail-EnvelopeFrom: " + envelopeFrom + "\r\n");
w.write("X-IbexMail-EnvelopeTo: "); for(int i=0; i<envelopeTo.length; i++) w.write(envelopeTo[i] + " "); w.write("\r\n");
- w.write("\r\n");
w.write(body);
w.flush();
}
try {
this.arrival = new Date();
this.headers = new CaseInsensitiveHash();
+ Vec envelopeToHeader = new Vec();
String key = null;
StringBuffer all = new StringBuffer();
Date date = null;
if (key.startsWith("Resent-")) {
if (key.startsWith("Resent-From")) resent.addElement(new Hashtable());
((Hashtable)resent.lastElement()).put(key.substring(7), val);
- } else if (key.startsWith("Return-Path:")) {
+ } else if (key.startsWith("Return-Path")) {
rs.pushback(s); traces.addElement(new Trace(rs));
+ } else if (key.equals("X-org.ibex.mail.headers.envelopeFrom")) {
+ if (envelopeFrom == null) envelopeFrom = new Address(val);
+ } else if (key.equals("X-org.ibex.mail.headers.envelopeTo")) {
+ if (envelopeTo == null) envelopeToHeader.addElement(new Address(val));
} else {
// just append it to the previous one; valid for Comments/Keywords
if (headers.get(key) != null) val = headers.get(key) + " " + val;
((CaseInsensitiveHash)headers).add(key, val);
}
}
+ if (envelopeTo == null) envelopeTo = new Address[envelopeToHeader.size()];
+ envelopeToHeader.copyInto(envelopeTo);
// FIXME what if all are null?
this.to = headers.get("To") == null ? envelopeTo[0] : new Address((String)headers.get("To"));
this.envelopeFrom = envelopeFrom == null ? this.from : envelopeFrom;
this.envelopeTo = envelopeTo == null ? new Address[] { this.to } : envelopeTo;
- this.date = (Date)headers.get("Date");
+ this.date = new Date(); // FIXME (Date)headers.get("Date");
this.replyto = headers.get("Reply-To") == null ? null : new Address((String)headers.get("Reply-To"));
this.subject = (String)headers.get("Subject");
this.messageid = (String)headers.get("Message-Id");
Token[] tl = null;
int start = -1, end = -1;
boolean peek = false, fast = false, all = false, full = false;
- if (t.type == Token.LIST) tl = t.l();
+ if (t == null) { tl = new Token[] { new Token("BODY", false) }; }
+ else if (t.type == Token.LIST) tl = t.l();
else if (t.atom().equals("FULL")) full = true;
else if (t.atom().equals("ALL")) all = true;
else if (t.atom().equals("FAST")) fast = true;