OVH Cloud OVH Cloud

aide pour le script abookadd.pl

10 réponses
Avatar
Zigomaths
Bonjour,

Tout d'abord je précise que je ne suis absolument pas programmeur mais
j'utilise un script abbokadd.pl qui est (amha) bien pratique pour
gérer les adresses sous mutt.

Malheureusement ce script ne fonctionne qu'avec le format mbox de mutt
et moi je suis en maildir...

Voici le début du script qui pose (enfin je pense) problème :
,----
| #!/usr/bin/perl
| $TMP_FILE="/tmp/abooktmp";
| $ALIAS_FILE="/home/phi/.mutt/.mail-aliases";
| $ABOOK_FILE="/home/phi/.abook/addressbook";
| $overwrite=1;
`----

"/tmp/abooktmp" est le fichier temporaire (créé par /usr/bin/abook)
sur lequel abooadd.pl travaille. "/tmp/abooktmp" est un fichier au
format mbox.

Mais quand mutt est configuré en maildir abookadd.pl ne trouve pas le
fichier "/tmp/abooktmp" auquel il s'attend (en format mbox donc) mais
/tmp/abooktmp/cur/1068562926.24379_4.serveur:2,S (en format maildir)

Donc la question est :

comment modifier le sript perl abbokadd.pl pour que dans la variable
TMP il y ai "/tmp/abooktmp/cur/1068562926.24379_4.serveur:2,S" qui est
un nom de fichier *variable* et non pas "/tmp/abooktmp" qui lui est
*fixe* ?

merci
--
Philippe Monroux
Ile de la Reunion
E 55.3 S 21.5

10 réponses

Avatar
dominix
Zigomaths wrote:
Bonjour,


Salut Zigo


Tout d'abord je précise que je ne suis absolument pas programmeur mais
j'utilise un script abbokadd.pl qui est (amha) bien pratique pour
gérer les adresses sous mutt.

Malheureusement ce script ne fonctionne qu'avec le format mbox de mutt
et moi je suis en maildir...

Voici le début du script qui pose (enfin je pense) problème :
,----
#!/usr/bin/perl
$TMP_FILE="/tmp/abooktmp";
$ALIAS_FILE="/home/phi/.mutt/.mail-aliases";
$ABOOK_FILE="/home/phi/.abook/addressbook";
$overwrite=1;
`----


"/tmp/abooktmp" est le fichier temporaire (créé par /usr/bin/abook)
sur lequel abooadd.pl travaille. "/tmp/abooktmp" est un fichier au
format mbox.

Mais quand mutt est configuré en maildir abookadd.pl ne trouve pas le
fichier "/tmp/abooktmp" auquel il s'attend (en format mbox donc) mais
/tmp/abooktmp/cur/1068562926.24379_4.serveur:2,S (en format maildir)

Donc la question est :

comment modifier le sript perl abbokadd.pl pour que dans la variable
TMP il y ai "/tmp/abooktmp/cur/1068562926.24379_4.serveur:2,S" qui est
un nom de fichier *variable* et non pas "/tmp/abooktmp" qui lui est
*fixe* ?

merci


