mhonarc-users

[PATCH] Address kerflundering

1999-06-11 15:00:34


I recieved the following patch to MHonArc after offering a small
bounty at the Free Software Bazaar. Overall, I got two offers to do
the patch within a week of the offer being posted. I'm impressed. This
patch was written by Alexis Mikhailov.

Jeff

------------------------

Alexis Mikhailov <root(_at_)medinf(_dot_)chuvashia(_dot_)su> writes:

Hello Jeff!

Here is a patch against version 2.3.3 of MHonArc. I've checked it to some
extent.

Alexis


diff -ru MHonArc2.3.3/lib/mhamain.pl MH/lib/mhamain.pl
--- MHonArc2.3.3/lib/mhamain.pl Sun Nov  8 21:06:23 1998
+++ MH/lib/mhamain.pl   Fri Jun 11 17:18:44 1999
@@ -238,7 +238,8 @@
 
     ## Get here, we are processing mail folders
 
-    local($mesg, $tmp, $index, $sub, $from, $i, $date, $fh);
+    local($mesg, $tmp, $index, $sub, $from, $i, $date, $fh ,$fromaddrname,
+       $fromaddrdomain);
     local(%fields);
 
     $i = $NumOfMsgs;
@@ -255,7 +256,7 @@
        $handle = $ADD;
 
        ## Read mail head
-       ($index,$from,$date,$sub,$header) =
+       ($index,$from,$date,$sub,$header,$fromaddrname,$fromaddrdomain) =
            &read_mail_header($handle, *mesg, *fields);
 
        if ($index ne '') {
@@ -303,7 +304,7 @@
                    }
                    print STDOUT "."  unless $QUIET;
                    $mesg = '';
-                   ($index,$from,$date,$sub,$header) =
+                   
($index,$from,$date,$sub,$header,$fromaddrname,$fromaddrdomain) =
                        &read_mail_header($fh, *mesg, *fields);
 
                    #  Process message if valid
@@ -347,7 +348,7 @@
                MBOX: while (!eof($fh)) {
                    print STDOUT "."  unless $QUIET;
                    $mesg = '';
-                   ($index,$from,$date,$sub,$header) =
+                   
($index,$from,$date,$sub,$header,$fromaddrname,$fromaddrdomain) =
                        &read_mail_header($fh, *mesg, *fields);
 
                    if ($index ne '') {
@@ -667,6 +668,23 @@
     print STDOUT "\n"  unless $QUIET;
 }
 
+sub split_address {
+    local($from) = @_;
+    local($fromaddrname, $fromaddrdomain);
+    local(@machines);
+
+    $from =~ s/^.*\<(.*)\>.*$/$1/;
+    $from =~ s/\(.*\)//;
+    $from =~ s/^\s+//;
+    $from =~ s/\s+$//;
+
+    @machines = split /\!/, $from;
+    if ($machines[-1] =~ /[(_at_)%]/)
+    {
+       return split /[(_at_)%]/, $machines[-1];
+    }
+    return ($machines[-1], $machines[-2]);
+}
 ##---------------------------------------------------------------------------
 ##     read_mail_header() is responsible for parsing the header of
 ##     a mail message.
@@ -674,7 +692,7 @@
 sub read_mail_header {
     local($handle, *mesg, *fields) = @_;
     my(%l2o, $header, $index, $date, $tmp, @refs, @array);
-    local($from, $sub, $msgid);
+    local($from, $sub, $msgid, $fromaddrname, $fromaddrdomain);
     local($_);
 
     $header = &readmail::MAILread_file_header($handle, *fields, *l2o);
@@ -759,6 +777,7 @@
     foreach (@FromFields) {
        next  unless $fields{$_};
        $from = $fields{$_};
+       ($fromaddrname, $fromaddrdomain) = split_address($from);
        last;
     }
     $from = 'No Author'  unless $from;
@@ -802,7 +821,7 @@
     &remove_dups(*refs);                # Remove duplicate msg-ids
     $Refs{$index} = join($X, @refs)  if (@refs);
 
-    ($index,$from,$date,$sub,$header);
+    ($index,$from,$date,$sub,$header,$fromaddrname,$fromaddrdomain);
 }
 
 ##---------------------------------------------------------------------------
diff -ru MHonArc2.3.3/lib/mhrcvars.pl MH/lib/mhrcvars.pl
--- MHonArc2.3.3/lib/mhrcvars.pl        Sun Nov  8 21:06:23 1998
+++ MH/lib/mhrcvars.pl  Fri Jun 11 17:12:21 1999
@@ -139,13 +139,17 @@
                        "";
            last REPLACESW;
        }
