Hi Jeff,

I'm sorry you had problems with my previous date code - hope it hasn't
caused you much grief.  I just didn't realise there were mail clients out
there which produced malformed date strings (well, ones that date(1) can't
read at least).

The last patch to mailme I sent was (again) incorrect as it didn't
take care of multiple Received: lines, and the junk on a Received line
before the semicolon.  I've attached a patch (again from your original
source) which deals with this (it uses the top Received: line which I think
is safest), and also skips the date code completely unless it's a monthly
list, just so that any problems don't affect non-monthly lists at all.  But
providing x-archive-with-list is formatted ok, or Received:  lines are
sensible (which come from your server so they are), malformed dates
hopefully should be a thing of the past.

With regard to attachments: I copied over your own MIMEargs (just added a
"target="), and I've gone back and regenerated my archives here with your
rcfile alone: and yes, I think it's with text/plain attachments that the
msg* subdirectory gets created.  I don't know why they don't tack
.dir on the end for these attachments, at least here, but I'm sure
it's not a worry.

Paul
--- mailme.jeff Mon Sep  6 21:17:09 1999
+++ mailme      Mon Sep  6 21:01:19 1999
@@ -103,6 +103,25 @@
     } '
 }
 
+# Special case of grab() for Received: lines
+# This is because we want to take first occurrence
+# Example usage: cat messageheaders | receiveme
+receiveme() {
+    $NAWK '
+    BEGIN {
+        m = "^Received:"
+    }
+    {
+        if (match($0, m)) {
+            print $0
+            getline
+            while ( $0 ~ /^[ \t]+/) {
+                print $0; getline
+            }
+        }
+    } '
+}
+
 # Get all email addresses, and precede them with a carat.
 # Example usage: cat RMAIL | waterfall
 waterfall () {
@@ -318,10 +337,6 @@
 X13=`echo "$T" | grab "mailing-list"` #use later
 X14=`echo "$T" | grab "list-post"`
 
-# If indexing by month, we care about the date
-DATE=`echo "$T" | grab "date"`
-JUSTDATE=`echo $DATE | sed 's/^date: //i'`
-
 # Extract email addresses
 CHANCE=$(echo $TO $CC $X1 $X2 $X3 $X4 $X5 $X6 $X7 $X8 $X9 $X10 $X11 $X14 |\
     waterfall)
@@ -453,6 +468,29 @@
 MONFLAG=$HOME/vault/$ESCAPED_NAME/monthly
 if [ -f $MONFLAG ]
 then
+
+# If indexing by month, we care about the date
+# If importing, see if x-archive-with-date is set first.
+# Use "Date:" as last resort because of mis-set clocks.
+       XDATE=`echo "$T" | grab "x-archive-with-date"`
+       [ ! "$XDATE" ] && XDATE=`echo "$T" | receiveme`
+       [ ! "$XDATE" ] && XDATE=`echo "$T" | grab "date"`
+       if [ ! "$XDATE" ]
+       then
+               emergency_divert NODATE "Unable to find any date field."
+               exit -1
+       fi
+       JUSTDATE=`echo "$XDATE" | sed -e 's/^date: //i' \
+                                      -e 's/^x-archive-with-date: //i' \
+                                      -e 's/^received:.*; //i'`
+       date -d "$JUSTDATE" > /dev/null 2>&1
+       ex=$?
+       if [ "$ex" != "0" ]
+       then
+               emergency_divert NODATE "Unable to find valid date field."
+               exit -1
+       fi
+
         echok info "Now switching to monthly indexing"
         YYYYMM=`date -d "$JUSTDATE" +"%Y-month-%m"`
         MONBEG=`date -d "$JUSTDATE" +"%m/01/%Y:00:00:00.00"`

Reply via email to