de ce que je vois il n'est pas vraiment question de Perl mais de Mutt
peux etre y a t'il moyen de dire a mutt d'enregistrer ces fichiers
temporaire d'une autre façon ? tu devrais demander sur fr.comp.mail
si toutefois tu ne cherche qu'a manipuler des messages au format
maildir au lieux de mbox je pense que toute la magie est dans l'usage
de Mail::Box::Maildir au lieux de Mail::Box::Mbox mais là j'invente
un peu car je ne sais pas si ton script utilise ces modules (vu que
tu ne nous l'a pas encore montré ce script ... ;-) )


--
dominix
Ile de Tahiti
W 155 S 17


Avatar
Zigomaths
Le Tue, 11 Nov 2003 21:47:12 -1000,
Dans le forum fr.comp.lang.perl,

Tout d'abord je précise que je ne suis absolument pas programmeur
mais j'utilise un script abbokadd.pl qui est (amha) bien pratique
pour gérer les adresses sous mutt. [bla]


de ce que je vois il n'est pas vraiment question de Perl mais de
Mutt peux etre y a t'il moyen de dire a mutt d'enregistrer ces
fichiers temporaire d'une autre façon ?


Je ne pense pas que ce soit mutt qui enregistre sous "/tmp/abooktmp"
mais abook. abookadd est un script qui étend un peu les possibilités
d'abook.

tu devrais demander sur fr.comp.mail si toutefois tu ne cherche qu'a
manipuler des messages au format maildir au lieux de mbox je pense
que toute la magie est dans l'usage de Mail::Box::Maildir au lieux
de Mail::Box::Mbox mais là j'invente un peu car je ne sais pas si
ton script utilise ces modules (vu que tu ne nous l'a pas encore
montré ce script ... ;-) )


le voilà :

#!/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
# 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>nn!<abookadd.pl>n" "create an alias
#from a message sender"
# macro pager a "C<$TMP_FILE>nn!<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 ", "" and
# "".
################################################################################


################################################################################
# variables you may need to change
################################################################################
$TMP_FILE="/tmp/abooktmp";
$ALIAS_FILE="/home/phi/.mutt/.mail-aliases";
$ABOOK_FILE="/home/phi/.abook/addressbook";
$overwrite=1;


################################################################################
# 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 nM";}
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=$namen" if($name ne "");
print SAVE "email=$emailn" if($email ne "");
print SAVE "address=$addressn" if($address ne "");
print SAVE "city=$cityn" if($city ne "");
print SAVE "state=$staten" if($state ne "");
print SAVE "zip=$zipn" if($zip ne "");
print SAVE "country=$countryn" if($country ne "");
print SAVE "phone=$phonen" if($phone ne "");
print SAVE "workphone=$workphonen" if($workphone ne "");
print SAVE "fax=$faxn" if($fax ne "");
print SAVE "mobile=$mobilen" if($mobile ne "");
print SAVE "nick=$nickn" if($nick ne "");
print SAVE "url=$urln" if($url ne "");
print SAVE "notes=$notesn" if($notes ne "");
print SAVE "n";
close(SAVE);

&dienice;

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

--
ph


Avatar
dominix
Zigomaths wrote:

...


ok maintenant je comprend mieux.

Donc la question est :

comment modifier le sript perl abbokadd.pl pour que dans la variable
TMP il y ai "/tmp/abooktmp/cur/1068562926.24379_4.serveur:2,S" qui est
un nom de fichier variable et non pas "/tmp/abooktmp" qui lui est
fixe ?



############################################################################

####
# variables you may need to change

############################################################################

####
$TMP_FILE="/tmp/abooktmp";


essaye de façon empirique ...
$TMP_FILE=`ls -tr /tmp/abooktmp/cur|tail -1`;
chomp($TMP_FILE);

désolé c'est pas trés perlish mais ça devrait fonctionner ;-)

--
dominix

Avatar
Zigomaths
Le Wed, 12 Nov 2003 19:09:27 -1000,
Dans le forum fr.comp.lang.perl,

############################################################################
####
# variables you may need to change

############################################################################

####
$TMP_FILE="/tmp/abooktmp";


essaye de façon empirique ...
$TMP_FILE=`ls -tr /tmp/abooktmp/cur|tail -1`;
chomp($TMP_FILE);


Ben non ça ne marche pas. Voici le message :

1Aucun fichier ou répertoire de ce type

des fois c'est :

0Aucun fichier ou répertoire de ce type

pourtant ds xterm
ls -tr /tmp/abooktmp/cur|tail -1 me retourne le bon fichier...

--
Salut ma colère,
Bonjour ma hargne,
Mon courroux coucou !
Desproge Pierre


