Mutt tool: bin/abookadd.pl


#!/usr/bin/perl

################################################################################
# Script for mutt to add aliases to the mutt alias file and the abook
# addressbook at the same time.  Written by Brian Foley <brianf@maths.tcd.ie>
# If you improve/change this script, please send me a copy.
#
# To use put the following lines in your muttrc:
# macro index a "C<$TMP_FILE>\n\n!<abookadd.pl>\n" "create an alias from a message sender"
# macro pager a "C<$TMP_FILE>\n\n!<abookadd.pl>\n" "create an alias from a message sender"
#
# You must replace <$TMP_FILE> with the absolute path of the temporary file you 
# wish to use, and replace <abookadd.pl> with the absolute path of where you
# have located the abookadd.pl script
#
# You can also change the value of the $overwrite variable (default 1), this 
# will use vt100 control sequences to keep all the print statements on the same 
# line, as opposed to one under each other.  If you don't like this (or if it 
# messes up your terminal) set $overwrite to 0.
#
# This script will scan the headers for the headers "From:", "Sender:" and 
# "X-Sender:" in that order and use the first one it finds.  Addresses in the 
# following formats are allowed: "foo <foo@bar.com>", "<foo@bar.com>" and
# "foo@bar.com".
################################################################################
# Note: Patched version (by Luc Hermitte): 
# * using $ENV{HOME}
# * SIGINT intercepted for a correct terminaison
# * the alias is formatted as follow: 
#   "alias <space> {alias} <tab> {name} <space> {adress}"


################################################################################
# variables you may need to change
################################################################################
#$TMP_FILE="$ENV{HOME}/tmp/mutt";
$TMP_FILE="$ENV{HOME}/temp/mutt4abook";
$ALIAS_FILE="$ENV{HOME}/.mailrc/aliases_file";
$ABOOK_FILE="$ENV{HOME}/.mailrc/abook.addressbook";
$overwrite=1;

$SIG{INT} = sub {
    syswrite(STDERR,  "$overwrite Aborted...\n");
    `rm -f $TMP_FILE`;
    exit;
};

################################################################################
# read in the files
################################################################################
open (INPUT, "$TMP_FILE") or dienice("$!\n");
@lines = <INPUT>;
close INPUT;

open (INPUT, "$ALIAS_FILE") or dienice("$!\n");
@aliases = <INPUT>;
close INPUT;

open (INPUT, "$ABOOK_FILE") or dienice("$!\n");
@abook = <INPUT>;
close INPUT;


################################################################################
# mutt aliases stuff
################################################################################
if($overwrite){$overwrite = "^[M                                                                                \n^[M";}
else{$overwrite = "";}

foreach $line (@lines){
    if($line =~ /^From: /i){
        $fromline = $line;
        last;
    }
}
if($fromline eq ""){
    foreach $line (@lines){
        if($line =~ /^Sender: /i){
            $fromline = $line;
            last;
        }
    }
}
if($fromline eq ""){
    foreach $line (@lines){
        if($line =~ /^X-Sender: /i){
            $fromline = $line;
            last;
        }
    }
}
chomp($fromline);

print "Scanning....\n";

dienice("Could not extract senders data!\n") if($fromline eq "");

$fromline =~ s/<//i;
$fromline =~ s/>//i;
$fromline =~ /^(?:From|Sender|X-Sender):\s*((?:\S+\s+)*)((.+)\@.+)\s*$/;

dienice("Could not extract email address!\n") if(($2 eq "")||($3 eq ""));

print "$overwrite", "Alias as ($3):";    $nick = <>;    chomp ($nick);
$nick = $3 if($nick eq "");

foreach $alias (@aliases){
    if($alias =~ /^.*<.+\@.+>.*$/){
        chomp($alias);
        $alias =~ s/^alias //;
        $alias =~ s/ .*$//;
        dienice("You already have an alias defined with that name!\n") if($alias eq $nick);
    }
}