-       my($cnd1, $cnd2, $cnd3) = (0,0,0);
+       my($cnd1, $cnd2, $cnd3, $cnd4, $cnd5) = (0,0,0,0,0);
        if (($cnd1 = ($var eq 'FROM')) ||       ## Message "From:"
            ($cnd2 = ($var eq 'FROMADDR')) ||   ## Message from mail address
-           ($cnd3 = ($var eq 'FROMNAME'))) {   ## Message from name
+           ($cnd3 = ($var eq 'FROMNAME')) ||   ## Message from name
+           ($cnd4 = ($var eq 'FROMADDRNAME')) || ## Message from user name
+           ($cnd5 = ($var eq 'FROMADDRDOMAIN'))) { ## Message from domain
            my $esub = $cnd1 ? sub { $_[0]; } :
                       $cnd2 ? \&extract_email_address :
-                              \&extract_email_name;
+                      $cnd3 ? \&extract_email_name :
+                      $cnd4 ? \&extract_email_addr_name :
+                              \&extract_email_addr_domain;
            $canclip = 1; $raw = 1;
            ($lref, $key, $pos) = compute_msg_pos($index, $var, $arg);
            $tmp = defined($key) ? &$esub($From{$key}) : "(nil)";
diff -ru MHonArc2.3.3/lib/mhutil.pl MH/lib/mhutil.pl
--- MHonArc2.3.3/lib/mhutil.pl  Sat Oct  3 23:07:54 1998
+++ MH/lib/mhutil.pl    Fri Jun 11 17:12:42 1999
@@ -44,6 +44,28 @@
     $ret;
 }
 
+sub extract_email_addr_name {
+    local($str) = extract_email_address(shift);
+    local($ret);
+    local(@tmp) = split /\!/, $str;
+    if ($tmp[-1] =~ /[(_at_)%]/)
+    {
+        return (split /[(_at_)%]/, $tmp[-1])[0];
+    }
+    return $tmp[-1];
+}
+
+sub extract_email_addr_domain {
+    local($str) = extract_email_address(shift);
+    local($ret);
+    local(@tmp) = split /\!/, $str;
+    if ($tmp[-1] =~ /[(_at_)%]/)
+    {
+        return (split /[(_at_)%]/, $tmp[-1])[1];
+    }
+    return $tmp[-2];
+}
+
 ##---------------------------------------------------------------------------
 ##     Get an e-mail name from $str.
 ##
@@ -386,7 +408,8 @@
 }
 
 ##---------------------------------------------------------------------------
-##     $sub, $msgid, $from come from read_mail_header() (ugly!!!!)
+##     $sub, $msgid, $from, $fromaddrname, $fromaddrdomain come from
+##           read_mail_header() (ugly!!!!)
 ##
 sub mailUrl {
     my($eaddr) = shift;
@@ -394,6 +417,8 @@
     my($url) = ($MAILTOURL);
     my($to) = (&urlize($eaddr));
     my($froml, $msgidl) = (&urlize($from), &urlize($msgid));
+    my($fromaddrnamel, $fromaddrdomainl) = (&urlize($fromaddrname),
+                                           &urlize($fromaddrdomain));
     my($fromaddrl) = (&urlize(&extract_email_address($from)));
     my($subjectl);
 
@@ -404,7 +429,9 @@
        $subjectl = &urlize($sub);
     }
     $url =~ s/\$FROM\$/$froml/g;
-    $url =~ s/\$FROMADDR\$/$froml/g;
+    $url =~ s/\$FROMADDRNAME\$/$fromaddrnamel/g;
+    $url =~ s/\$FROMADDRDOMAIN\$/$fromaddrdomainl/g;
+    $url =~ s/\$FROMADDR\$/$fromaddrl/g;
     $url =~ s/\$MSGID\$/$msgidl/g;
     $url =~ s/\$SUBJECT\$/$subjectl/g;
     $url =~ s/\$SUBJECTNA\$/$subjectl/g;

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] Address kerflundering, Jeff Breidenbach <=