Avatar
dominix
Zigomaths wrote:
Le Wed, 12 Nov 2003 19:09:27 -1000,
Dans le forum fr.comp.lang.perl,


############################################################################


####
# variables you may need to change



############################################################################


####
$TMP_FILE="/tmp/abooktmp";


essaye de façon empirique ...
$TMP_FILE=`ls -tr /tmp/abooktmp/cur|tail -1`;
chomp($TMP_FILE);


Ben non ça ne marche pas. Voici le message :

1Aucun fichier ou répertoire de ce type

des fois c'est :

0Aucun fichier ou répertoire de ce type

pourtant ds xterm
ls -tr /tmp/abooktmp/cur|tail -1 me retourne le bon fichier...


et qu'y a t'il dans $TMP_FILE ?
ajoute donc un
print $TMP_FILE . " manquen" unless -f $TMP_FILE ;
print $ALIAS_FILE . " manquen" unless -f $ALIAS_FILE ;
print $ABOOK_FILE . " manquen" unless -f $ABOOK_FILE ;

pour avoir un peu de trace juste apres les declarations ...

--
dominix



Avatar
Zigomaths
Le 12 Nov 2003 02:43:25 GMT,
Dans le forum fr.comp.lang.perl,

J'ai encore oublié une petite précision.

dans mon .muttrc du temps où j'étais en mboxe abookadd était appelé de
cette manière :

macro index A "C/tmp/abooktmpnn!/home/phi/bin/abookadd.pln" "create
an alias from a message sender"
macro pager A "C/tmp/abooktmpnn!/home/phi/bin/abookadd.pln" "create
an alias from a message sender"

cela donne -t-il une indication ?
--
Philippe
Avatar
Zigomaths
Le Thu, 13 Nov 2003 19:11:26 -1000,
Dans le forum fr.comp.lang.perl,

et qu'y a t'il dans $TMP_FILE ?
ajoute donc un
print $TMP_FILE . " manquen" unless -f $TMP_FILE ;
print $ALIAS_FILE . " manquen" unless -f $ALIAS_FILE ;
print $ABOOK_FILE . " manquen" unless -f $ABOOK_FILE ;
pour avoir un peu de trace juste apres les declarations ...


Bon en désespoir de cause j'ai mis :

macro index A "<enter-command>set
mbox_type=mboxn<copy-message>/tmp/abooktmpnn!/home/phi/bin/abookadd.pln
<enter-command>set mbox_type=maildirn"

En tout cas ça marche. C'est pas très beau mais bon ...

--
Philippe Monroux
Ile de la Reunion
E 55.3 S 21.5

Avatar
dominix
Zigomaths wrote:
Le Thu, 13 Nov 2003 19:11:26 -1000,
Dans le forum fr.comp.lang.perl,

et qu'y a t'il dans $TMP_FILE ?
ajoute donc un
print $TMP_FILE . " manquen" unless -f $TMP_FILE ;
print $ALIAS_FILE . " manquen" unless -f $ALIAS_FILE ;
print $ABOOK_FILE . " manquen" unless -f $ABOOK_FILE ;
pour avoir un peu de trace juste apres les declarations ...


Bon en désespoir de cause j'ai mis :

macro index A "<enter-command>set

mbox_type=mboxn<copy-message>/tmp/abooktmpnn!/home/phi/bin/abookadd.pln

<enter-command>set mbox_type=maildirn"

En tout cas ça marche. C'est pas très beau mais bon ...


je ne comprend pas pourquoi tu abdique.
qu'est ce que donne l'execution des lignes precedement suggere ?
car c'est la le seul probleme, vu que ce script permet de retrouver
l'adresse de l'emeteur d'un message. il suffit de s'assurer qu'il
retrouve bien le dit message.

--
dominix


Avatar
Zigomaths
Le Sat, 15 Nov 2003 11:32:49 -1000,
Dans le forum fr.comp.lang.perl,

