From 866504299bfc44999e6cbb6c518a431d59908e65 Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 8 Jul 2007 22:51:55 +0000 Subject: [PATCH] synthesize messageids when necessary darcs-hash:20070708225155-5007d-a345fe9b3b933bff33a2887cef5a815fdf2b48a4.gz --- src/org/ibex/mail/Message.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/org/ibex/mail/Message.java b/src/org/ibex/mail/Message.java index cb43039..73ab0f8 100644 --- a/src/org/ibex/mail/Message.java +++ b/src/org/ibex/mail/Message.java @@ -71,15 +71,24 @@ public class Message extends MIME.Part { this.from = headers.get("From") != null ? Address.parse(headers.get("From")) : this.envelopeFrom; this.replyto = headers.get("Reply-To") == null ? null : Address.parse(headers.get("Reply-To")); this.subject = headers.get("Subject"); - this.messageid = headers.get("Message-Id"); + String messageid = headers.get("Message-Id"); this.cc = Address.list(headers.get("Cc")); this.bcc = Address.list(headers.get("Bcc")); Date date = RobustDateParser.parseDate(headers.get("Date")); this.date = date==null ? new Date() : date; this.arrival = this.date; // FIXME wrong: should grab this from traces, I think? - if (this.messageid == null) - throw new RuntimeException("every RFC2822 message must have a Message-ID: header"); + if (messageid == null) { + SHA1 sha1 = new SHA1(); + Stream s = this.getStream(); + s.setInputDigest(sha1); + s.transcribe(new Stream(new NullOutputStream())); + byte[] end = new byte[sha1.getDigestSize()]; + sha1.doFinal(end, 0); + messageid = ""; + Log.info(this, "synthesized messageid " + messageid); + } + this.messageid = messageid; } -- 1.7.10.4