print "$overwrite", "Address ($2):";    $email = <>;    chomp ($email);
$email = $2 if($email eq "");

print "$overwrite", "Personal Name ($1):";    $name = <>;    chomp ($name);
$name = $1 if($name eq "");
while($name =~ /^\s*$/){
    print "$overwrite", "You must enter a personal name ($1):";    $name = <>;    chomp ($name);
}

$name =~ s/\s*$//;

print "$overwrite", "[$nick = $name <$email>] Accept? ([y]/n):";    $yesorno = <>;    chomp ($yesorno);
&dienice if(($yesorno ne "")&&($yesorno ne "y"));

open(SAVE,">>$ALIAS_FILE") or dienice("$!\n");
flock(SAVE,2);
seek(SAVE,0,2);
print SAVE "alias $nick $name <$email>\n";
close(SAVE);
print "$overwrite", "Alias added.\n";


################################################################################
# abook stuff
################################################################################
print "$overwrite", "Add details to abook? ([y]/n):";    $yesorno = <>;    chomp ($yesorno);
&dienice if(($yesorno ne "")&&($yesorno ne "y"));

foreach $line (@abook){
    if($line =~ /^email=.+$/){
        chomp($line);
        $line =~ s/^email=//;
        @addresses = split(/,/, $line);
        foreach $add (@addresses){
            dienice("You already have an abook entry defined with that email address!\n") if($add eq $email);
        }
    }
}

print "$overwrite", "Address:";    $address = <>;    chomp ($address);
print "$overwrite", "City:";    $city = <>;    chomp ($city);
print "$overwrite", "State:";    $state = <>;    chomp ($state);
print "$overwrite", "ZIP:";    $zip = <>;    chomp ($zip);
print "$overwrite", "Country:";    $country = <>;    chomp ($country);
print "$overwrite", "Phone:";    $phone = <>;    chomp ($phone);
print "$overwrite", "Work:";    $workphone = <>;    chomp ($workphone);
print "$overwrite", "Fax:";    $fax = <>;    chomp ($fax);
print "$overwrite", "Mobile:";    $mobile = <>;    chomp ($mobile);
print "$overwrite", "URL:";    $url = <>;    chomp ($url);
print "$overwrite", "Notes:";    $notes = <>;    chomp ($notes);

$biggest = 0;
foreach $line (@abook){
    if($line =~ /^\[.+\]$/){
        chomp($line);
        $line =~ s/\[//;
        $line =~ s/\]//;
        $biggest = $line if($line>$biggest)
    }
}
dienice("No data in file?!\n") if($biggest == 0);
$biggest++;

open(SAVE,">>$ABOOK_FILE") or dienice("$!\n");
flock(SAVE,2);
seek(SAVE,0,2);
print SAVE "[$biggest]\n";
print SAVE "name=$name\n" if($name ne "");
print SAVE "email=$email\n" if($email ne "");
print SAVE "address=$address\n" if($address ne "");
print SAVE "city=$city\n" if($city ne "");
print SAVE "state=$state\n" if($state ne "");
print SAVE "zip=$zip\n" if($zip ne "");
print SAVE "country=$country\n" if($country ne "");
print SAVE "phone=$phone\n" if($phone ne "");
print SAVE "workphone=$workphone\n" if($workphone ne "");
print SAVE "fax=$fax\n" if($fax ne "");
print SAVE "mobile=$mobile\n" if($mobile ne "");
print SAVE "nick=$nick\n" if($nick ne "");
print SAVE "url=$url\n" if($url ne "");
print SAVE "notes=$notes\n" if($notes ne "");
print SAVE "\n";
close(SAVE);

&dienice;

sub dienice {
    print "$overwrite", "@_";
    `rm -f $TMP_FILE`;
    exit;
}

Generated by vim2html.pl 3.6? on Fri Jul 16 04:50:50 2004