je ne comprend pas pourquoi tu abdique.
qu'est ce que donne l'execution des lignes precedement suggere ?
car c'est la le seul probleme, vu que ce script permet de retrouver
l'adresse de l'emeteur d'un message. il suffit de s'assurer qu'il
retrouve bien le dit message.


Non je n'abdique pas. Des petites idées :

abookadd ne trouvait pas le fichier car, suivant que le fichier était
lu ou pas (dans mutt) il était stocké dans /tmp/abooktmp/cur (si lu)
ou /tmp/abooktmp/new (si pas lu). Donc il ne le trouvait pas. Comme
solution je crois qu'il faut mettre la macro :

,----
| macro pager A "C/tmp/abooktmpnn!/home/phi/bin/abookadd.pln" "create
| an alias from a message sender"
`----


*uniquement* dans pager (comme ça au moment du lancement de
abbokadd.pl le message est oligatoirment placé ds/tmp/abooktmp/cur )

Ceci étant acquis il y a un autre pb. Dans abookadd.pl :

$TMP_FILE=`ls -tr /tmp/abooktmp/cur | tail -1`;

ne peut pas convenir. Il faut ajouter "/tmp/abooktmp/" *avant* le
résultat de `ls -tr /tmp/abooktmp/cur | tail -1` de manière à ce qu'il
y ait le nom du fichier en absolu dans TMP_FILE. Et avec tout cela je
crois que ça va marcher. Mais je ne sais pas comment on fait pour
ajouter ce path avant le nom du fichier...

Maintenant la solution qui consite à changer le format en maibox (et à
sauver ds /tmp/abooktmp) à l'avantage de pouvoir fonctionner à la fois
si le message à été lu ou pas. Donc ça n'est pas une si mauvaise
solution que cela.

Avatar
dominix
Zigomaths wrote:
Le Sat, 15 Nov 2003 11:32:49 -1000,
Dans le forum fr.comp.lang.perl,

je ne comprend pas pourquoi tu abdique.
qu'est ce que donne l'execution des lignes precedement suggere ?
car c'est la le seul probleme, vu que ce script permet de retrouver
l'adresse de l'emeteur d'un message. il suffit de s'assurer qu'il
retrouve bien le dit message.


Non je n'abdique pas. Des petites idées :

abookadd ne trouvait pas le fichier car, suivant que le fichier était
lu ou pas (dans mutt) il était stocké dans /tmp/abooktmp/cur (si lu)
ou /tmp/abooktmp/new (si pas lu). Donc il ne le trouvait pas. Comme
solution je crois qu'il faut mettre la macro :

,----
macro pager A "C/tmp/abooktmpnn!/home/phi/bin/abookadd.pln"
"create an alias from a message sender"
`----



*uniquement* dans pager (comme ça au moment du lancement de
abbokadd.pl le message est oligatoirment placé ds/tmp/abooktmp/cur )

Ceci étant acquis il y a un autre pb. Dans abookadd.pl :

$TMP_FILE=`ls -tr /tmp/abooktmp/cur | tail -1`;

ne peut pas convenir. Il faut ajouter "/tmp/abooktmp/" *avant* le
résultat de `ls -tr /tmp/abooktmp/cur | tail -1` de manière à ce qu'il
y ait le nom du fichier en absolu dans TMP_FILE. Et avec tout cela je
crois que ça va marcher. Mais je ne sais pas comment on fait pour
ajouter ce path avant le nom du fichier...


$TMP_FILE=`ls -tr /tmp/abooktmp/cur/* | tail -1`;
autant pour moi
mais tant qu'a faire
$TMP_FILE=`ls -tr /tmp/abooktmp/*/* | tail -1`;


Maintenant la solution qui consite à changer le format en maibox (et à
sauver ds /tmp/abooktmp) à l'avantage de pouvoir fonctionner à la fois
si le message à été lu ou pas. Donc ça n'est pas une si mauvaise
solution que cela.


c'est toi qui vois, j'ai une preference pour le format mbox car plus facile
a manipuler

--
dominix