--- /dev/null
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+use Date::Parse;
+
+my $message;
+my ($fromdate, $date);
+my @messages;
+my %dates;
+
+while (<>)
+{
+ chomp;
+ if (/^From /)
+ {
+ if (defined $message)
+ {
+ push @messages, ($message);
+ $dates{$message} = defined $date ? $date : $fromdate;
+ }
+ $message = "$_\n";
+ /^From [^ ]* (.*)/;
+ $fromdate = $1;
+ $fromdate =~ s/ +/ /g;
+ $fromdate = str2time $fromdate;
+ $date = undef;
+ }
+ elsif (!(defined $date) && /^Date: (.*)/)
+ {
+ $message .= "$_\n";
+ $date = str2time $1;
+ }
+ else
+ {
+ $message .= "$_\n";
+ }
+}
+
+if (defined $message)
+{
+ push @messages, ($message);
+ $dates{$message} = defined $date ? $date : $fromdate;
+}
+
+print (sort { $dates{$a} <=> $dates{$b} } @messages);
+