Il s'agit de la commande claws-mail-perl-filter qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
cm_perl -- Un plugin Perl pour Claws Mail
DESCRIPTION
Ce plugin fournit un moteur de filtrage étendu pour le client de messagerie Claws Mail. Ce
permet l'utilisation de toute la puissance de Perl dans les filtres de messagerie.
RAPIDE La START
Pour commencer, vous pouvez utiliser le matcherrc2perlfilter.pl script dans le les outils-répertoire vers
traduisez vos anciennes règles de filtrage en Perl. Exécutez simplement le script et suivez les
instructions. (notez qu'avec les versions récentes de Claws Mail, ce script peut ne pas fonctionner
en raison de changements de syntaxe en amont. Cela sera mis à jour à l'avenir. Envoyez-moi un e-mail si
vous avez des problèmes pour démarrer).
Cependant, vous pouvez envisager de lire le reste de ce manuel et de réécrire votre
règles si vous choisissez d'utiliser le plugin, puisque le code Perl produit par ce script n'est pas
exactement jolie.
Vous ne parlez pas Perl ? Pas de problème, "perldoc perlintro" devrait vous donner suffisamment d'informations pour faire
trucs de fantaisie.
UTILISATION
Le plugin Perl attend un fichier de script Perl appelé filtre_perl dans la configuration de Claws Mail
répertoire (généralement $HOME/.claws-mail -- essayez `claws-mail --config-dir' si vous n'êtes pas sûr).
Si ce fichier n'existe pas au démarrage du plugin, un fichier vide est créé. Ce fichier, qui
n'a pas besoin de commencer par un sha-bang (!#/bin/perl), contient les instructions Perl pour votre
filtres de messagerie. Pour encourager les bonnes manières, le code est exécuté dans un "use strict;"
environnement.
Filtrage de Both Claws Mail conditions et actes sont mappés aux fonctions Perl avec
noms correspondants, chaque fois que cela est possible.
FONCTION INSCRIPTION
Pour une description détaillée des fonctions, voir la section "DESCRIPTIONS DES FONCTIONS", ci-dessous.
Conditions de filtrage standard
tout, marqué, non lu, supprimé, nouveau, répondu,
transmis, verrouillé, ignore_thread, colorlabel,
correspondance, cas d'allumette, expression rationnelle, S
size_greater, size_smaller, size_equal,
score_greater, score_lower, score_equal, age_greater,
age_lower, partiel, tagué
Actions de filtrage standard
marquer, décocher, supprimer, marquer_as_unread, mark_as_read,
verrouiller, déverrouiller, déplacer, copier, colorier, exécuter,
cacher, set_score, change_score, arrêter, avancer,
forward_as_attachment, rediriger, set_tag, unset_tag,
clear_tags
Truc amusant
en-tête, corps, chemin de fichier, extract_addresses,
move_to_trash, abandonner, addr_in_addressbook,
from_in_addressbook, get_attribute_value, SA_is_spam,
sortie, manuel, make_sure_folder_exists,
filter_log, filter_log_verbosité,
make_sure_tag_exists
FONCTION DESCRIPTIONS
En général, après le filtrage invoqué par le script Perl, le courrier est transmis à
Moteur de filtrage interne de Claws, à moins que a finale la règle a été touchée. Les règles finales s'arrêtent non seulement
le script de filtrage Perl au moment de leur apparition, mais aussi empêcher le traitement
cet e-mail par le moteur de filtrage interne de Claws (cela peut sembler déroutant, mais vous êtes
déjà familier avec ce concept à partir des filtres standard : après qu'un e-mail a été par exemple Bougezd,
les règles suivantes ne s'appliquent plus).
Aussi, soyez prudent avec la façon dont vous citez. En particulier, n'oubliez pas que le signe @ a un
signification particulière en Perl, et est interpolée entre guillemets doubles. Voir "Devis et devis-
comme les opérateurs" dans perlop pour en savoir plus sur les citations et l'interpolation.
Standard et repiquage Filtration Conditions
all Renvoie une valeur vraie. Disponible uniquement à des fins d'exhaustivité.
marqué Renvoie une valeur vraie si l'indicateur marqué est défini, faux sinon.
unread Renvoie une valeur vraie si l'indicateur non lu est défini, faux sinon.
supprimé Renvoie une valeur vraie si le drapeau supprimé est défini, faux sinon.
new Renvoie une valeur vraie si le nouveau drapeau est défini, faux sinon.
répondu Renvoie une valeur vraie si l'indicateur de réponse est défini, faux dans le cas contraire.
transmis
Renvoie une valeur vraie si l'indicateur transmis est défini, faux sinon.
locké Renvoie une valeur vraie si le drapeau verrouillé est défini, faux sinon.
ignorer_thread
Renvoie une valeur vraie si l'indicateur « Ignorer le thread » est défini, faux sinon.
étiquette de couleur COULEUR
étiquette de couleur
Renvoie une valeur vraie si le message a la couleur COLOR. COULEUR peut être soit une valeur numérique
valeur comprise entre 0 et 7 (avec des couleurs correspondant au filtrage interne
engine), ou le nom de la couleur anglais tel qu'il est introduit dans la boîte de dialogue de filtrage
(c'est-à-dire l'un des suivants : aucun, orange, rouge, rose, bleu ciel, bleu, vert ou marron, tandis que
les majuscules et les minuscules ne font aucune différence). Si COULEUR est omis, 0 (aucun) est
assumé.
size_greater TAILLE
Renvoie une valeur true si la taille du message est supérieure à SIZE, false dans le cas contraire.
size_smaller TAILLE
Renvoie une valeur true si la taille du message est inférieure à SIZE, false dans le cas contraire.
size_equal TAILLE
Renvoie une valeur true si la taille du message est égale à SIZE, false dans le cas contraire.
score_greater SCORE
Renvoie une valeur true si le score du message est supérieur à SCORE, false dans le cas contraire.
score_lower SCORE
Renvoie une valeur true si le score du message est inférieur à SCORE, false dans le cas contraire.
score_equal SCORE
Renvoie une valeur vraie si le score du message est égal à SCORE, faux sinon.
age_greater ÂGE
Renvoie une valeur true si l'âge du message est supérieur à AGE, false dans le cas contraire.
age_inférieur ÂGE
Renvoie une valeur true si l'âge du message est inférieur à AGE, false dans le cas contraire.
partial Renvoie une valeur vraie si le message n'a été que partiellement téléchargé, faux
autrement.
tagged Renvoie une valeur vraie si les messages ont une ou plusieurs balises.
test Correspond à la règle de filtrage interne 'test'. En particulier, il accepte les mêmes
symboles, à savoir :
%% %
%s Sujet
%f à partir de
%t à
%c Cc
%d date
ID de message %i
%n groupes de discussion
%r références
%F Nom de fichier -- ne doit pas être modifié
correspondance O QUOI
boîte d'allumettes O QUOI
expression rationnelle O QUOI
regexpcase O QUOI
Les fonctions de correspondance ont une syntaxe spéciale. Le premier argument est soit l'un des
to_or_cc, body_part, headers_part, headers_cont, message, à, de, sujet, cc,
groupes de discussion, inreplyto, références ou balise (ces chaînes peuvent ou non être
cité), la correspondance de modèle fonctionne sur cette zone. S'il s'agit d'une autre chaîne (qui
doit alors être entre guillemets), cette chaîne est considérée comme le nom d'un champ d'en-tête.
Le deuxième argument est la chaîne à rechercher. Pour match, matchcase, regexp et
regexpcase nous avons une correspondance normale sensible à la casse, normale insensible à la casse
correspondance, correspondance d'expression régulière sensible à la casse et régulière insensible à la casse
correspondance de modèle d'expression, respectivement.
Les fonctions retournent vrai si le motif a été trouvé, faux sinon.
Tout comme avec le moteur de filtrage intégré, le corps du message est recherché et
fourni tel quel - aucune analyse de jeu de caractères n'est effectuée. De même, aucune balise HTML n'est
dépouillé. Il devrait être possible d'utiliser des modules ou des programmes externes pour ces
tâches cependant. Si vous faites cela, envoyez-moi un message avec vos expériences.
Avec Perl ayant ses forces dans la correspondance de motifs, en utilisant les opérateurs intégrés de Perl
sont généralement une meilleure option que d'utiliser ces fonctions.
Standard et repiquage Filtration Actions
Les actions renvoient une valeur vraie en cas de succès et 'undef' lorsqu'une erreur s'est produite. Final
les règles de message sont indiquées. (Voir ci-dessus pour un croquis de ce qu'est une règle finale)
marquer Marquer le message.
décocher Décocher le message.
dele Supprimer le message. Notez le changement de nom de « delete » de Claws Mail en « dele ». Cette
est parce que "supprimer" est l'une des commandes intégrées de Perl qui ne peuvent pas être redéfinies
(si c'est possible, dites-moi comment).
Il s'agit d'un finale règle.
Marquer comme lu
Marquer le message comme lu
marquer comme non lu
Marquer le message comme non lu
verrouiller Verrouiller le message
déverrouiller Supprimer le verrouillage des messages
déplacer DESTINATION
Déplacez le message dans le dossier DESTINATION. La notation du dossier est la même que Claws
Courrier utilise. Vous pouvez copier et coller à partir de la boîte de dialogue de déplacement du filtrage normal,
jusqu'à ce que vous ayez une idée de la notation.
Il s'agit d'un finale règle.
copier DESTINATION
Copiez le message dans le dossier DESTINATION. La notation du dossier est la même que Claws
Courrier utilise. Vous pouvez copier et coller à partir de la boîte de dialogue de déplacement du filtrage normal,
jusqu'à ce que vous ayez une idée de la notation.
exécuter la COMMANDE
C'est le même que le test - règle de la section "Conditions de filtrage standard"
sauf qu'il renvoie toujours une valeur vraie.
masquer Masquer le message
set_score SCORE
Définir le score du message sur SCORE
change_score SCORE
Modifier le score du message par SCORE
stop Arrêtez le script Perl à ce stade. Notez que c'est pas une règle finale, ce qui signifie que
l'e-mail est transmis au moteur de filtrage interne. Voir « Abandonner » ci-dessous si
tu ne veux pas ça.
transférer COMPTE, EMAIL
Transférez le message à l'adresse e-mail EMAIL, en utilisant l'ID de compte ACCOUNT comme expéditeur
Compte. Jusqu'à présent, vous devez créer une règle dans le moteur de filtrage normal pour trouver
sortir ce numéro.
forward_as_attachment, EMAIL DU COMPTE
Transférer le message à l'adresse e-mail EMAIL en pièce jointe, en utilisant l'ID de compte
ACCOUNT comme compte expéditeur. Jusqu'à présent, vous devez créer une règle dans le cadre normal
moteur de filtrage pour trouver ce nombre.
rediriger le COMPTE, EMAIL
Redirigez le message vers EMAIL, en utilisant l'ID de compte ACCOUNT comme compte d'expéditeur. Donc
loin, vous devez créer une règle dans le moteur de filtrage normal pour découvrir que
.
TAG set_tag
Appliquer la balise TAG. Le TAG doit exister.
balise unset_tag
Désactiver le tag TAG.
clear_tags
Effacer toutes les balises.
Fun étoffe
Les fonctions
en-tête ARG
header Si ARG n'est pas donné, renvoie une liste de tous les noms de champs d'en-tête du courrier.
Si ARG est donné, renvoie 'undef' si le champ d'en-tête ARG n'existe pas dans le
e-mail. sinon ça revient
dans un contexte scalaire
La valeur du champ d'en-tête ARG.
dans un contexte de liste
Une liste de toutes les valeurs de champ d'en-tête disponibles. Ceci est utile si un champ d'en-tête
apparaît plus d'une fois dans un e-mail (par exemple, l'en-tête Received -).
Le champ d'en-tête "Références" constitue un cas particulier. Dans un contexte scalaire, il
renvoie la première référence. Dans un contexte de liste, il renvoie une liste de tous
les références.
body Renvoie le corps de l'e-mail dans un scalaire.
chemin du fichier
Renvoie le fichier et le chemin de l'e-mail actuellement filtré (correspond à
l'argument %F dans la règle 'test').
extrait_adresses
Extrait les adresses e-mail d'une chaîne et restitue une liste d'adresses trouvées.
Actuellement, une adresse e-mail est trouvée en utilisant l'expression régulière
'[-.+\w]+\@[-.+\w]+'. Cela ne trouvera pas toutes les adresses e-mail valides. Ne hésitez pas à
envoyez-moi une meilleure expression régulière.
Mettre à la corbeille
Déplacez l'e-mail dans la corbeille par défaut.
Il s'agit d'un finale règle.
Abandonnez le script d'arrêt Perl à ce stade.
Contrairement à "stop", il s'agit d'un finale règle.
addr_in_addressbook EMAIL, CARNET D'ADRESSES
addr_in_addressbook EMAIL
Renvoie une valeur vraie si l'adresse e-mail EMAIL est dans le carnet d'adresses avec le
nom CARNET D'ADRESSES. Si ADDRESSBOOK n'est pas fourni, renvoie true si l'adresse e-mail
est dans n'importe quel carnet d'adresses.
from_in_addressbook CARNET D'ADRESSES
from_in_addressbook
Vérifie si l'adresse e-mail trouvée dans l'en-tête de l'expéditeur est dans le carnet d'adresses ADDRESSBOOK
(ou n'importe lequel, si omis). Il est mis en œuvre comme
my ($from) = extract_addresses(header("from"));
renvoie 0 à moins que $from ;
return addr_in_addressbook($from,@_);
donc les mêmes restrictions que pour extract_addresses s'appliquent.
get_attribute_value EMAIL, ATTRIBUT, CARNET D'ADRESSES
get_attribute_value EMAIL, ATTRIBUT
Recherche dans le carnet d'adresses CARNET D'ADRESSES (ou dans tous les carnets d'adresses, si omis) un
contact avec une adresse e-mail EMAIL. S'il est trouvé, la fonction vérifie si ce
contact a un attribut utilisateur avec le nom ATTRIBUTE. Il renvoie la valeur de ce
attribut ou une chaîne vide si elle n'a pas été trouvée. Comme d'habitude, 'undef' est renvoyé
si une erreur s'est produite.
SA_est_pourriel
est un alias de
ne pas tester 'spamc -c < %F > /dev/null'
exit A été redéfini pour être un alias pour « arrêter ». Vous ne devriez pas utiliser le propre "exit" de Perl
commande, car elle quitterait Claws Mail.
manual Renvoie une valeur vraie si le script de filtrage a été invoqué manuellement, c'est-à-dire via le
menu Outils.
make_sure_folder_exists IDENTIFIANT
Renvoie une valeur vraie si le dossier avec l'identifiant IDENTIFIER (par exemple #mh/Mail/foo/bar)
existe ou pourrait être créé.
tag make_sure_tag_exists
Renvoie une valeur vraie si la balise TAG existe ou a pu être créée.
filter_log SECTION, TEXTE
filter_log TEXTE
Écrit TEXT dans le fichier journal du filtre. SECTION peut être l'un des
· "LOG_MANUEL"
· "LOG_MATCH"
· "LOG_ACTION"
Si la SECTION est omis, "LOG_MANUAL" est supposé.
filter_log_verbosity VERBOSITÉ
filtre_log_verbosité
Modifie la verbosité du journal de filtrage pour le courrier actuel. La VERBOSITÉ doit être l'une des
0 Soyez silencieux
1 Journal type MANUEL
2 Type d'action de journal
3 Type de MATCH de journal
Pour la signification de ces nombres, lisez la section "ENREGISTREMENT". Si VERBOSITY est omis,
la verbosité du fichier journal du filtre n'est pas modifiée.
Cette fonction renvoie le nombre filter_log_verbosity avant le changement (le cas échéant).
Variables
$permanent
Ce scalaire conserve sa valeur entre les messages électroniques filtrés. Au démarrage du plugin, il est
initialisé à la chaîne vide.
Journalisation
Pour garder une trace de ce qui a été fait aux e-mails lors du filtrage, le plugin prend en charge
enregistrement. Trois niveaux de verbosité sont reconnus :
0 journalisation désactivée
1 ne consigne que les messages manuels, c'est-à-dire les messages introduits par la commande "filter_log" dans
filtrer les scripts
2 messages manuels de journal et actions de filtrage
3 messages manuels de journal, actions de filtre et correspondances de filtre
Les messages sont enregistrés dans la fenêtre de journal de Claws Mail. Le niveau de journalisation par défaut est 2. Niveau de journalisation
3 n'est pas recommandé, car les fonctions de correspondance enregistrent un message si elles réussissent, et
ainsi, si vous avez des contrôles négatifs, vous obtiendrez des entrées confuses. Si vous voulez garder une trace
de correspondance, faites-le manuellement, en utilisant "filter_log", ou faites-le en activant temporairement le matcher
journalisation à l'aide de "filter_log_verbosity".
La première fois que vous déchargez ce plugin (ou fermez Claws Mail), une section appelée
[Plugin Perl] sera créé dans le fichier de configuration de Claws Mail griffesrc, contenant un
variable:
* filter_log_verbosity
Si vous souhaitez modifier le comportement par défaut, vous pouvez modifier cette ligne. Assurez-vous que Claws Mail
ne fonctionne pas pendant que vous faites cela.
Il sera possible d'accéder à ces paramètres via l'interface graphique, dès que je trouverai le temps de
écrivez un plugin GTK correspondant, ou quelqu'un d'autre est intéressé à y contribuer.
EXEMPLE
Cette section répertorie un petit exemple de fichier de script Perl. Je suis sûr que vous avez l'idée..
#-8<---------------------------------------------- ------
# -*- perle -*-
# fonctions locales
# Apprenez les messages amateurs et déplacez-les vers le dossier spécifié. C'est
# utile pour s'assurer qu'un filtre bayes voit également le jambon.
sous learn_and_move {
execute('mettre la commande pour apprendre le jambon ici');
mouvement(@_);
}
# Filtre anti-spam en deux étapes. Chaque e-mail qui obtient un score supérieur à 15
# sur SpamAssassin est déplacé dans la corbeille par défaut.
# Tous les e-mails inférieurs à cela, mais supérieurs à ceux de SpamAssassin
# 'required_hits' va dans #mh/mail/Spam.
sous-vérification anti-spam {
mon $surely_spam = 15 ;
mon $filepath = filepath ;
my $spamc = `spamc -c < $filepath`;
ma ($valeur,$seuil) = ($spamc =~ m|([-.,0-9]+)/([-.,0-9]+)|);
if($value >= $surely_spam) {
Marquer comme lu;
Mettre à la corbeille;
}
if($value >= $threshold) {mark_as_read; déplacer '#mh/mail/Spam';}
}
# L'exécution du script Perl commence ici.
# Quelques tris spécifiques
learn_and_move '#mh/mail/MailLists/Claws Mail/user'
si matchcase('expéditeur','[email protected]');
learn_and_move '#mh/mail/MailLists/Sylpheed'
if matchcase('list-id','sylpheed.good-day.net');
# Implémenter les dossiers à venir à l'aide du carnet d'adresses
# les attributs. Les dossiers cibles pour des adresses e-mail spécifiques sont
# stocké directement dans le carnet d'adresses. De cette façon, si un e-mail
# changements d'adresse, nous n'avons qu'à mettre à jour le carnet d'adresses, pas
# les règles de filtrage ! En plus de cela, nous pouvons grandement désencombrer le
# script de filtre.
# obtenir l'adresse e-mail dans l'en-tête de
my $fromheader = header "from" ;
my ($from) = extract_addresses $fromheader ;
# vérifie si cette adresse e-mail a un attribut associé
# appelé "incomming_folder". Si si a, la valeur de ce
# L'attribut est censé être le dossier cible.
my $value = get_attribute_value $from, "incomming_folder" ;
learn_and_move($value) si $value ;
# Un exemple de liste blanche : Si l'adresse de provenance est dans mon
# Carnet d'adresses "office", déplacez le courrier dans le dossier #mh/mail/office
learn_and_move '#mh/mail/office' if from_in_addressbook("office");
# Si l'adresse de provenance se trouve dans un autre carnet d'adresses, déplacez le
# mail vers dossier #mh/mail/inbox/known
learn_and_move '#mh/mail/inbox/known' if from_in_addressbook ;
# Faites passer les mails restants via SpamAssassin.
vérification anti-spam;
# messages qui arrivent à la fin du script sont transmis à
# le moteur de filtrage interne. Si le règlement intérieur ne dit pas
# sinon, les mails se retrouvent dans la boîte de réception par défaut.
#-8<---------------------------------------------- ------
Utilisez claws-mail-perl-filter en ligne en utilisant les services onworks.net