GoGPT Best VPN GoSearch

Icône de favori OnWorks

mailagent - En ligne dans le Cloud

Exécutez mailagent dans le fournisseur d'hébergement gratuit OnWorks sur Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

Il s'agit de la commande mailagent 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


mailagent - un outil de traitement automatique du courrier

SYNOPSIS


agent de messagerie [ -dhilqtFIVU ] [ -s{umaryt} ] [ -f filet ] [ -e exclure ] [ -c config ] [ -L
loglevel ] [ -r fichier de règles ] [ -o Commande ] [ fichier courrier ]

DESCRIPTION


Agent postal vous permet de traiter votre courrier automatiquement. Étant donné un ensemble de lex-comme des règles,
vous pouvez remplir des e-mails dans des dossiers spécifiques, transférer des messages à une tierce personne, diriger un
message à une commande ou même poster le message à un groupe de discussion. Il est également possible de
traiter les messages contenant des commandes. Les agent de messagerie n'est généralement pas invoqué manuellement
mais est plutôt appelé via le une fonction filtre programme, qui est à son tour invoqué par sendmail. Cette
signifie que vous devez avoir sendmail sur votre système pour l'utiliser. Vous devez également avoir perl pour exécuter
les scripts de l'agent de messagerie.

Il existe un ensemble d'options qui peuvent être utilisées lorsque vous invoquez agent de messagerie toi-même. S'il te plaît
se référer au OPTIONS section pour une description complète. Vous pouvez utiliser le -h possibilité d'obtenir
un rappel d'utilisation cryptique.

Produit Informations clés
Agent postal a en fait quatre ensembles distincts de fonctionnalités, qui peuvent être utilisées simultanément ou
un à la fois. Cela implique:

· Un processeur de commandes @SH, pour rester compatible avec la première implémentation. Dans
cette utilisation la plus simple, tous les messages électroniques sont laissés dans votre boîte aux lettres (ou le fourre-tout
dossier requis sur les systèmes Debian : veuillez consulter /usr/share/doc/mailagent/SÉCURITÉ pour
des détails), avec un traitement spécial soulevé sur les messages dont le sujet est Command.
Veuillez vous référer à la section intitulée EN UTILISANT THE DEFAULT DES RÈGLES si vous souhaitez l'utiliser
fonction.

· Un filtre de courrier complet, qui vous aide à trier votre courrier en fonction de différents tris
critères et actions. Le filtrage est spécifié dans un fichier de règles et remplace le
défaut Command traitement du courrier (qui peut être réactivé en définissant explicitement
une règle pour cela). Cela devrait être l'utilisation la plus courante de agent de messagerie et est pleinement
documenté dans la section intitulée EN UTILISANT THE FILTRE. Vous pouvez livrer le courrier à
des dossiers simples de style Unix, mais aussi des dossiers MMDF et MH.

· Un remplaçant pour le vacances programme, qui répondra automatiquement à votre courrier
pendant que vous n'êtes pas là. Il vous suffit de fournir un message à renvoyer et le
fréquence à laquelle cela se produira. Certaines substitutions de macros simples vous permettent de
utilisez certaines parties de l'en-tête du courrier dans votre message de vacances, pour un message plus personnalisé
répondre. Voir le INOUBLIABLE MODE section pour plus de détails.

· Un serveur de messagerie générique, qui vous permettra d'implémenter un vrai serveur de messagerie sans
les soucis de niveau inférieur comme la récupération d'erreurs, la journalisation ou l'analyse des commandes.
La documentation complète se trouve dans la section GÉNÉRIQUE MAIL SERVEUR au bout du
cette page de manuel.

Il est possible d'étendre les commandes de filtrage de mailagent en les implémentant dans perl et
puis les avoir chargés automatiquement lorsqu'ils sont utilisés. Ces commandes étendues se comporteront
exactement comme ceux intégrés, comme documenté dans le EXTENSION Filtrage COMMANDES .

Formations Dès Exemples
Il est fort possible que vous trouviez cette page de manuel trop complexe pour vous.
Malheureusement, il ne s'agit pas vraiment d'un tutoriel mais plutôt d'un document de référence. Si
vous le souhaitez, vous pouvez commencer par regarder les exemples contenus dans l'arborescence des sources de distribution
sous agent/exemples. Ce répertoire contient deux exemples de fichiers de règles (regardez le
fichier README en premier) et sont commentés en détail.

OBTENIR A DÉBUTÉ


Tout d'abord, vous devez installer une configuration minimale et voir comment cela fonctionne. Ce serait
inutile d'installer complètement le programme et de découvrir ensuite qu'il ne fonctionne pas comme
annoncé...

Pour démarrer l'installation, vous devez configurer un ~/.mailagent fichier qui est le principal
fichier de configuration, et choisissez le bon une fonction filtre .

Choisir Le manuel de formation Filtre Programme
La distribution est livrée avec deux programmes de filtrage. Un écrit en shell et un en C. Le
la version shell pourrait être celle à utiliser si vous pouvez recevoir votre courrier sur de nombreux
plates-formes où votre répertoire personnel est monté sur NFS (c'est-à-dire partagé entre tous ceux
plates-formes). La version C est plus sûre et beaucoup plus rapide, mais vous devez l'installer sur un
emplacement.

Sur certaines plateformes, sendmail ne réinitialise pas correctement son UID lors du traitement des e-mails dans son
propre file d'attente. Dans ce cas, vous devez obtenir une copie privée du programme de filtrage C et faire
il s'est imposé à vous-même. Le filtre réinitialisera alors correctement son UID s'il est invoqué avec un
UID effectif différent du vôtre (il peut également nécessiter le bit setgid pour réinitialiser le GID comme
bien). Si c'est effectivement le cas sur votre système, assurez-vous d'utiliser le chemin
variable de configuration pour définir un PATH approprié, car le filtre générera un processus perl avec
l'option '-S', à la recherche d'un agent de messagerie scripts.

Même si vous n'avez pas besoin d'obtenir une copie setuid du une fonction filtre programme, il est sage de mettre en place un
chemin approprié : quelqu'un pourrait s'introduire dans votre compte en mettant un cheval de Troie de l'agent de messagerie dans
l'emplacement approprié. Assurez-vous également que le programme mailagent est protégé contre
écrit, ainsi que le répertoire qui le contient, ou quelqu'un pourrait substituer le sien
version du script et briser la sécurité. je crois que le setuid une fonction filtre programme pour être en sécurité,
mais il est toujours possible de négliger, veuillez donc me signaler toute faille de sécurité.

Le manuel de formation une fonction filtre le script peut être trouvé dans le Lib/agent de messagerie annuaire. Il a besoin d'un peu d'adaptation donc
vous devez le copier dans votre répertoire personnel et le modifier en fonction de vos besoins. Commentaires tenus
en elle devrait être explicite. Il n'y a qu'une petite section en tête du script
qui doit être édité. Vous devrez supprimer les commentaires du shell dans le une fonction filtre script par
vous-même si votre shell ne peut pas les gérer.

A partir de la version 3.0 PL44, je vous conseille de privilégier la version C si vous êtes soucieux de
Sécurité. Si vous êtes dans une position où plusieurs architectures peuvent traiter votre .vers l'avant,
alors un shell wrapper sélectionnant le bon exécutable en fonction de l'architecture sera
nécessaire.

Configuration Agent postal
If agent de messagerie est dans votre chemin, vous pouvez configurer automatiquement une installation par défaut en
fonctionnement:

agent de courrier -I

qui créera un ~/.mailagent fichier à partir d'un modèle existant, personnalisez certains
variables pour votre site et effectuez quelques vérifications de base. Tout ce que fait la commande est
sortie à l'écran à des fins de vérification et tout problème détecté est signalé.

Sinon, vous devez copier le mailagent.cf fichier contenu dans le sous-répertoire mailagent
/usr/share/agent de messagerie (ci-après nommé Lib) en tant que .agent de messagerie dans votre répertoire personnel. Éditer
pour configurer l'ensemble du traitement. En particulier, vous devez choisir un répertoire de spool
(ci-après nommé Spool) et un répertoire de logs (ci-après nommé Log).

Notez que l'utilisation de la procédure d'installation automatique ci-dessus ne vous empêche pas d'aller
à travers le fichier et en le modifiant à votre guise. En fait, vous êtes fortement encouragé à faire
ceci, en particulier pour le réglage du répertoire personnel, le niveau de journalisation et le chemin or p_hôte
variables. Une fois que vous avez terminé, relancez le agent de messagerie -I commande pour s'assurer que tout est
amende. Néanmoins, vous devrez brancher mailagent en créant un ~ /. avant fichier, comme
expliqué en quelques sections.

Voici une description de chacun des champs que vous trouverez dans le ~/.mailagent fichier,
suivi d'une valeur suggérée, le cas échéant. Les champs marqués comme facultatifs peuvent ne pas être
présent dans le fichier de configuration. Certains domaines ont une relation étroite avec d'autres, et
c'est donné aussi.

âge max Période après laquelle une entrée dans la base de données doit être supprimée (suggéré : 1 an)
Ce champ est facultatif, mais nécessaire si autoclean est sur.
fichier d'authentification Autorisations d'envoi à distance (pas encore implémentées).
autoclean Réglé sur ON (insensible à la casse), mailagent effectuera un nettoyage automatique du
entrées de base de données sous hachage en supprimant tous les éléments antérieurs à âge max. C'est
un champ facultatif, en l'omettant, la valeur par défaut est OFF. (suggéré : OFF, sauf si vous utilisez
Commandes UNE FOIS, UNIQUE ou ENREGISTREMENT, ou activer le mode vacances.)
coup de poing Que le biff soit ou non souhaité quand agent de messagerie distribue le courrier dans un dossier. Régler
sur ON (insensible à la casse) pour autoriser le biff local si vous êtes connecté.
(facultatif, par défaut : OFF)
tête de biff Lorsque le biff est activé, cette variable répertorie les en-têtes à imprimer
dehors. Les en-têtes doivent être donnés dans leur format normalisé et être séparés par
virgules. (facultatif, par défaut : De, À, Objet, Date).
biffer La longueur maximale du corps du message qui doit être imprimé lors du biff.
(facultatif, la valeur par défaut est 560).
lignes de biff Le nombre maximum de lignes du corps du message qui doivent être imprimées lorsque
biffant. Réellement, agent de messagerie tente d'imprimer ce nombre de lignes, à condition
le nombre total de caractères imprimés est inférieur à biffer. (optionnel,
la valeur par défaut est 7).
biffmh Lorsqu'il est activé, le corps du message est compacté avant le biff en supprimant
espaces consécutifs et en remplaçant les retours à la ligne par un seul espace. Le message
lui-même n'est pas altéré physiquement bien sûr, seule la sortie à l'écran est
concerné. Étant donné que cela peut donner lieu à un message difficile à lire, je vous suggère
allume aussi biffnice lors de l'utilisation de cette option. (facultatif, par défaut : OFF).
biffmsg Le chemin d'accès à un fichier décrivant le format que le biffing doit utiliser. S'il n'est pas défini, un
le format câblé par défaut est utilisé. Assaisonner selon l'envie. (suggéré: ~/.biffmsg).
biffnice Si le message doit être reformaté pour s'adapter parfaitement au terminal.
(facultatif, désactivé par défaut, suggéré : activé lorsque biffmh est également activé).
biffnl Contrôle si les lignes de corps "vierges" doivent être imprimées ou non. Par des lignes "vierges",
nous voulons dire des lignes ne contenant pas de mots. Réglez-le sur ON pour imprimer ces lignes vierges, pour
OFF si vous souhaitez avoir une vue plus compacte du corps dans les limites fixées
by biffer et lignes de biff. (optionnel, par défaut sur ON).
guillemet Contrôle si la première ligne d'attribution introduisant une citation rognée
devrait faire partie du message biff ou non. Lorsqu'elle est désactivée, la ligne d'attribution
est rogné et cela est signalé dans le message de rognage, lorsque garniture de biff is
AU. (optionnel, par défaut sur ON).
garniture de biff Contrôle si les lignes coupées dans le message biff doivent être remplacées par un
message indiquant combien d'entre eux ont été coupés. Uniquement utilisé par le %-T biffing
macro. Lorsqu'il est éteint, il s'éteint automatiquement guillemet également. (optionnel,
par défaut sur ON).
bifferlen Indique le nombre de lignes d'une citation de début avant d'effectuer toute
garniture. Uniquement utilisé par la macro biffing %-T. (facultatif, la valeur par défaut est 2).
faire appel à Nom du fichier de file d'attente d'appels dans lequel les travaux par lots sont conservés. Ce paramètre
doit être défini lors de l'utilisation de la commande AFTER. (suggéré : $spool/légende)
nettoyer Période de nettoyage des entrées de la base de données. La valeur du dernier nettoyage est enregistrée
dans le fichier de contexte. Ceci est facultatif, mais nécessaire si autoclean est sur.
(suggéré : 1 M)
fichier Nom du fichier contenant les commandes autorisées. Nécessaire lorsque PROCESS est utilisé.
(suggéré : $spool/commandes).
compresser Nom du fichier contenant la liste des dossiers compressés. Voir la section sur
compression de dossier. C'est un paramètre optionnel. (suggéré: ~/.compresser).
spécifications comp Nom du fichier contenant des spécifications sur la façon de gérer différents types de
format de compression. Voir la section sur la compression de dossier. Ceci est une option
paramètre. (suggéré : $spool/compresseurs).
balise comp La balise de compression par défaut lors de la création de nouveaux dossiers. S'il n'est pas spécifié, le
la valeur par défaut est « gzip ».
serveur de commande Nom du fichier contenant les commandes SERVER autorisées et leur définition.
Il s'agit d'un paramètre facultatif si vous ne prévoyez pas d'utiliser le serveur de messagerie générique.
(suggéré : $spool/server).
aux contextes Fichier contenant le contexte mailagent. Le contexte enregistre certaines variables qui ont besoin
à conserver pendant toute la durée du processus. Nécessaire si le nettoyage automatique est activé.
(suggéré : $spool/contexte)
liste de distribution Une liste de toutes les distributions disponibles. Voir l'échantillon conservé dans
Lib/mailagent/distributions. Nécessaire à PROCESS uniquement. (suggéré : $spool/distribs)
domaine Votre nom de domaine, sans le premier point, comme dans example.com. La valeur est
ajouté à la valeur de email lorsque cette variable n'a pas de '@', à
construire une adresse e-mail pleinement qualifiée. Voir aussi le mascarade variable.
(facultatif, par défaut le nom de domaine déterminé au moment de la construction).
email Votre adresse de messagerie électronique. Si rien n'est spécifié, mailagent essaiera de deviner
ce. Cette adresse est utilisée par mailagent lorsqu'il essaie d'envoyer quelque chose à l'utilisateur
(tu!). (suggéré : précisez votre adresse e-mail).
emergdir Nom du répertoire qui doit être utilisé pour les dumps, de préférence. C'est
optionnel. (suggéré: ~/tmp/perdu+courrier)
exécutable S'il faut être strict avant d'utiliser exécutable() lancer ou non un nouveau processus. Les
la valeur de cette variable est utilisée à la place de sécurisée lors de la vérification de l'exécutable
des dossiers. (par défaut sur OFF, suggéré : ON si possible).
sauter l'exécutable S'il faut sauter le exécutable() contrôles de sécurité tous ensemble. Ne l'activez pas
à moins que vous ne fassiez vraiment confiance à tous les utilisateurs ayant accès à votre machine ou à votre fichier
serveur. (facultatif, désactivé par défaut, suggéré : désactivé).
de tous Si oui ou non agent de messagerie devrait échapper à tous les Dès lignes dans le message, non
seuls ceux qui, selon lui, devraient apparaître dangereux (c'est-à-dire un Dès après une ligne vide).
Cette option n'a de sens que lorsque d'esc est également activé. il est ignoré
sinon, et est donc facultatif. Par défaut, il est supposé être désactivé.
(suggéré : OFF, jusqu'à ce que vous ayez des raisons de croire que votre agent utilisateur de messagerie est
confus dans ce mode : lorsque cela se produit, votre agent utilisateur divisera le courrier sans
raison apparente).
d'esc Si oui ou non agent de messagerie devrait s'échapper potentiellement dangereux Dès lignes dans le courrier
messages. Si vous utilisez MH ou si votre lecteur de courrier n'utilise pas ces lignes pour
messages séparés, vous pouvez le régler sur OFF. (suggéré : ON)
faux Si oui ou non agent de messagerie devrait simuler une ligne From: dans l'en-tête du message lorsque
il est absent. Naturellement, il nécessite une ligne de départ valide pour fonctionner !
(facultatif, par défaut sur ON, suggéré : ON).
sécurité de groupe S'il est désactivé, les fichiers inscriptibles en groupe seront gérés comme s'ils étaient sécurisés,
d'un point de vue sécuritaire. Laissez-le sur ON si possible, ou vous pouvez passer par un
énorme trou de sécurité sans que vous vous en rendiez compte (facultatif, par défaut sur ON, suggéré :
AU).
hachage Le répertoire utilisé pour le hachage des noms par la base de données intégrée utilisée par ONCE,
Commandes UNIQUE et RECORD. Facultatif, sauf si vous utilisez ces commandes ou
activer le nettoyage automatique. Le répertoire est placé dans la zone de spool. (suggéré:
$bobine/dbr).
répertoire d'aide Répertoire où sont conservés les fichiers d'aide des commandes SERVER. (suggéré:
$spool/aide)
mascarade Lorsqu'elle est définie sur ON, la valeur de la variable domaine est le nom complet
utilisé. Lorsqu'il est désactivé, le nom d'hôte est ajouté au domaine. Si le nom d'hôte est
déjà pleinement qualifié, alors la valeur de domaine est ignoré. En supposant domaine
est fixé à example.com et le nom d'hôte est hôte, puis le nom complet
sera hôte.exemple.com if mascarade est éteint, et example.com si ON. (optionnel,
par défaut à ce qui a été déterminé au moment de la construction)
Accueil Définit où se trouve le répertoire personnel. Cela doit être exact.
niveau Niveau de journal, voir ci-dessous pour une définition des niveaux disponibles (suggéré : 9).
répertoires de liens Lorsqu'il est défini sur ON, vérifie soigneusement les liens symboliques vers les répertoires lors de l'exécution
contrôles de sécurité sur les fichiers sensibles. Cela vérifiera (récursivement) pour chaque
niveau de lien symbolique indiquant que le répertoire cible n'est pas accessible en écriture ou groupe
accessible en écriture et que le répertoire parent de chaque lien cible n'est pas mondial
inscriptible. Si la sécurisée est désactivée, ce paramètre est ignoré. (optionnel,
par défaut : ON, suggéré : ON lorsque la sécurité est également ON).
verrouiller Le délai en secondes entre deux tentatives de verrouillage. (facultatif, par défaut : 2).
verrouillage Le délai maximum en secondes pour maintenir un verrou. Passé ce délai, la serrure
être brisé. (facultatif, par défaut : 3600).
verrouillage max Nombre maximum de tentatives de verrouillage avant d'abandonner. (facultatif, par défaut :
20).
coffre-fort Lors du verrouillage d'un fichier, agent de messagerie fait normalement verrouillage max tentatives séparées par
délai de verrouillage secondes, puis abandonne. Face à une livraison dans une boîte aux lettres, il
peut avoir du sens de continuer même si aucun verrou n'a été saisi, ou même si seulement un
un verrouillage partiel a été effectué (par exemple, l'un des verrouillages de style .lock ou flock()
réussi). Cette variable contrôle à quel point vous voulez être en sécurité. Réglez-le sur OFF pour laisser
mailagent continue sa distribution de boîte aux lettres même si aucun verrouillage n'a été effectué, sur ON
si vous voulez un verrouillage strict, à PARTIAL si vous pouvez vivre avec un verrouillage partiel.
Les messages non enregistrés dans un dossier sont transférés dans une boîte aux lettres d'urgence. (optionnel,
par défaut sur ON). Sur les systèmes Debian, puisque agent de messagerie ne peut pas saisir les serrures, il devrait
toujours être laissé sur ON, sinon un brouillage du courrier peut se produire. Voir
/usr/share/doc/mailagent/SÉCURITÉ pour en savoir plus.
verrouiller Cette variable contrôle le temps après lequel agent de messagerie devrait commencer à émettre un
avertissement lorsqu'il est occupé à essayer d'acquérir un verrou. C'est une liste séparée par des virgules de
valeurs, en secondes. Si deux valeurs sont données, la première est le temps initial
seuil, le second est la période de répétition. Par exemple, une valeur de "15,60"
provoquerait un avertissement après 15 secondes, puis toutes les 60 secondes jusqu'à ce que le verrou soit
prise ou le temps de tentative de verrouillage est expiré (voir verrouillage max et délai de verrouillage). Si
une seule valeur est donnée, elle est prise comme étant à la fois le seuil initial et le
période. (facultatif, la valeur par défaut est : 20,300 XNUMX).
enregistrer Nom du fichier journal qui sera placé dans le répertoire Log. (suggéré : agentlog).
rép_log Répertoire de journalisation. (suggéré: ~/var/journal).
boîte à lettres Le nom du fichier de boîte aux lettres système, qui est par défaut la valeur du utilisateur
variable de configuration. C'est un paramètre optionnel.
courrier Emplacement du répertoire de spool de messagerie système. Si aucun n'est fourni, le
mailagent utilisera la valeur déterminée par Configure.
opter pour la messagerie Options à transmettre à l'expéditeur (voir sendmail). (facultatif, suggéré : -odq
-i, lors de l'utilisation de sendmail).
cmdmax Nombre maximum de commandes pouvant être exécutées par une commande SERVER
avant de vider le reste du message électronique. (suggéré : 10).
maxerreurs Nombre maximum d'erreurs pour la commande SERVER avant de vider le reste de
le message électronique. (suggéré : 10).
taille max Taille maximale en octets des fichiers avant utilisation kit pour l'envoi de fichiers. Ceci est utilisé
par PROCESSUS. (suggéré : 150000).
mboxlock Le format à utiliser pour verrouiller les boîtes aux lettres avant de les livrer. Cette
string passe par un petit mécanisme de substitution de macro pour le rendre plus
général. Le nom de fichier dérivé après la substitution de macro est le nom du verrou
qui sera utilisé, étant donné le nom du fichier à verrouiller. Disponible
les macros sont :

%D : le nom du répertoire du fichier
%f : le nom du fichier à verrouiller (chemin complet)
%F : le nom de base du fichier (dernier chemin composant)
%p : le numéro de pid du processus actuel
%% : un caractère % simple

Les formats de verrouillage courants sont "%f.lock" et "%D/.%F.lock". Bien sûr, pour pouvoir
utilisez cette fonctionnalité, mailagent ne doit pas avoir été configuré pour utiliser le style flock()
verrouillage uniquement. (facultatif, par défaut : %f.lock). Cela n'a aucun effet sur Debian
systèmes, puisque agent de messagerie ne peut pas obtenir de verrou de toute façon, car il ne s'agit pas de sgid mail.
mhprofil Le nom du profil MH à utiliser. Cela n'est nécessaire que lorsque vous essayez de
enregistrer dans un dossier MH. Si ce paramètre facultatif n'est pas défini, la valeur par défaut
~/.mh_profile est utilisé.
mmdf Réglez-le sur ON si vous souhaitez pouvoir enregistrer le courrier dans des boîtes aux lettres de style MMDF.
(suggéré : OFF, sauf si vous utilisez MMDF ou MH). Ceci n'est pas valide sur un système Debian.
boîte mmdf La valeur de cette variable n'a d'importance que lorsque mmdf est sur. Si réglé sur ON, alors nouveau
les dossiers seront créés en tant que MMDF. Cette variable n'est pas utilisée lors de l'enregistrement dans
un dossier existant, car dans ce cas le agent de messagerie sera automatiquement
déterminez le type et enregistrez le message en conséquence. (suggéré : OFF, sauf si
vous utilisez MMDF ou souhaitez utiliser MH mshf).
préfixe msg Nom du fichier à mettre dans les dossiers du répertoire, en précisant le préfixe du message à
être utilisé. Facultatif, par défaut .msg_préfixe.
prénom Prénom de l'utilisateur, utilisé par mailagent lorsqu'il se réfère à vous. Cela définit le
valeur de la macro %U.
nouveaucmd Nom du fichier décrivant les nouvelles commandes de filtrage. Voir section Extension
Filtration Commandes pour plus de détails. Laissez ce paramètre facultatif à moins que
vous êtes un expert de la messagerie. (suggéré : $spool/newcmd).
newsop Options à transmettre au programme de publication d'actualités (voir envoyer des nouvelles). (optionnel,
suggéré : laisser vide lorsque vous utilisez inews).
nfslock Réglez-le sur ON pour garantir des verrous sécurisés par NFS. La différence est que le nom d'hôte est
utilisé en conjonction avec le PID pour obtenir un verrou. Cependant, l'agent postal doit
fork/exec pour obtenir ces informations. Il s'agit d'un paramètre facultatif qui est défini
sur OFF par défaut. (suggéré : OFF si vous distribuez le courrier à partir d'une seule machine,
même si c'est via NFS).
passwd Fichier dans lequel les mots de passe d'alimentation du SERVEUR sont conservés - généralement chiffrés. (suggéré:
$pouvoirs/mot de passe).
chemin Chemin minimum à utiliser par le programme de filtrage C. Pour définir un chemin spécifique pour un
click hôte, mettre en place un p_hôte variable. Ce sera ajouté par défaut
PATH variable fournie par d'autres programmes. (suggéré: / bin:/ usr / bin:/usr/ucb).
Notez que le nom d'hôte doit être spécifié sans qu'aucun nom de domaine ne lui soit ajouté
(par exemple pour un nom d'hôte de lyon.eiffel.com, utiliser une variable p_lyon). Si votre hôte
le nom contient un '-', vous devez l'écrire comme '_', car '-' n'est pas un
caractère pour un perl Nom de variable.
perlib Cette variable peut être utilisée pour changer le chemin de recherche perl pour les fichiers requis.
Les répertoires doivent être séparés par un caractère ':', tout comme un shell PATH.
Ce chemin est précédé du chemin de recherche perl par défaut. Tout répertoire non
commençant par un '/' (après ~substitution de nom) est pris par rapport au
répertoire lib privé mailagent déterminé au moment de la configuration.
s'il vous plaît enregistrer Nom du fichier utilisé pour enregistrer les niveaux de correctifs pour les distributions archivées. Cette
n'est utilisé que par les commandes invoquées via PROCESS. (suggéré : $spool/plsave).
répertoire d'alimentation Répertoire répertoriant les autorisations des utilisateurs pour les pouvoirs du SERVEUR. (suggéré:
$pouvoirs/autorisation)
liste de puissance Nom du fichier contenant les alias d'alimentation SERVER. Puisque les noms de puissance peuvent être arbitraires
long mais certains systèmes de fichiers ont toujours une limitation de 14 caractères sur le nom de fichier
longueur, les alias internes sont créés et maintenus par mailagent. (suggéré:
$pouvoirs/alias).
journal d'alimentation Fichier dans lequel les demandes d'alimentation du SERVEUR sont enregistrées, en plus du journal de l'agent. Depuis
ceux-ci sont un problème de sécurité, c'est une bonne idée de les enregistrer séparément. Si non
défini, enregistrez-les uniquement dans agentlog. (suggéré : $logdir/powerlog).
pouvoirs Répertoire pour l'administration de l'alimentation SERVER. (suggéré : $spool/pouvoirs)
liste de prog Une petite description des distributions disponibles. Voir l'échantillon conservé dans
Lib/mailagent/proglist. Ceci est utilisé par PROCESS uniquement. (suggéré:
$spool/proglist)
file Répertoire de file d'attente (messages en attente de traitement). Obligatoire, bien sûr.
(suggéré : $spool/file d'attente)
mise en file d'attente Nombre maximal de secondes pendant lesquelles un courrier peut rester dans la file d'attente de l'agent de messagerie avant d'être
réellement traité. Pendant ce temps, agent de messagerie n'essaiera pas de traiter le
message même quand -q est utilisé. (facultatif, par défaut : 1800).
file d'attente Nombre maximum de secondes après lesquelles agent de messagerie devrait signaler les messages toujours dans
sa file d'attente comme étant ancienne. (facultatif, par défaut : 86400, c'est-à-dire un jour).
attendre la file d'attente Temps en secondes indiquant le C une fonction filtre programmer combien de temps il doit attendre avant
lancement agent de messagerie. (facultatif, par défaut : 60, mais peut être abaissé à 0 si vous
ne voulez pas attendre pour retarder la réception de nouveaux messages).
cache de règles Le nom du fichier utilisé pour mettre en cache les dernières règles compilées. Étant donné qu'habituellement
agent de messagerie fonctionne principalement avec un même fichier de règles, cela permet d'économiser la surcharge de
recompilant toutes les règles à chaque fois. (facultatif, suggéré : $spool/rulecache).
règlemac Réglez-le sur ON pour activer les substitutions de macros dans les modèles de règles. (optionnel,
par défaut : OFF).
Le nom du fichier contenant les règles de filtrage (facultatif sur non Debian
systèmes, suggéré: ~/.règles). Sur les systèmes Debian, il faut avoir un minimum de règles
fichier pour empêcher agent de messagerie d'essayer de mettre des messages dans
/var/spool/mail/$UTILISATEUR, puisque mailagent ne peut pas verrouiller ce répertoire pour empêcher le courrier
d'être brouillé. C'est parce que la politique Debian exige que toutes les entités
tenter de verrouiller ce répertoire sgid courrier, et en faisant agent de messagerie sgid
tout serait une faille de sécurité.
{ ENREGISTRER entrant } ;
est le fichier de règles minimal suggéré.
courirmax Délai d'attente pour les commandes RUN et les amis. (facultatif, par défaut : 3600).
scriptcc Indicateur indiquant si une copie de la transcription de la session SERVER doit être envoyée
à l'utilisateur exécutant mailagent. (suggéré : OFF).
sécurisée Lorsqu'il est défini sur ON, mailagent et le filtre C effectueront une sécurité étendue
vérifie les fichiers sensibles. Cela inclut les contrôles d'écriture du groupe,
les propriétés et les tests de protection sur le répertoire où réside le fichier, et
vérifie les liens symboliques vers les répertoires (mailagent uniquement, lorsque linkdirs est activé
trop). Notez que secure est supposé être activé, quel que soit son réglage réel, lorsque
exécuté en tant que super-utilisateur. (suggéré : ACTIVÉ).
sendmail Le nom du programme utilisé pour envoyer le courrier. Ce programme doit accepter le courrier
message avec des en-têtes sur son entrée standard et une liste de destinataires sur le
ligne de commande. Si non spécifié, utilisera le mailer choisi au moment de la configuration
(sendmail généralement). La ligne de commande utilisée pour envoyer un message sera sendmail
opter pour la messagerie adresse (s). (facultatif, suggéré : /usr/lib/sendmail).
envoyer des nouvelles Le nom du programme utilisé pour publier des nouvelles. Ce programme doit accepter les nouvelles
article avec des en-têtes sur son entrée standard. Si non spécifié, utilisera les nouvelles
programme d'affichage choisi au moment de la configuration (news généralement). La ligne de commande
utilisé pour publier un article sera envoyer des nouvelles -h newsop. (facultatif, suggéré :
/usr/local/bin/inews).
suivants Fichier utilisé pour calculer les numéros de travail (suggéré : .seq).
rép_serv Le nom du répertoire où sont stockées les commandes du serveur shell et perl. C'est le
lieu de recherche par défaut. Paramètre facultatif sauf si SERVER est utilisé. (suggéré:
$spool/cmds).
shell de service C'est le nom du shell utilisé pour lancer les commandes du shell SERVER (en fait pour
traiter le fichier wrapper qui exécutera finalement () la commande). Sur quelques
systèmes comme HPUX 10.x, cela doit être défini sur /usr/old/bin/sh pour obtenir le
vieux Bourne shell, parce que / Bin / sh est un shell POSIX insensé qui ferme le fichier
descripteurs supérieurs à 2 sur exec(), contrairement au shell Bourne.
(facultatif, suggéré : / Bin / sh sauf si vous êtes sur HPUX 10.x, comme expliqué précédemment).
bobine Répertoire de spool, requis (suggéré : ~/var/agent de messagerie).
fichier de statistiques Fichier où les statistiques doivent être recueillies. Si aucun fichier de ce type n'existe, aucune statistique
sera enregistré (suggéré : $spool/mailagent.st).
faire semblant Si oui ou non agent de messagerie devrait simuler une ligne To: dans l'en-tête du message lorsqu'il
est absent, qui sera utilisé à des fins de filtrage (pas d'altération physique de
l'en-tête se produisent). Il utilise Alternate-To : les en-têtes s'il est trouvé, sinon il suppose
le message a été envoyé à l'utilisateur et prend la valeur du utilisateur paramétrage
variable. (facultatif, par défaut sur ON, suggéré : ON ; désactivez-le uniquement si vous
vous voulez identifier les lignes To manquantes pour détecter le SPAM).
prendre Cette variable facultative peut contenir une liste séparée par des virgules de connexions alternatives
qui sont également valables pour l'utilisateur (alias de messagerie). Ceci est utilisé en mode vacances
pour vérifier si le courrier a été envoyé à l'utilisateur ou à une liste de diffusion. Correspondant à
est ancré sur le nom de connexion, donc dire "ro*" correspondra à la fois racine et rom.
suivre Régler on (insensible à la casse), cela active le -t option qui suit tous les
les correspondances de règle et les actions sur la sortie standard. Ceci est facultatif (suggéré :
DÉSACTIVÉ).
fuseau horaire La valeur du fuseau horaire pour la variable d'environnement TZ (facultatif).
rép.tmp Répertoire des fichiers temporaires. Obligatoire (suggéré : / Tmp).
umask umask par défaut qui est réinitialisé par agent de messagerie avant de traiter un message. Assumé
être décimal à moins de commencer par '0' (pour octal) ou '0x' (pour hexadécimal).
Le format octal est néanmoins le moyen le plus simple de le spécifier. (optionnel,
par défaut : 077).
utilisateur Nom de connexion de l'utilisateur qui exécute mailagent. Ceci définit la valeur de la macro %u.
vacances Un indicateur défini sur ON ou OFF pour changer le mode vacances en conséquence.
fichiervac Le nom du fichier à renvoyer en mode vacances (suggéré : ~/.vacances).
vacfix Lorsqu'elle est activée, toutes les modifications apportées au fichier de vacances (même localement) au moyen de la
Les commandes de VACANCES sont interdites. Ceci est utile si vous avez généralement plusieurs
messages de vacances personnalisés pour différentes personnes mais que vous souhaitez temporairement forcer
un message unique (facultatif, par défaut : OFF).
période de vide Le temps minimum écoulé entre deux messages d'absence à une adresse donnée
(suggéré : 1d).

Disponible Journal Niveaux
Les niveaux de journalisation suivants peuvent être utilisés lors de l'exécution de mailagent :

0 Pas d'enregistrement
1 Problèmes majeurs seulement
2 livraisons échouées
3 Livraisons réussies
4 messages différés
5 actions de filtrage réussies
6 Incidents inhabituels mais bénins
7 Messages d'information
8 Actions de filtrage de non-diffusion
9 Réception du courrier
12 Débogage
19 verbeux
20 Beaucoup plus verbeux

Bouchage Agent postal
Une fois que vous avez configuré mailagent dans un ~/.mailagent (OÙ ~ représente votre maison
répertoire), vous devez dire sendmail comment l'invoquer. Cela se fait en définissant un ~ /. avant
fichier qui ressemble à ceci (les guillemets doubles de début et de fin sont une partie obligatoire de
il):

"| exec /users/ram/mail/filter >>/users/ram/.bak 2>&1"

Cela dirigera tous vos e-mails vers le une fonction filtre programme, redirigeant tous les messages inhabituels vers
~/.bak. Un exemple de script shell de filtre peut être trouvé dans Lib/agent de messagerie, ainsi qu'un filtre C
programme. Sur certains systèmes, il peut être nécessaire de déplacer le '|' personnage avant le premier
citer, mais n'essayez pas ceci à moins que vous n'ayez pas d'autre choix (c'est-à-dire seulement en dernier recours).
Aussi, apparemment Exim fait exception à l'exécutif, et peut-être même à la redirection --
ce qui serait dommage.

Il est très important de rediriger les messages d'erreur vers un fichier de votre répertoire personnel.
D'une part, cela vous évitera des ennuis si des choses étranges commencent à se produire, mais
plus précisément, cela rend votre .vers l'avant fichier unique. Plus ancien sendmail programme, dans un
tentative héroïque d'« optimiser » la livraison, supprimera silencieusement les destinataires en double, et si un
le destinataire a un .vers l'avant, son contenu littéral est utilisé à la place de son adresse e-mail.
Par conséquent, deux destinataires locaux avec la même chaîne de filtrage seront considérés comme un seul
destinataire unique et un seul d'entre eux recevra le message...

Si votre système n'autorise pas la redirection du shell à partir du .forward, vous pouvez utiliser ceci
à la place (uniquement pris en charge par le filtre C) :

"| exec /users/ram/mail/filter -o /users/ram/.bak"

qui redirige en fait Stdout et stderr au fichier spécifié pour vous, en ajoutant des données
à la fin du fichier. Si le filtre exécute setuid ou setgid, vous ne serez pas autorisé à
créer le fichier, ni de l'ajouter à moins que le propriétaire du fichier soit le réal uid invoquant
le programme (pour des raisons de sécurité).

Notez que le .vers l'avant fichier ne fait que rediriger le courrier vers le une fonction filtre programme et ne quitte pas
toute copie dans la boîte aux lettres. C'est à vous de décider dans le fichier de règles si vous voulez
jetez le courrier ou laissez-le dans la boîte aux lettres. (Notez que sur les systèmes Debian agent de messagerie Vous pouvez
ne verrouille pas le répertoire de spoule, et le laisser laisser du courrier dans la boîte aux lettres peut l'amener à obtenir
brouillé). Si vous n'avez pas de fichier de règles (c'est-à-dire que vous avez laissé une entrée vide dans votre
~/.mailagent, ou vous avez nommé un fichier inexistant, ou votre fichier est simplement vide), le
l'action par défaut est de laisser le courrier dans la boîte aux lettres, ce qui n'est pas une bonne idée pour Debian
Machines. Veuillez installer un fichier de règles minimal dans tous les cas,
{ ENREGISTRER entrant } ;
est le fichier de règles minimal suggéré.

Autorisé Commandes
Le fichier de commandes autorisé (comme spécifié par le fichier variable dans votre ~/.mailagent)
contient toutes les commandes reconnues et autorisées. Le fichier commandes conservé dans le répertoire
Lib/agent de messagerie doit être copié tel quel dans votre répertoire Spool.

USP,EP, BP Votre en un clic
Maintenant, en supposant que vous ayez défini un ~/.mailagent fichier et édité la section de configuration
du système une fonction filtre, il est temps de tester votre installation. Assurez-vous que votre .vers l'avant est le monde
lisible et que le une fonction filtre a les bits d'exécution définis (il n'y a aucune raison de faire
une fonction filtre lisible par le monde). Définissez un niveau de journalisation de 20 et désactivez le mode vacances (le vacances
entrée dans le ~/.mailagent doit être éteint). Définissez le nom du fichier de règles sur un fichier
contenant une règle fourre-tout :
{ ENREGISTRER entrant } ;
Vous êtes prêt à continuer...

Envoyez-vous un courrier et laissez à l'agent de messagerie le temps de traiter votre courrier. Le sujet de la
le message devrait être « test » (en fait, tout sauf « Commande »). Vous voudrez peut-être exécuter un "queue
-f fichier journal" pour voir ce qui se passe. A la fin du traitement, le fichier journal devrait
contenir quelque chose comme ce qui suit (les noms des temporaires peuvent -et seront- bien sûr
différer; les horodatages ont été supprimés):

a le droit de traiter le courrier
création de règles par défaut
analyse du courrier
analyse du courrier
en mode 'INITIAL' pour TOUS
sélecteur 'All' sur '<1,->', pattern '/^Subject: [Cc]ommand/'
la correspondance '/^Subject: [Cc]commande/' sur 'All' (<1,->) était fausse
sélecteur 'All' sur '<1,->'
correspondant à . sur 'Tous' (<1,->) était vrai
enregistrement dans le dossier entrant
XEQ (QUITTER)
départ CONGÉ
démarrage de SAVE /home/ram/mail/incoming
ENREGISTRÉ [qm7831] dans le dossier entrant
FILTRE [qm7831] de bélier (Raphael Manfredi)
l'agent de messagerie continue
sorties de l'agent de messagerie

Si vous n'obtenez pas cela, il y a un problème quelque part. Commencez par regarder le ~/.bak filet
(ou n'importe quel fichier le .vers l'avant utilise pour rediriger la sortie du filtre). Si tu vois
quelque chose comme:

FATAL pas de répertoire de file d'attente valide
VIDÉO dans ~/mbox.filter

alors cela signifie le file paramètre dans votre ~/.mailagent n'indique pas une validité
annuaire. Votre courrier a été déposé dans une boîte aux lettres d'urgence.

Le manuel de formation ~/.bak fichier peut également contenir des messages d'erreur indiquant que perl n'a pas été trouvé. Dans ce
cas, il devrait y avoir un message d'erreur dans le fichier journal :

ERREUR mailagent échoué, [qm7886] laissé dans la file d'attente

Dans ce cas, assurez-vous que le courrier a été correctement mis en file d'attente dans un fichier qm7886. La queue
sera à nouveau traité lorsqu'un autre courrier arrivera ou lorsque le agent de messagerie est invoqué avec -q
(cependant, pour éviter les conditions de course, seuls les courriers restés un certain temps seront
traité).

La file d'attente du courrier se produit également lorsqu'un autre agent de messagerie est en cours d'exécution. Si le fichier journal dit :

droit de traiter le courrier refusé

puis retirez le perl.lock fichier dans le répertoire Spool. Les anciens fichiers de verrouillage sont automatiquement
rejeté par le agent de messagerie de toute façon (au bout d'une heure).

Si rien de tout cela ne se produit, alors peut-être sendmail n'a pas traité votre ~ /. avant du tout ou le
fichier a une erreur de syntaxe. Vérifiez votre boîte aux lettres, et si votre courrier s'y trouve, votre .vers l'avant
n'a pas été traité. Sinon, demandez à votre administrateur système de vérifier sendmail's
fichier journal. Une entrée correcte apparaîtrait comme (avec des horodatages et des tampons syslog en tête
supprimé):

id-message=[email protected]>
from=ram, size=395, class=0, reçu du local
to="| /york/ram/mail/filter >>/york/ram/.bak 2>&1", delay=00:00:05, stat=Envoyé

Si vous ne trouvez toujours pas pourquoi le courrier n'a pas été correctement traité, vous devez vous assurer
vous recevez normalement du courrier en supprimant (ou en renommant) votre ~ /. avant et vous envoyer
un autre courrier d'essai. Assurez-vous également que votre répertoire personnel est lisible et "exécutable".

Si vous utilisez le filtre C, assurez-vous qu'il s'exécute sur la bonne plate-forme. Il peut
être un acheminement de bas niveau de tout votre courrier vers un hôte de messagerie machine, responsable de la finale
livraison, et le programme de filtrage s'exécutera sur cette machine, ce qui peut être différent
plate-forme que celle sur laquelle vous avez compilé le filtre. Assurez-vous également que votre répertoire personnel est
monté sur cette machine, ou l'agent de transport de courrier ne pourra pas localiser votre
.vers l'avant fichier, moins le traiter.

Ce type de distribution centralisée du courrier n'est utile que lorsque quelques personnes ont le traitement du courrier
crochets (c'est-à-dire .vers l'avant fichiers redirigeant le courrier vers un programme); sinon il vaut mieux acheminer le courrier
au poste ou à la machine de chaque utilisateur, pour un traitement local, afin d'éviter une surcharge
charge de travail sur le hôte de messagerie machine, surtout s'il s'agit d'un serveur NFS dédié. Si vous êtes un
administrateur système installation agent de messagerie et attendez-vous à ce que beaucoup de gens l'utilisent, gardez cela dans
esprit.

OPTIONS


Il existe un ensemble limité d'options qui peuvent être utilisées lors de l'appel direct de l'agent de messagerie.
Une seule option spéciale à la fois peut être spécifiée. Appel de mailagent en tant que file d'attente is
équivaut à utiliser le -l option.

-c filet Spécifiez un autre fichier de configuration (~ la substitution se produit). Les
la valeur par défaut est ~/.mailagent.

-d L'agent de messagerie analyse le fichier de règles, compile les règles et les vide sur
la sortie standard. Cette option est principalement utilisée pour vérifier la syntaxe du
rule et assurez-vous que les règles sont ce que l'utilisateur pense vraiment qu'elles sont.

-e exclure Cette option vous permet de spécifier certaines règles sur la ligne de commande, qui
remplacer ceux spécifiés via le ~/.mailagent, si seulement. Il peut y avoir autant
-e si nécessaire, toutes les règles étant concaténées ensemble comme un heureux
tableau, qui est ensuite analysé de la même manière qu'un fichier de règles. Si seulement UN exclure
est donné et qu'aucune action n'est spécifiée entre {...} accolades, alors le
toute la ligne est entre accolades. D'où dire -e 'ENREGISTRER foo' sera
compris comme -e '{ENREGISTRER foo}', qui correspondra toujours et sera exécuté.
Le -d l'option en conjonction avec celle-ci est un moyen pratique de
déboguer un ensemble de règles.

-f fichier courrier En utilisant fichier courrier comme une boîte aux lettres de style UNIX (c'est-à-dire une boîte où chaque courrier est
précédé d'une ligne spéciale De indiquant l'expéditeur et la date du message
a été émis), extraire tous ses messages dans la file d'attente et les traiter comme si
ils étaient fraîchement arrivés du sous-système de distribution du courrier.

-F Forcer le traitement sur les messages déjà vus. D'habitude, agent de messagerie entre le
pour un spécial _VU_ état lorsqu'il détecte un Filtre X : ligne émise par elle-même,
mais cette option le fera continuer comme d'habitude (bien que les messages de vacances
sont désactivés). Utilisez cette option lors du post-traitement du courrier déjà filtré.
Regardez aussi le -U basculer si vous utilisez les actions RECORD ou UNIQUE dans
certaines règles.

-h Imprimez un message d'utilisation sur l'erreur standard et quittez.

-i Mode interactif, indique à l'agent de messagerie d'imprimer une copie de tous les messages du journal
on stderr.

-I Installer un ~/.mailagent fichier à partir du modèle, ou fusionner la nouvelle configuration
variables dans un fichier existant ; puis effectuez des vérifications d'intégrité et créez
fichiers ou répertoires obligatoires. Cette option peut être considérée comme une aide à
mise en place d' agent de messageriel'environnement. Dans tous les cas, la création/fusion
~/.mailagent fichier doit être vérifié manuellement avant de laisser agent de messagerie affaire
avec votre courrier en l'accrochant ~ /. avant.

-l Répertoriez la file d'attente de l'agent de messagerie. E-mails récemment mis en file d'attente qui sont attendus par le
une fonction filtre sommes-nous sauté pendant environ une demi-heure, pour éviter les conditions de course. Cette
peut être configuré via le mise en file d'attente variable. De très vieux messages (plus
que file d'attente secondes) sont signalés par un caractère '#'. Messages sortants
de la file d'attente (file variable) sont signalés par un '*', tandis que les anciens messages
hors de la file d'attente sont signalés par un '@'. Les messages verrouillés ont un '*'
annexé à leur statut.

-L niveau Remplacez le niveau de journalisation spécifié dans le fichier de configuration.

-o Commande Cette option vous permet de remplacer une option de configuration spécifique. L'option
doit être suivi d'une ligne de configuration valide, qui sera analysée après
le fichier de configuration lui-même. Par exemple, le -L 4 l'option est complètement
équivalente à -o 'niveau: 4'. Notez que tout espace blanc doit être protégé
contre l'interprétation du shell en utilisant le mécanisme de citation approprié.
Il peut y avoir autant -o options sur la ligne de commande si nécessaire.

-q Forcer le traitement de la file d'attente de l'agent de messagerie. Seuls les e-mails non étiquetés comme sauté
par le -l l'option sera traitée.

-r filet Spécifiez un autre fichier de règles.

-s {umaryt} Construisez un résumé de toutes les statistiques recueillies jusqu'à présent. La sortie peut être
contrôlé en ajoutant une ou plusieurs lettres de l'ensemble {umaryt}. À l'aide de
-sommaire est un moyen pratique d'obtenir l'historique complet du filtre
Actions. Les u le modificateur n'imprimera que les règles utilisées. Les m fusionnera tout
les statistiques à la fin pendant que a signale le mode dans lequel se trouvait le filtre lorsque
la commande a été exécutée. Les r demande des statistiques basées sur des règles et le y is
assez inutile et n'est là que pour obtenir une belle option mnémotechnique. Noter que
spécifier une option plus d'une fois n'a aucun effet sur l'option
lui-même (c'est-à-dire que vous pouvez mettre trois Uu et un seul m, mais vous aurez toujours le
sommaire!). Les t la lettre peut être suivie de chiffres spécifiant le nombre de règles
versions de fichier relatives au fichier de règles le plus élevé (le plus récent) que nous devrions
extraire des statistiques, ce montant par défaut à 1 : en utilisant -surate vont
imprimer un rapport statistique complet pour la dernière version de vos règles,
tout en -surt12a ferait de même pour les douze dernières versions de ces mêmes
règles.

-t Mettez mailagent dans un mode de suivi spécial où toutes les règles correspondent et
les actions exécutées sont imprimées sur la sortie standard. C'est surtout utile
pour déboguer un fichier de règles. Voir aussi le suivre paramètre dans la
fichier de configuration.

-V Imprimer le numéro de version et quitter.

-U Empêcher les commandes UNIQUE et RECORD de rejeter un déjà traité
Message-ID la première fois qu'ils sont exécutés sur un message donné. C'est utile
lors du traitement des messages qui ont été déposés dans le emergdir annuaire
en raison d'une condition anormale (mais transitoire) et que vous souhaitez retraiter
le message. Voir aussi le -F basculer si vous retraitez les messages.

Si vous invoquez mailagent sans options et sans arguments, le programme attend un
mail sur son entrée standard. Si un argument est fourni, il s'agit du nom d'un fichier contenant
un courrier à traiter. Il s'agit de la procédure d'appel normale du filtre, le
argument étant l'emplacement du courrier en file d'attente.

EN UTILISANT THE DEFAULT DES RÈGLES


Si vous ne souhaitez pas utiliser la fonction de filtrage de mailagent, (REMARQUE: Cela peut causer du courrier
être brouillé sur les systèmes Debian, car agent de messagerie ne peut pas verrouiller le répertoire spol sous
restrictions de la politique Debian), les règles intégrées par défaut seront utilisées. Ce sont
très simple : tous les mails sont laissés dans votre boite aux lettres et les mails avec une ligne "Objet :
Command" n'importe où dans le message sera traité. Les commandes sont recherchées sur les lignes
commençant par "@SH". Le reste de la ligne est ensuite transmis à un shell pour exécution.

Les commandes disponibles sont lues à partir d'un fichier (entrée fichier dans votre fichier de configuration), un
nom de la commande par ligne. Seuls ceux qui y sont répertoriés seront exécutés, d'autres produiront un
Message d'erreur. L'agent de messagerie intercepte l'état de sortie et enverra un rapport d'erreur si un
la commande échoue (à condition que la commande n'émette pas de message par elle-même, auquel cas
il devrait renvoyer un état de sortie zéro).

Si vous ne souhaitez pas utiliser les règles par défaut, vous pouvez ignorer le reste de cette section.

Configuration Aidez
Le texte d'aide que mailagent enverra aux personnes doit être copié à partir de Lib/mailagent/agenthelp
dans votre propre répertoire spool, comme spécifié dans votre ~/.mailagent. Deux macros peuvent être utilisées :

=DEST= Cela sera étendu à l'adresse de l'expéditeur (celui qui vous a envoyé le courrier
actuellement traité par mailagent).

=TAILLE MAX= Cela représente la taille maximale définie avant kit est utilisé pour renvoyer des fichiers
(paramètre taille max dans votre ~/.mailagent fichier).

Vous pouvez utiliser le fichier d'aide par défaut ou en concevoir un qui donnera encore plus de détails au
mauvais utilisateur.

Distribution Documents officiels
Les deux fichiers liste de prog et distribue qui s'est tenue à Lib/agent de messagerie décrivez les distributions que vous
mailagent sera en mesure de distribuer. Les exemples donnés montrent la syntaxe attendue. Dans
afin de clarifier les choses, voici quel devrait être le format :

Fichier liste de prog contient une petite description des programmes. Le nom du programme apparaît
après une seule étoile. Il est suivi de lignes au format libre. Une ligne à trois tirets en option
sépare la description de chaque programme. Notez qu'une tabulation de début sera ajoutée à chaque ligne
de description.

Le manuel de formation distribue fichier contient des lignes de la forme suivante :

nom de programme version chemin archivés comprimé patchs

où:

nom de programme est le nom du programme (le même que celui mentionné dans liste de prog).

version est le numéro de version actuel. S'il n'y en a pas, une ligne à trois tirets peut être utilisée.

chemin est le chemin où la distribution est stockée. Le ~ sera étendu à votre
répertoire personnel. Notez que si la distribution est stockée sous forme archivée, le
le nom du chemin est celui de l'archive sans l'extension de fin (qui peut être
.cpio.Z or .tar.Z).

archivés est soit y or n selon que la distribution est archivée ou non.

comprimé
est soit y or n selon que la distribution est compressée ou non.
Cela pourrait être deviné à partir du nom de l'extension, mais nous devons penser au fichier
systèmes avec des noms courts.

patchs is y or n selon que la distribution est maintenue ou non par vous. Si
tu mets un p, cela signifie que des correctifs officiels sont disponibles, bien que vous ne
maintenir la répartition. Enfin, un o signifie qu'il s'agit d'une ancienne version,
où seuls les correctifs sont disponibles, mais maildist ne fonctionnera pas. Dans ce cas,
en supposant que le numéro de version est 1.0, les anciens correctifs sont attendus dans un bogues-1.0
répertoire.

Vous pouvez inclure des commentaires dans les deux fichiers : toutes les lignes commençant par un # de tête seront
ignoré.

USP,EP, BP Votre Mail Agent
Il est maintenant temps de vous assurer que votre agent de messagerie fonctionne. Envoyez-vous le courrier suivant :

Objet : Commandement
@SH aide mail

Vous devriez recevoir en retour un e-mail de votre part avec pour objet : « Comment utiliser mon
mailagent". Si vous ne le faites pas, vérifiez le fichier ~/.bak (ou quel que soit le fichier que vous avez défini dans votre
.vers l'avant). S'il est vide, consultez le fichier journal. Si le fichier journal n'est pas vide, alors
peut-être que le courrier a été mis en file d'attente. Vérifier la sendmail file d'attente. Assurez-vous également que vous
supprimé les commentaires '#' dans le une fonction filtre scénario. Sur certains systèmes, ils causent des problèmes.
Si vous utilisez le filtre C, votre sendmail est peut-être cassé et vous devez créer le vôtre
setuid copy (ou perl pourrait se plaindre que vous ayez un bogue du noyau, etc...).

Si vous avez tout fait correctement mais que cela ne fonctionne toujours pas correctement, augmentez le niveau de journalisation
à 20 et renvoyez votre courrier de commande. Vérifiez ensuite le fichier journal. Le diagnostic doit être
Plus facile.

Une fois que cela fonctionne, vous devriez vérifier votre distribue et liste de prog fichiers en vous envoyant le
courrier suivant :

Objet : Commandement
liste de diffusion @SH

Si la liste que vous avez en retour est incorrecte, alors vos fichiers de distribution sont à tort
écrit. Si vous n'obtenez pas la liste, il y a un problème avec votre agent de messagerie
configuration. Réessayez avec un niveau de journal défini sur 20 et examinez les messages de journal émis dans
votre répertoire Log. Assurez-vous que le fichier répertorié dans le s'il vous plaît enregistrer l'entrée de votre
~/.mailagent est correctement mis à jour après un liste de diffusion a été exécuté.

EN UTILISANT THE FILTRE


Le manuel de formation agent de messagerie peut également être utilisé comme filtre : le courrier est analysé et certaines actions sont entreprises
basé sur de simples lex-comme des règles. Les actions vont d'une simple sauvegarde dans un dossier, une
transmission à une autre personne, ou même génération d'une commande shell. Avant d'aller plus loin,
voici un petit exemple de fichier de règles valide :

De : root { FORWARD postmaster } ;
À: [email protected] { POST mail.gue } ;
Objet : /metaconfig/ { SAVE dist } ;
{ ENREGISTRER entrant } ;

Il existe trois règles distinctes. Les règles sont appliquées dans l'ordre, jusqu'à ce que l'une corresponde (donc le
l'ordre est important). Tout courrier provenant de racine sera transmis à l'utilisateur maître de poste. A
courrier adressé à [email protected] est un courrier provenant d'une liste de diffusion. Le courrier est posté
sur un newsgroup local mail.gue. Les mails dont l'objet contient le mot "metaconfig" seront
enregistré dans un dossier dist pour une lecture différée et n'apparaîtra pas dans la boîte aux lettres principale. Sinon
règle correspond, le courrier est laissé dans le dossier entrant.

Règle Fichier Syntaxe
Voici une description non formelle du fichier de règles. L'analyse du fichier se fait lexicalement,
d'où le choix de jetons non ambigus comme '{' ou ';' qui sont facilement analysés. Cette
introduit quelques limitations qui sont appliquées silencieusement : par exemple, aucun '{' ne peut être utilisé
dans le cadre d'une adresse.

Les commentaires sont introduits par un '#' de début, qui doit être dans la marge de gauche. Contrairement à la coquille
commentaires, un '#' qui n'est pas justifié à gauche ne sera pas compris comme un commentaire. Cependant,
les espaces ou les tabulations sont autorisés devant '#'.

Toutes les instructions du fichier de règles doivent se terminer par un ';'. Il y a principalement quatre parties dans
chaque ligne. Une liste de modes séparés par des virgules, entre '<' et '>', qui donnent l'ensemble des
modes dans lesquels la règle s'applique. Le mode spécial ALL correspondra à tout. Le filtre
commence dans le mode INITIAL. Omettre le mode par défaut à " ". Il est possible de garder
une règle contre un mode spécifique en le niant, ce qui est fait en préfixant le mode avec
'!'. Les modes niés ont la priorité sur les autres modes simples, ce qui signifie " " ne sera jamais
égalé, jamais, et que " " est équivalent à " ".

Vient ensuite une liste de sélecteurs. Ces sélecteurs doivent être séparés par des espaces et se terminer par ':'.
Ils représentent les noms des champs d'en-tête qui doivent être consultés par le prochain
modèle. Une liste de sélection vide est par défaut « Sujet : ». Sélecteurs spéciaux « All : », « Corps : »
et « En-tête : » s'appliquent à l'ensemble du message, à son corps ou à son en-tête. Un sélecteur couramment utilisé
list est "To Cc:" qui teste les champs destinataires de l'en-tête. Si le nom du sélecteur est
précédé d'un point d'exclamation '!', puis la valeur logique du test pour ce sélecteur
est nié.

La liste des sélecteurs peut se terminer par une spécification de plage facultative, donnée sous la forme <min, max>,
avant le caractère ':' final marquant la fin de la liste de sélection. Le minimum ou le
maximum peut être donné comme '-', auquel cas il est remplacé par le minimum ou le maximum
valeur possible. Les indices de sélection commencent à 1 (pas à 0), par exemple : <3, 7>. Sinon
la sélection de plage est donnée, puis la valeur par défaut <1, -> est utilisé. Les plages sélectionnent normalement les lignes
dans le tampon de correspondance, à moins que le sélecteur n'attende une liste, auquel cas il
fonctionne sur les éléments de la liste. Par exemple, Les chuchotements <3, 5> : sélectionnerait les lignes #3 à #5
(inclus) du corps du courrier, alors que À Cc <1,3> : se concentrerait sur les trois premiers
adresses sur chaque ligne d'en-tête To: ou Cc:. Les valeurs négatives font référence à ce nombre de lignes ou
adresses de retour de la fin, c'est-à-dire Cc <-2,-> : sélectionne les deux dernières adresses sur le Cc :
ligne. Un seul numéro tel que est compris comme <2, 2>, c'est-à-dire qu'il ne sélectionne qu'un seul élément
dans la liste, <-> signifiant tout (et étant donc redondant).

Le sélecteur est ensuite suivi d'un motif entre '/' ou d'un nom unique. Afin de
faciliter l'écriture des règles, la sémantique d'un même nom varie selon les
sélecteur utilisé. Pour les sélecteurs spéciaux « De : », « À : », « Cc : », « Expéditeur : », leur
champs « Resent- », « Reply-To : », « Envelope : » et « Apparently-To : » associés
est compris comme une correspondance sur le vous connecter prénom de l'adresse. Notez que si aucun champ « À : » n'est
présent dans l'en-tête, l'un sera falsifié à partir du "Apparently-To:" dans le but de
filtrage uniquement (c'est-à-dire qu'aucune modification physique sur l'en-tête n'est effectuée). Si le nom de connexion de
l'adresse est un nom complet de la forme First.Last, seul le nom de famille est conservé, et est
en minuscule. Si un seul nom est donné, seuls les métacaractères du shell * et ? sommes
autorisés, ainsi que les intervalles [].

Si le motif est précédé d'un seul point d'exclamation '!', alors le statut de correspondance est
nié (c'est-à-dire qu'il réussira si le motif n'est pas trouvé). Si un seul mot est utilisé pour
sélecteurs non spéciaux, les mêmes règles s'appliquent mais le motif est ancré au début
et la fin pour une correspondance exacte. Avec un motif commençant par '/', toute expression régulière
compris par perl peut être utilisé et votre motif ne sera en aucun cas modifié. L'autre
le sélecteur spécial « Newsgroups : » fonctionne comme « À : », sauf que les noms des groupes de discussion sont attendus
et une correspondance est tentée sur chaque élément de la liste. Chaque motif correspond à un seul nom
pour un champ de type adresse (c'est-à-dire « Groupes de discussion : » exclus), sont rendus insensibles à la casse
mode. Sinon, vous pouvez forcer une correspondance insensible à la casse en ajoutant une fin i option,
un péché /motif/i.

Il y a aussi un peu de magie impliquée lors de la correspondance sur un champ d'adresse. A savoir, si le
modèle n'est pas un seul mot et est ancrés dans at le début, alors seulement la partie adresse
du terrain sera conservé. Par exemple, si nous avons un champ From : dont la valeur est Raphael
Manfredi <[email protected]>, puis le motif /Raphaël/ correspondrait, mais pas /^Raphaël/.
Au lieu de cela, /^ram@.*$/ correspondrait, mais cela se fait plus facilement avec un seul modèle de mot
écrasement, car il se concentre uniquement sur le nom de connexion de l'adresse et correspondrait également si le
l'adresse a été écrite comme eiffel.com!ram. Une adresse unique sous forme Internet, comme dans
[email protected] correspond implicitement à la partie adresse du champ, et vous ne devez pas
échapper au '.' comme vous auriez dû le faire dans une expression régulière.

Cela peut sembler un peu complexe, mais cette conception est destinée à rendre les choses plus faciles pour le
utilisateur. Voici d'autres exemples :

# Rencontre [email protected] ainsi que [email protected].
De : bélier

# Rencontre [email protected], écrasement mais pas [email protected]
De : r[oa]*

# Rencontre [email protected] mais pas [email protected]
A Cc : /^gue@eiffel\.fr/

# Cela correspondra [email protected] ainsi que [email protected]
En Cc : /gue@eiffel/

# Rencontre comp.lang.perl mais pas comp.lang.perl.poésie (?)
Groupes de discussion : comp.lang.perl

# Acceptez tout sauf les messages provenant de racine
De : !root

Lors d'une tentative de correspondance sur « À : », « Cc : » ou « Apparently-To : », une liste d'adresses séparées
par une virgule est attendue, alors qu'une seule adresse est attendue après "De :". Si vous omettez
le motif, il sera compris comme * (rappelez-vous qu'un seul mot utilise shell meta-
caractères), qui correspondra à n'importe quoi.

Vient ensuite l'action à entreprendre lorsqu'un match se produit. Il n'y a qu'un ensemble limité de
actions valables qui seront décrites prochainement en détail. L'action est entourée de bouclés
accolades '{' et '}' et les actions sont séparées ou terminées (selon votre goût) par un
';'. Les noms d'action sont écrits en majuscules pour plus de lisibilité, mais la casse n'a pas d'importance. Si
vous voulez mettre un ';' dans la règle, il doit être échappé en le faisant précéder d'un
barre oblique inverse. Une double barre oblique inverse est traduite en une seule, et tout autre échappement
la séquence impliquant la barre oblique inverse est ignorée (c'est-à-dire que \n serait conservé textuellement).

Notez qu'une règle doit se terminer par un seul ';' après le dernier '}'. Il est possible de
omettre ce ';' final, mais ce jeton unique est le point de resynchronisation pour l'erreur
récupération. On pourrait cependant faire valoir qu'il ne devrait pas y avoir d'erreur de syntaxe, et donc le ';'
doit être omis en toute sécurité. En cas de doute, vérifiez votre fichier de règles avec le -d option.

Voici une règle prototypique (en utilisant perl expressions régulières; veuillez vous référer au
sous-section Régulier Expressions pour plus d'informations):

De : /^\[email protected]$/ { SAUVEGARDER eiffel } ;

Cette règle ne sera prise en compte que lorsque le filtre est en mode ROOT (rappelons que
le traitement démarre en mode INITIAL ; utilisez BEGIN pour changer de mode, comme dans lex). Donc dans
mode ROOT, tout ce qui vient d'un utilisateur situé dans le eiffel.com le site est enregistré dans
dossier eiffel pour lecture différée. Le courrier n'apparaîtra pas dans la boîte aux lettres.

Il est possible d'avoir plus d'une sélection pour une règle. Des sélecteurs identiques sont
logiquement or'ed tandis que d'autres sont et'ed. Les sélections sont séparées par des virgules. Pour
exemple,

De : root, À : ram, De : ram, Objet : /\btest\b/ { DELETE } ;

supprimera un e-mail de racine or écrasement s'il est envoyé à écrasement et a le mot tester dans sa
matière. Il est également possible d'écrire la règle précédente sous la forme :

De : root, ram, À : ram, Objet : /\btest\b/ { DELETE } ;

car si aucun sélecteur n'est donné, le précédent est utilisé (le premier sélecteur étant
« Sujet : » par défaut).

N'importe où dans le fichier de règles, il est possible de définir des variables. La liste des reconnus
les variables sont données plus tard. Pour l'instant, disons que répertoire de messagerie est le répertoire du dossier par défaut.
Cette variable est utilisée par la commande SAVE lorsque l'argument n'est pas un chemin absolu.
Paramètres

rép_mail = ~/courrier;

dirigera le filtre à utiliser ~/courrier comme répertoire du dossier (la valeur par défaut est ~/Courriel). Noter la
~ substitution et le ';' final. Il n'est pas possible (actuellement) de modifier l'environnement
en définissant PATH par exemple.

Enfin, il existe une construction spéciale pour charger des modèles à partir d'un fichier. Un modèle enfermé dans
guillemets doubles signifie que les modèles à appliquer doivent être tirés des
déposer. Le fichier devrait être dans le répertoire filtre de courrier si ce n'est pas un chemin absolu
(~ la substitution se produit). Si la variable n'est pas définie répertoire de messagerie sera utilisé. Si par hasard (!)
répertoire de messagerie n'est pas défini non plus, le répertoire personnel est utilisé. Le fichier doit contenir un modèle
par ligne, les commentaires shell (#) étant autorisés au début de chaque ligne.

Une action peut être suivie d'autres règles. Par conséquent, ce qui suit est parfaitement valable :

À partir de
bélier { SAUVEGARDER bélier }
/plc/i { SAUVEGARDER plc }
racine { ENREGISTRER ~/administrateur }
/xyz/ { SUPPRIMER }
"utilisateurs" { QUITTER }
;

Notez l'utilisation de l'inclusion de fichier : tous les utilisateurs répertoriés dans le fichier des opportunités auront leur
courrier laissé dans la boîte aux lettres système. Les règles habituelles s'appliquent pour ces motifs chargés.

Sélecteur Combinaison
Une même règle peut avoir plusieurs ensembles de sélecteurs. Par exemple, dans la règle suivante :

De : ram, Vers Cc : root, !Sujet : /test/, De : raphael

nous avons l'ensemble suivant { From, To Cc, !Subject }. Les deux premiers sélecteurs sont appelés
sélecteurs, !Subject : est appelé un annulé sélecteur. Le sélecteur To Cc: est un groupe
sélecteur se décomposant en deux sélecteurs, tandis que From : est un atomique sélecteur.
Enfin, From: est aussi un sélecteur avec plusieurs occurrences. le Plus-value d'un sélecteur est
sa valeur logique d'état correspondant.

Laisser nous D être l'ensemble des sélecteurs directs et N l'ensemble des sélecteurs niés, qui forment un
partition de R, l'ensemble de tous les sélecteurs de la règle. C'est-à-dire, R est le syndicat
of D et Net D croisé avec N est l'ensemble vide (preuve triviale : un sélecteur est soit
directe ou niée). Si soit D or N est vide, alors ce n'est pas une partition mais dans ce cas
nous avons soit D = R ou sinon N = R.

Définissons la valeur logique d'un ensemble S comme étant la valeur logique que le filtre
retourner si ces règles ont été réellement écrites. Alors la valeur logique de D est la logique
valeur de chacun de ses éléments avec l'opérateur logique ET réparti entre eux, c'est-à-dire le
la valeur logique de { a, b, c } est la valeur de (a ET b ET c). Écrivons-le ET(D). La
la valeur logique de chacun des éléments est la valeur logique du sélecteur lui-même s'il est
pas multiple, ou c'est la valeur logique de toutes les occurrences du sélecteur multiple
dans la règle, avec l'opération OU logique répartie entre eux. C'est-à-dire en
l'exemple ci-dessus, la valeur de From est vraie si les champs From : contiennent écrasement OR raphael.
Écrivons que OR[From].

Pour être solide, nous devons appliquer la loi de De Morgan sur N, d'où les règles suivantes : la logique
valeur de N est OU(N) et étant donné un sélecteur nié s, sa valeur logique est AND[s]. Et
enfin, la valeur logique de R est celle de D ET N, avec par convention ayant la logique
valeur de l'ensemble vide soit oui.

Pour ceux qui ne connaissent pas la loi de De Morgan, la voici : étant donné deux propositions logiques p
et q, alors les identités suivantes se produisent :

NON (p ET q) <=> (NON p) OU (NON q)
NON (p OU q) <=> (NON p) ET (NON q)

Tant qu'on est dans la logique des propositions, notons aussi que OU et ET sont mutuellement
distributive, c'est-à-dire étant donné trois propositions logiques p, q et r, on a:

p ET (q OU r) <=> (p ET q) OU (p ET r)
p OU (q ET r) <=> (p OU q) ET (p OU r)

Pour être complet, OU et ET sont associatifs avec eux-mêmes et commutatifs. Et le B set
{ 0, 1 } équipé de l'ensemble des opérations (PAS, OU, ET) est un algèbre (un booléen).
Je vous épargne la définition d'une algèbre, qui n'a vraiment rien à voir dans ce
page de manuel (qui est pour un agent de messagerie, au cas où vous ne vous en souvenez pas :-).

Le lecteur attentif aura certainement noté que je n'ai pas précisé la valeur logique
d'un sélecteur de groupe. Eh bien, étant donné un sélecteur de groupe G, on le décompose en un DG et NG
cloison, DG étant le sous-ensemble des sélecteurs directs (atomiques) de G et NG étant le sous-ensemble
de sélecteurs (atomiques) niés. Alors la valeur logique de DG est OU(DG) et la logique
valeur de NG est et(NG); la valeur logique globale de G étant celui de DG OR NG. Au cas où
non plus DG or NG est vide, alors nous n'avons pas de partition, mais par convention la valeur de
l'ensemble vide est non, et l'un des ensembles est égal à G. A noter qu'au sein d'un groupe
sélecteur, les règles sont exactement le duel des règles au sein R.

Maintenant, la seule règle qui n'est pas logique est de savoir si un sélecteur de groupe appartient à D or N. j'ai
choisi, pour des raisons d'analogie, de faire appartenir le sélecteur de groupe à D s'il ne démarre pas
par '!' et à N autrement. C'est-à-dire que !To Cc : appartient à N tandis que Cc !To : appartient à D.
En dehors de cela, l'ordre au sein du sélecteur de groupe n'a pas d'importance : To Cc : équivaut à Cc
To:, donc le comportement dans l'ensemble de quotients est sain.

Voici quelques exemples:

# Correspond à n'importe quoi : (pas de ram OU pas de root) est toujours vrai.
De : !ram, !root

# Faire correspondre n'importe quoi mais rejeter les e-mails provenant de la RAM OU de la racine
!De : ram, racine

# Rejeter les mails dont les en-têtes correspondant à /^Re.*/ contiennent le mot test
!^Re.* : /\btest\b/

# Conserver les mails dont le sujet contient tester ET hôte
!Objet : !/test/, !/hôte/

# Correspond si écrasement est répertorié dans le À Ou la Cc en ligne
Vers Cc : ram

Un petit peu En-tête
Un ensemble minimal de sélecteurs est garanti, quel que soit l'en-tête réel de
le message. Ceci est uniquement dans le but de filtrer, aucune altération physique n'est
effectué.

Enveloppe: Il s'agit de l'adresse trouvée dans l'enveloppe du courrier, c'est-à-dire l'adresse où le courrier
semble provenir de. Cela peut être différent de la À partir de champ d'adresse si
le courrier provient d'un confiance utilisateur, dans la terminologie de sendmail. Si vous ne
savoir ce que c'est, ignorez-le simplement.
À partir de Utilisateur qui a écrit le courrier. Si cette ligne est manquante, utilise l'adresse trouvée dans le
première ligne De.
Longueur: La longueur physique du corps, en octets, une fois le codage de transfert de contenu (si
any) a été supprimé.
Lignes: Le nombre de lignes dans le corps (décodées, si nécessaire).
À: Le(s) destinataire(s) principal(aux) du message. Si cette ligne est manquante mais qu'un ensemble de
Apparemment-À : lignes est trouvée, alors ces adresses sont utilisées à la place. Si non
existe, alors supposez que le courrier a été dirigé vers l'utilisateur (ce qui semble un
hypothèse raisonnable :-).
Expéditeur: Utilisateur qui a envoyé le courrier. Cela peut différer de la À partir de ligne. Si aucun champ de ce type
existe, alors l'adresse de la première ligne De est utilisée (enveloppe de courrier).
relayé : Cet en-tête calculé est une liste séparée par des virgules de tous les hôtes où le
message a été relayé, dans le bon ordre de transmission. Chaque élément de cette liste
peut être un nom de machine tel que mail.hp.com ou une adresse IP telle que
[15.125.38.12]. La liste est dérivée du reçu: lignes présentes dans le
par voie électronique.
Répondre à: Où toute réponse doit être envoyée. Sinon Répondre à: champ est présent, alors le
Chemin de retour est utilisé (avec <> supprimé), ou le À partir de la ligne est analysée pour
extraire l'adresse e-mail de l'auteur.

Variables
L'agent de messagerie prend en charge les variables définies par l'utilisateur, qui sont globales. Ils sont définis via le
commande ASSIGN et référencée avec la macro %#. En supposant que nous définissions une variable hôte, puis
%#hôte serait remplacé par la valeur réelle de la variable. Cela permet à certaines variables
propagation à travers les règles.

Par exemple, disons que l'utilisateur reçoit des sorties cron de diverses machines et souhaite
enregistrez-les machine par machine, en différenciant les sorties quotidiennes des sorties hebdomadaires.
Voici une solution :

Objet : /sortie pour l'hôte (\w+)/ { ASSIGNER l'hôte '%1' ; REJETER } ;
Objet : /^Sortie quotidienne/ { SAVE %#host/daily.%D } ;
Objet : /^Sortie hebdomadaire/ { SAVE %#host/weekly.%m-%d } ;

Outre l'interpolation des variables via l'échappement %#, il est également possible d'effectuer
substitutions et traductions sur le contenu d'une variable (ou une référence arrière, c'est-à-dire une
nombre entre 1 et 99). Les deux commandes SUBST et TR s'exécuteront respectivement sur place
substitutions et traductions. Dans ce cas cependant, le nom de la variable doit être
précédé d'un seul #. Cela différencie la référence arrière 1 de la variable #1,
bien que 1 est un nom amusant pour une variable. La nécessité de # empêche également l'erreur commune
d'écrire %#, car mailagent se plaindra bruyamment si le premier paramètre de SUBST ou TR est
pas un chiffre entre 1 et 99 ou ne commence pas par un #.

Voici quelques actions pour canoniser le nom d'hôte en minuscules et supprimer le
nom de domaine, le cas échéant :

{ TR #hôte /AZ/az/; SUBST #hôte /^([^.]*)\..*/$1/ };

Ces actions se traduisent directement dans leur perl équivalent, et toute erreur dans le
la spécification de l'expression régulière sera signalée.

Si le nom de la variable commence par deux points ':', alors la variable est rendue persistante. Cette
c'est-à-dire qu'il conservera sa valeur à travers les différentes invocations de l'agent de messagerie. La variable est
simplement stocké (avec le premier ':' supprimé) dans la base de données de mailagent et est donc sujet
à la politique du vieillissement mise en place dans le ~/.mailagent.

Dans les commandes PERL ou les mail hooks utilisant perl (voir la section MAIL HOOKS), vous pouvez
manipuler ces (soi-disant) variables externes via un ensemble de fonctions d'interface situées
dans le externe package (c'est-à-dire que vous devez préfixer chaque nom de fonction avec son package
prénom, set devenir ensemble externe). Les trois fonctions d'interface suivantes sont fournies :

val(nom) Renvoie la valeur de la variable prénom (le ':' de début ne fait pas partie du nom,
dans l'une de ces trois fonctions d'interface).

set(nom, valeur)
Définir la variable externe prénom de tenir Plus-value. Aucune interprétation n'est faite par le
fonction sur le contenu réel de la Plus-value vous fournissez.

age(name) Renvoie l'âge de la variable, c'est-à-dire le temps écoulé en secondes depuis le dernier
modification apportée par set.

Il n'existe actuellement aucun moyen d'effacer une variable de la base de données. Mais si vous n'utilisez pas
la variable plus, elle sera supprimée lorsque son âge deviendra supérieur au maximum
âge spécifié par le âge max variable de configuration.

Régulier Expressions
Toutes les expressions régulières suivent la syntaxe V8, comme dans perl, avec tous les perl
prolongements. Si une construction entre crochets (...) est utilisée à l'intérieur d'une règle, alors le %chiffre macro
correspond à la chiffrela sous-chaîne de 's détenue à l'intérieur du crochet. Toutes ces références arrière sont
mémorisé règle par règle, numérotée de gauche à droite. Cependant, une grande prudence doit être
prise lors de l'utilisation d'une référence arrière dans les sélecteurs de présence multiple, car toutes les correspondances seront
être effectuée jusqu'à la première correspondance, et les références arrière sont calculées à la volée tandis que
faire des correspondances de motifs.

Par exemple:

À : /(.*)/, Objet : /Sortie de (\w+)/ { ASSIGN to '%1' ; ENREGISTRER %2 } ;

enregistrera le champ À : dans la variable « à » et enregistrera le courrier dans un dossier dérivé du
nom d'hôte spécifié dans l'objet. Cependant, si nous disons :

Objet : /host (\w+)/, /from (\w+)/ { ASSIGN match '%1' } ;

alors il n'y aura qu'un seul ensemble de références arrière, et il viendra du premier modèle
correspondant s'il réussit, ou à partir de la seconde. Si le deuxième ou le premier motif a
aucune construction de bracketing et correspond toujours, alors la référence arrière ne serait pas enregistrée à
all, ce qui signifie que ce qui suit n'est probablement pas ce que vous voulez :

Objet : /de/, /hôte (\w+)/, À : /(.*)/ { SAVE %1 ; REJETER } ;

comme si le modèle /from/ correspond alors /host (\w+)/ ne sera pas vérifié (identique
les sélecteurs sont or'ed et qui est optimisé), alors %1 ferait référence au champ À : alors que
si /host (\w+)/ correspond, alors %1 sera le nom d'hôte.

Cependant, ce comportement peut être utilisé pour stocker de manière sélective un article de presse qui a été
envoyé par courrier dans un dossier dont le nom est le nom du groupe de discussion sous forme de points. En supposant que nous voulons
pour donner la priorité à comp.lang.perl, on pourrait dire :

Groupes de discussion :
/(comp.lang.perl)/,
/(comp.mail.mh)/,
/(comp.compilateurs)/,
/([^,]*)/ { SAUVEGARDER %1 };

Un article posté à la fois sur comp.lang.perl et comp.mail.mh serait enregistré dans un
dossier comp.lang.perl, car c'est ce qui correspondrait en premier. Les dernières règles s'occupent de
autres articles : le dossier utilisé étant le groupe de discussion qui apparaît en premier.

Il existe également une macro spéciale %&, qui répertorie (c'est une liste séparée par des virgules) tous les
sélecteurs spécifiés via une expression régulière qui correspondait effectivement. Par exemple:

Re.* : /york/ { ASSIGN qui '%&' } ;

attribuerait à qui la liste de tous les champs correspondant au modèle /Re.*/ qui
contenait 'york', qu'il s'agisse d'un champ Received : ou d'un champ Resent-From : (car les deux correspondent au
spécification du sélecteur). En supposant que ces deux champs contiennent le mot york, la valeur de
%& serait 'Reçu, renvoyé de;' (les champs sont triés par ordre alphabétique).

Si vous avez plusieurs de ces sélecteurs spécifiés dans une même règle, il se peut qu'il
vaut la peine de savoir que tous les ensembles de sélecteurs correspondants sont enregistrés dans %&, chaque ensemble
terminé par un ';'. Si un sélecteur nié est utilisé, alors %& enregistrera tous les champs
qui ne contenait pas le motif, en supposant que la sélection a réussi (sinon rien n'est
enregistré).

Disponible Actions
Les actions suivantes sont disponibles en tant que commandes de filtrage. L'affaire n'est pas pertinente bien que le
le style recommandé est de les épeler en majuscules. Comme expliqué plus loin, la plupart des actions
enregistrer leur statut de sortie dans une variable spéciale qui peut être testée via le -t et -f
options d'ABORT, REJECT et RESTART. Pour chaque commande renvoyant un tel état de sortie, le
les conditions d'échec ou de réussite sont indiquées à la fin de chaque description. Si rien n'est
spécifié, la commande ne renvoie pas un état significatif.

AVORTER [-tf] [mode]
Abandonnez immédiatement l'application des règles de filtrage. Voir REJETER pour la signification de
les paramètres facultatifs. (Ne modifie pas le statut existant)

APRÈS [-sanc] (temps) action
Enregistre un rappel après le spécifié Paisible, Où action sera réalisée.
Par défaut, une action de filtrage de l'agent de messagerie est supposée (-a option), sur le courant
message électronique. Une commande shell (-c) peut être donné à la place, recevant le courant
message électronique comme entrée standard. Enfin, une simple commande shell peut être exécutée (avec
pas d'entrée) en utilisant le -s option. L'option -n peut être utilisé lorsque le courrier actuel
le message n'a pas besoin d'être conservé pour la saisie. Par exemple:

APRÈS -un (1 jour) FAIRE ~/processus:proc'run(%u)

appellerais proc'exécuter défini dans le ~/processus fichier dans un jour, sans
donner aucune entrée (l'action ici n'en nécessite aucune).

Lors de l'exécution des commandes mailagent, le mode de fonctionnement initial est défini sur _CALLOUT_.
Cela peut avoir une importance si vous appelez APPLY par exemple. Si le temps enregistré est inférieur ou
égale à l'heure actuelle (qui est maintenant), le rappel se produira lorsque
mailagent a terminé avec les messages dans sa file d'attente, avant de quitter. Ceci permet
pour l'astuce mignonne suivante, découverte par Randal Schwartz :

APRÈS (maintenant) # fork une copie que je peux mutiler
STRIP Répondre à \; RESYNC \;
ANNOTER -du Répondre à %2 \; RESYNCHER \;
NOTIFIER message %r \; EFFACER \;
;

Notez que la commande n'est pas appelée AT car l'appel ne sera effectué que
lors de la prochaine invocation de l'agent de messagerie après l'expiration du délai spécifié. Les dates sont
spécifié en utilisant le même format que dans SELECT. (Echoue si l'action ne peut pas être
enregistré dans la file d'attente).

ANNOTER [-du] champ Plus-value
Annoter le message en ajoutant champ dans l'en-tête du courrier, avec le Plus-value.
C'est comme la commande MH année, mais l'annotation est effectuée à la fin de
l'en-tête, alors que MH le fait en haut. Normalement, un supplément champ est ajouté,
avec la date du jour comme valeur de champ.

Ceci peut être supprimé en utilisant le -d option. Si Plus-value est omis, seul le
le champ de date est généré (c'est donc une erreur d'utiliser le -d option sans
fournissant un Plus-value). Comme pour toutes les commandes qui modifient l'en-tête, un RESYNC est
nécessaire pour que la partie filtre voie réellement le nouvel en-tête.

Le manuel de formation -u L'option signifie "unique", et empêche ANNOTATE de s'exécuter si le
spécifié champ est déjà présent dans l'en-tête. N'oubliez pas de RESYNC entre
commandes ANNOTATE successives utilisant cette option si le champ fait référence à un précédent
ANNOTER la cible. (Échec lorsqu'aucune annotation n'a lieu)

APPLIQUER fichier de règles
Obtenez les règles tenues dans fichier de règles et les appliquer au message actuel. le
le filtre commencera dans le mode dans lequel vous étiez lors de l'utilisation de cette commande, mais pas de flux
retour se produira, c'est-à-dire que tout changement de mode sera perdu au retour de la
commander.

Les variables (voir la macro %#) sont propagées dans les deux sens via APPLY,
ce qui signifie que vous voyez les variables définies par l'appelant, et vous pouvez modifier leurs valeurs ou
créer de nouvelles variables que l'appelant pourra utiliser ultérieurement.

Si le courrier est enregistré lors de l'application des règles, alors le
flag est défini dans le filtre principal (celui qui a lancé la commande APPLY). Tu peux
les imbriquer, bien sûr. (Échec si le courrier n'est pas enregistré par les règles contenues dans
fichier de règles)

ASSIGN var Plus-value
Affectez la valeur à la variable définie par l'utilisateur var, qui peut en outre être consulté
as '%#var' pour la substitution macro ou #var dans les commandes TR et SUBST en place
du nom de la variable. Notez qu'il n'y a pas de début # devant la variable
prénom. le Plus-value que vous fournissez est d'abord parcouru perl pour voir s'il en contient
opérations arithmétiques. Si l'évaluation est réussie, la valeur résultante est
utilisé à la place. Si une erreur se produit dans ce processus d'évaluation, alors le littéral
la valeur fournie est utilisée. Pour éviter l'évaluation, vous pouvez joindre l'ensemble
valeur entre guillemets simples. Ceux-ci seront rognés avant que la mission n'ait lieu.
Si vous voulez réellement des guillemets simples en première ET en dernière position, vous devez
doubler chacun d'eux. (Ne modifie pas le statut existant)

RETOUR commander
Exécution commander et prendre sa sortie comme de nouvelles actions à effectuer sur le courrier
(donc effectuer quelque chose d'analogue à `commande` en coquille). Si il n'y a pas
sortie, rien n'est fait. Les commandes BACK peuvent être imbriquées, bien que cela puisse conduire à
surprend que cette page de manuel ne sera pas divulguée (mais je vous assure que ce sera drôle,
en supposant que nous ayons le même sens de l'humour... :-). Notez que la norme
la sortie et l'erreur standard de la commande sont utilisées.

Si la commande échoue, la sortie est renvoyée à l'utilisateur et aucune action n'est
effectué. De plus, il n'y a pas de retour normal ici : toute sortie du
la commande est prise en tant qu'actions de filtrage, ce qui signifie que la sémantique de PASS, par
exemple, est modifié : on ne reprend pas un corps mais des commandes. (L'exécution
le statut est celui du commander)

BIP [-l] compter
Cette commande peut être utilisée pour régler la quantité de bips émis lors du bip sur le
borne, pour chaque %a expansion. Par défaut, ce montant est défini sur 1. À l'aide de la
-l L'option modifie le nombre de bips localement pour la règle. Sinon, la valeur par défaut
le montant est modifié.

Notez que cela développe simplement %a dans le nombre approprié de caractères Ctrl-G.
Votre terminal doit être autorisé à émettre des sonneries consécutives pour que cela fonctionne. Très
souvent, les terminaux sont configurés de manière à ce que la première sonnerie reçue désactive davantage
bips pendant une certaine période, pour éviter les cascades de cloches. Si tu utilises xterm pour
exemple, vous devez utiliser :

xterm -xrm "XTerm*BellSuppressTime : 0"

pour activer des sonneries consécutives. Autrement, xterm va les avaler pendant 200 ms,
rendant ainsi la commande BEEP inefficace, apparemment. (Ne modifie pas
statut existant)

COMMENCER [-pi] Etat
Entrez dans un nouvel état. Un REJECT ou un RESTART explicite est nécessaire pour annuler le
traitement de la règle en cours. Le traitement commence à l'état INITIAL. Si
le -f (resp. -t) est spécifié, alors le changement d'état ne se produit que si le
l'état de la dernière commande indiquait un échec (resp. un succès). Un nom d'état peut
contenir des caractères alphanumériques et des traits de soulignement. (Ne modifie pas l'existant
statut)

BIF [-l] sur|hors|chemin
Autoriser ou interdire le biff dynamiquement. Lorsque le biff est activé via le
fichier de configuration ou via cette commande, un message est imprimé sur certains
terminaux où l'utilisateur est connecté lorsque le courrier est reçu, comme expliqué sous le
MAIL BIFFER.

Au lieu de on or de rabais, vous pouvez spécifier un nom de fichier (~ substitution autorisée) étant
le nouveau chemin à utiliser pour le modèle de format biffing.

Si vous utilisez le -l option, les modifications sont apportées localement, pour la durée de la règle
seul. Si vous REJETEZ d'aller à une autre règle, vos modifications seront perdues. le
la valeur globale des paramètres modifiés est modifiée lors de la première utilisation locale et
restauré lorsqu'une nouvelle règle est entrée. (Ne modifie pas le statut d'exécution)

REBONDIR adresse (s)
Renvoyez le message à la ou aux adresses spécifiées et agit comme si une sauvegarde avait été
Fini. La seule différence avec FORWARD est qu'aucune ligne de type Resent n'est ajoutée à
l'en-tête. Si une adresse est indiquée entre guillemets, elle est prise comme nom
d'un fichier à charger pour obtenir des adresses (une adresse par ligne, commentaires shell
(#) permis). La résolution du nom de fichier est la même que celle utilisée pour le modèle
Chargement en cours. (Échec si le courrier ne peut pas être renvoyé)

DO routine [(arg1, argument2, ... , arg)]
Appelle le perl routine, avec les arguments fournis le cas échéant. C'est un très faible
crochet de niveau dans agent postal interne. La routine peut être spécifiée par elle-même
(nom du paquet, paquet qui est principal par défaut) ou identifié par un Étiquette,
suivi d'un ':', puis du nom de la routine comme précédemment. le Étiquette peut être un chemin vers un
fichier où la routine est définie, ou un nom de commande (pour les commandes définies par l'utilisateur
qui sont chargés dynamiquement). Par exemple

DO UNKIT:newcmd'unkit('true')

rechercherait le défini par l'utilisateur UNKIT commande, charge le fichier où il est défini
(dans le nouveaucmd package), puis appelez la routine avec 'vrai' comme argument. Les
paquet spécifié détermine où le chargement est effectué, alors assurez-vous qu'il est
cohérente avec la définition dans le fichier où la routine est définie. (Échoue
si la routine ne peut pas être localisée et exécutée)

SUPPRIMER Supprime le message actuel. En fait, cela ne fait rien, cela marque juste
le courrier comme enregistré. Si aucune autre action impliquant l'enregistrement n'est effectuée, le courrier
n'apparaîtra jamais dans la boîte aux lettres. (N'échoue jamais)

NOURRIR [-être] Programme
Envoyez l'intégralité du message à un programme et récupérez le résultat en tant que nouveau message.
Par conséquent, le programme apparaît comme un filtre pour l'ensemble du message. ça ne marque pas
le message comme ayant été enregistré. Une RESYNC est effectuée automatiquement au retour.
(Renvoie l'état de Programme)

AVERTISSEMENT: Votre programme doit être capable d'analyser correctement un message MIME et doit
traiter par lui-même les corps codés par transfert. Pour simplifier la tâche du programme,
vous pouvez fournir le -b commutateur qui permettra à mailagent de décoder tout le corps pour
vous, en supprimant tout en-tête Content-Transfer-Encoding (impliquant "binaire"). Cette
est un format de message invalide pour l'envoi du message, mais il rend le traitement
Plus facile. Cependant, vous devez toujours analyser les parties MIME vous-même.

En utilisant -b n'empêche pas votre programme de renvoyer un message valide, un
qui peut être éventuellement envoyé sur le réseau donc vous avez deux possibilités : soit vous faites
ne fournir aucun Content-Transfer-Encoding dans les en-têtes, et mailagent
recoder le corps pour vous en utilisant l'encodage de transfert initial présent dans le
message (une option relativement sûre si vous n'apportez que des changements dans le corps à bien-
spots définis sans introduire de caractères 8 bits), ou vous pouvez fournir le contenu-
Transférez vous-même l'encodage et effectuez l'encodage du corps manuellement.

Pour être totalement en sécurité et minimiser le travail dans votre programme, le -e interrupteur va
laissez mailagent analyser le corps du message que vous retournez et sélectionnez le bon
transférer l'encodage automatiquement. Étant donné que cela fera en sorte que tout le corps sera
analysé, et il peut être potentiellement énorme, ce comportement doit être explicitement
demandé. Si tu as besoin -e alors tu veux probablement -b aussi (vous pouvez fournir les deux
en disant -être naturellement).

Si vous ne fournissez aucun commutateur, mailagent vous donnera le message tel quel et
obtiendra votre message tel quel sans aucune magie supplémentaire.

AVANT adresse (s)
Transférer le courrier à l'adresse ou aux adresses spécifiées. Cela agit comme si une sauvegarde avait été effectuée,
afin d'éviter le DELETE. Habituellement, lorsque vous transférez un courrier, vous ne souhaitez pas
pour le garder. La commande ajoute des lignes de type Resent dans l'en-tête. Quant à BOUNCE,
l'inclusion de fichier est possible (c'est-à-dire utiliser une adresse "forward_list" faire suivre un courrier
à tous les utilisateurs répertoriés dans le fichier liste_avant). (Échec si le courrier ne peut pas être
ressentiment)

DONNER Programme
Donner le corps du message au programme spécifié en alimentant son standard
saisir. Toute sortie est envoyée par courrier à l'utilisateur qui exécute le agent de messagerie. Notez que le
le message n'est pas marqué comme ayant été enregistré. (Renvoie l'état de Programme)

NOTE: Si le message avait un corps codé pour le transport (à l'aide de l'un des
encodage de transfert base64 ou devis imprimable), mailagent sera de manière transparente
le décoder et fournir une version qui peut être correctement manipulée. En d'autres termes,
le programme n'a pas besoin de se soucier du corps encodé dans le message,
car il obtiendra un simple. (Étant donné qu'aucun en-tête n'est fourni, c'est le seul
option possible).

Attention cependant aux messages MIME : vous devez utiliser PIPE pour leur donner une chance
au programme pour gérer correctement le corps, mais il doit alors être entièrement MIME-
conscient.

GARDER liste_de_champs_en-tête
Ne conserve que les lignes correspondantes dans l'en-tête du courrier. Par exemple, un
"KEEP From To Cc Subject" ne conservera que les principaux champs du courrier
message. Cela convient à l'archivage des messages des listes de diffusion. Vous pouvez ajouter un
':' après chaque nom de champ d'en-tête si vous le souhaitez, mais ce n'est pas strictement
nécessaire. Les en-têtes peuvent être spécifiés à l'aide d'expressions régulières de style shell, et
l'inclusion de fichier est autorisée à obtenir les en-têtes d'un fichier. (Ne modifie pas l'existant
statut)

LAISSER Laisser le courrier entrant dans la boîte aux lettres du système. C'est l'action par défaut si aucune règle
correspond ou si aucune sauvegarde n'a eu lieu. Ce n'est pas recommandé sur les systèmes Debian.
(Échec si le courrier ne peut pas être enregistré)

MACRO[-rdp] prénom [= (Plus-value, type)]
Vous permet de spécifier des macros définies par l'utilisateur, de la forme %-(prénom). Voir le paragraphe sur
macros définies par l'utilisateur pour des explications sur les types disponibles (SCALAIRE, EXPR,
CONST, FN, PROG, PROGC). Une interface perl vers les macros utilisateur sous-jacentes est
disponible pour vos commandes perl. le -r l'option est utilisée pour remplacer un existant
macro (au lieu de pousser une nouvelle instance sur la pile), la -d est de supprimer tout
les instances d'une macro nommée (dans ce cas, elle ne prend que le premier argument),
et -p fait sortir la dernière instance de la macro de la pile et revient à la
définition précédente, le cas échéant (sinon, il agit comme -d). Si vous souhaitez définir un
macro SCALAIRE simple, vous pouvez omettre la = (valeur, Type d') partie et continuer simplement
avec la valeur de la macro. (Ne modifie pas le statut existant)

MESSAGE filet
Messagerie filet à l'expéditeur du message (tel que dérivé de l'en-tête
du message). Le texte du message est exécuté via la substitution de macro
mécanisme (décrit plus loin). (Échec si le message ne peut pas être envoyé)

NON [-pi] Pas d'opération. Si cela semble un peu étrange, pensez-y en termes de commande UNE FOIS.
(Ne modifie pas le statut existant à moins que -f or -t est utilisé, auquel cas il force
a non --échec-- ou oui statut de réussite)

NOTIFIER filet adresse (s)
Envoyer un message de notification filet à une liste d'adresses donnée. Le texte de la
message est exécuté via le mécanisme de substitution de macro (décrit plus loin).
Comme avec FORWARD, l'inclusion de fichier pour la spécification d'adresse est possible. (Échoue
si le message ne peut pas être envoyé)

ON (journée liste) commander
Exécutez la commande de filtre spécifiée uniquement sur la liste de jours spécifiée. Cette liste
est une liste de jours séparés par des espaces, spécifiés à l'aide des noms anglais. Seulement le
les trois premiers caractères sont pris en compte, sans tenir compte de la casse. Donc,
les spécifications du jour valide le plus court sont Lun, Mar, Mer, Jeu, Ven, Sam et Dim.

Cette commande peut être utilisée en conjonction avec SELECT pour effectuer une sélection basée sur le temps.
renvoi de messages vers, par exemple, votre adresse personnelle :

ON (Lun Mar Mer Jeu) SELECT (18:30 .. 23:00) BOUNCE [email protected];
ON (Ven) SELECT (18:30 .. 23:59) REBOND [email protected];
ON (Sam Dim) REBOND [email protected];

Cela ne ferait rebondir les messages que le week-end et pendant la semaine, après 18h30,
et jusqu'à 23h00 (en supposant que c'est l'heure du coucher, d'autres messages seront vus au travail
le lendemain). A noter que le vendredi, on va jusqu'à 23h59. (Propage l'état
grâce au commander. Si la commande n'est pas exécutée, renvoie toujours succès)

UNE FOIS QUE (Nom, jour, période) commander
Exécutez la commande de filtre spécifiée une fois par périodeL’ prénom et Étiquette des champs
sont utilisés pour enregistrer les horodatages de la dernière commande ONCE. Plus à ce sujet plus tard.
(Propage l'état de commander. Si la commande n'est pas exécutée, retourne toujours
Succès)

PASS Programme
Envoyez le corps du message au programme spécifié et récupérez un nouveau corps
à partir de la sortie du programme. Notez que le message n'est pas étiqueté comme ayant
été sauvé. (Renvoie l'état de Programme)

NOTE: Si le message avait un corps codé pour le transport (à l'aide de l'un des
encodage de transfert base64 ou devis imprimable), mailagent sera de manière transparente
le décoder et fournir une version qui peut être correctement manipulée. Le corps généré
par le programme sera alors automatiquement encodé en utilisant le même transfert
codage.

Attention cependant aux messages MIME : vous devez utiliser FEED pour qu'ils donnent une chance
au programme pour gérer correctement le corps, mais il doit alors être entièrement MIME-
conscient.

PERL scénario [arguments]
Évadez-vous dans un perl scénario pour effectuer certaines actions sur le message. Ceci est pleinement
décrit plus loin dans la page de manuel, et est très différent d'un COURT perl scénario
commander. (Renvoie un échec si le script n'a pas compilé ou a renvoyé une valeur non nulle
statut).

TUYAU [-b] Programme
Transférez l'intégralité du message vers le programme spécifié, mais ne récupérez rien.
Toute sortie est envoyée par courrier à l'utilisateur qui exécute le agent de messagerie. Le message n'est pas
marqué comme ayant été enregistré dans tous les cas, vous devez donc le SUPPRIMER explicitement si
la tuyauterie était suffisante et cela n'a pas manqué: "REJECT -f" est votre ami ici pour éviter
suppression non désirée. (Renvoie l'état de Programme)

AVERTISSEMENT: Votre programme doit être capable d'analyser correctement un message MIME et doit
traiter par lui-même les corps codés par transfert. Pour simplifier la tâche du programme,
vous pouvez fournir le -b commutateur qui permettra à mailagent de décoder tout le corps pour
vous, en supprimant tout en-tête Content-Transfer-Encoding (impliquant "binaire"). Cette
est un format de message invalide pour l'envoi du message, mais il rend le traitement
Plus facile. Cependant, vous devez toujours analyser les parties MIME vous-même.

PUBLIER [-kg] groupe(s) de discussion
Publiez le message dans le(s) groupe(s) de discussion spécifié(s) après avoir nettoyé le
en-tête : les champs liés au courrier comme Received : ou In-Reply-To : sont supprimés, un
From: est générée, les To: et Cc: d'origine sont renommés avec un préfixe X,
la ligne Références : est mise à jour/générée si nécessaire en fonction des In-
Les champs Reply-To et NNTP sont supprimés afin que le serveur puisse ajouter son
posséder.

L'exécution du POST avec succès agit comme une économie.

Si le prénom est -l comme dans "POST -l comp.mail.mh", puis un "Distribution :
local" est ajouté pour forcer une livraison locale. Sinon, la valeur par défaut nouvelles
distribution sera utilisée (monde, généralement).

When the -b est donné, un POST réussi entraînera le biffing
activé (voir section MAIL BIFFER) pour l'article de presse résultant.

Si plusieurs groupes de discussion sont spécifiés, ils doivent être séparés par des espaces. Il est
possible d'obtenir une liste de groupes de discussion via l'inclusion de fichiers. (Échec si le message ne peut pas
être affiché)

PROCESS Exécutez le traitement mailagent qui recherche les commandes @SH et les exécute.
Cela a été décrit précédemment dans la section traitant des règles par défaut. L'action
associé par défaut à un mail ayant pour objet [Cc]commande est PROCESS.
(Renvoie toujours le succès)

PROTÉGER [-lu] mode
Définit le mode de protection par défaut qui doit être défini sur les dossiers créés (ou
créés lors de l'enregistrement dans un dossier MH ou un répertoire). Par défaut,
les autorisations sont régies par la commande UMASK, mais cela vous permet de remplacer le
défaut. Le spécifié mode doit être précédé d'un 0 un péché 0644 donner le
autorisations octales familières. Sinon, il est interprété comme un nombre décimal, donc
faire attention!

Le manuel de formation -l L'option peut être utilisée pour spécifier un mode localement pour une règle. Autrement,
le mode de protection est défini globalement. le -u L'option désactive le global (ou local
lorsqu'il est combiné avec -l), en revenant au comportement par défaut où seul le
umask est pris en compte par le système.

Notez que lors de l'enregistrement dans un dossier MH, la commande PROTECT est prioritaire
au cours de la Msg-Protect champ de votre ~/.mh_profile déposer. (Ne modifie pas
état d'exécution)

PURIFIER Programme
Introduisez l'en-tête dans un programme et récupérez le nouvel en-tête. RESYNC est fait
automatiquement au retour. Cela peut être utilisé pour purifier l'en-tête en
en supprimant tous les trucs verbeux ajoutés par tant d'agents de transport de courrier (X-400
comme des lignes par exemple). Évidemment, cela ne signale pas le message comme ayant
été sauvé. (Renvoie l'état de Programme)

Si votre programme supprime l'en-tête Content-Transfer-Encoding dans un message MIME,
mailagent transformera correctement le message pour qu'il ait un corps non codé. Si
vous modifiez la valeur de l'en-tête Content-Transfer-Encoding, mailagent
également recoder correctement le corps pour vous. Les seuls encodages pris en charge sont base64
et devis-imprimable.

FILE D'ATTENTE Remettre le courrier en file d'attente. Une file d'attente réussie compte comme si le courrier avait été enregistré. Poster
mis en file d'attente de cette façon ne sera pas traité pendant les 30 prochaines minutes. Noter que
sauf si mailagent est invoqué régulièrement par cron, le courrier restera dans
la file d'attente jusqu'à ce qu'un autre courrier arrive. (Échec lorsque le courrier ne peut pas être mis en file d'attente)

ENREGISTREMENT [-acr] [Etat] [(liste de balises)]
Enregistre le message dans l'historique et passe à l'état _SEEN_ si le message était déjà
présent là-bas. Si le message est enregistré pour la première fois, le traitement
continue normalement. Sinon, un REJECT est exécuté. Ce comportement peut être
quelque peu modifié en utilisant certaines options. Voir UNIQUE pour une description complète
des options et des arguments. Naturellement, lorsqu'un Etat est spécifié, que
remplace la valeur par défaut _SEEN_. Un nom d'état peut contenir des caractères alphanumériques
et souligne.

Quand un liste de balises (liste de noms séparés par des virgules) est spécifié, le message est
seulement enregistré et vérifié par rapport à toutes ces balises, mais seulement elles. Ne pas préciser
toute liste de balises signifie toute occurrence, qu'elle soit balisée ou non. Voir paragraphe
En utilisant Tags in Enregistrement et Unique pour plus d'informations. (Renvoie un état d'échec
si le courrier était déjà enregistré)

REJETER [-tf] [Etat]
Abandonner l'exécution de l'action en cours et continuer la correspondance. Si -t est spécifié,
le rejet n'aura lieu que si l'action précédente a été effectuée avec succès
(statut de retour de true), tandis que -f provoquerait le rejet uniquement lorsqu'un échec
eu lieu. Si un Etat est spécifié, nous entrons dans cet état avant le rejet. REJETER
réinitialise l'indicateur de correspondance, ce qui signifie que si aucune autre correspondance ne se produit, le
l'action par défaut s'appliquera. Un nom d'état peut contenir des caractères alphanumériques et
souligne. (Ne modifie pas le statut d'exécution)

EXIGER filet [paquet]
Se comporte comme le perl exigent opérateur en chargeant un fichier perl en mémoire. Par
par défaut, le fichier est lu dans le nouveaucmd package, mais vous pouvez spécifier n'importe quel
package dans lequel vous souhaitez le charger. Cette commande n'effectuera le chargement qu'une seule fois
par (fichier, package) tuple. Contrairement à son équivalent perl, le fichier "value" n'est pas
important, c'est-à-dire qu'il ne doit pas se terminer par une instruction renvoyant une valeur vraie.
(Échec si le fichier ne peut pas être chargé)

REDÉMARRAGE [-tf] [Etat]
Abandonner l'exécution de l'action en cours et redémarrer le processus de correspondance à partir du
début. Pour éviter les boucles, chaque règle peut être parcourue une fois dans un
Etat. Voir REJECT pour la signification des paramètres facultatifs. RESTART réinitialise le
indicateur correspondant, ce qui signifie que l'action par défaut s'appliquera, si aucune autre
correspondance se produit. (Ne modifie pas le statut d'exécution)

RESYNC Re-synchronise l'en-tête utilisé pour la correspondance avec l'en-tête du mail. C'est
probablement utile uniquement lorsqu'une commande SUBST ou ANNOTATE a été exécutée. (Ne modifie pas
état d'exécution)

NOTE: Au moment de RESYNC, mailagent vérifiera si le Content-Transfer-Encoding
l'en-tête a été modifié et recodera de manière transparente le corps si nécessaire, de sorte que
l'ensemble du message reste valide malgré la modification de l'en-tête. Il faudra aussi veiller
de mettre à jour Content-Length si nécessaire. Chaque fois que vous modifiez ces importants
en-têtes via SUBST ou ANNOTATE, assurez-vous d'appeler RESYNC avant de vous débarrasser du
message ou vous courez le risque de sauvegarder une version corrompue qui ne sera pas
bien compris par votre agent d'utilisateur de messagerie.

COURT Programme
Exécutez le programme spécifié et envoyez toute sortie à l'utilisateur qui exécute agent de messagerie.
Cette action ne marque pas le message comme ayant été enregistré. (Renvoie l'état
of Programme)

SAUVEGARDER dossier
Enregistrer le message dans le dossier spécifié. Si le nom du dossier commence par un '+', il est
géré comme un dossier de style MH et magasin rcv est émulé pour délivrer le message
dans ce dossier. Si le dossier est un répertoire, le message est livré dans un seul
fichier dans ce répertoire. Voir le DOSSIERS section. (Échec si le message ne peut pas
être sauvé)

SÉLECTIONNER (Commencer .. fin) commander
Exécutez le commander uniquement pendant la période de sélection de temps spécifiée. Les dates peuvent
être spécifié dans un large éventail de formats. La sortie du données(1) la commande est un
exemple de spécification valide. Si la date, l'année ou le mois manque,
alors l'actuel lui est substitué. Les dates suivantes sont
spécifications valides : '10:04:25', 'now' ,'April 1 1992', 'Dec 25', 'July 14
1789, 07:40' (euh... c'est valable selon la grammaire, mais c'est avant le
Epoque donc ça ne veut rien dire). D'autres dates fantaisistes comme "le mois dernier - 5
minutes' ou 'il y a 3 semaines' sont également activés. (N'est-ce pas génial d'avoir un réal
analyseur ? Les règles de filtrage auraient pu être plus élaborées si seulement j'avais su
à propos de ce Berkeley yacc produisant un perl analyseur...). (Renvoie l'état de
commander, si exécuté, sinon renvoie true).

SERVEUR [-t] [-d handicapé commandes]
Activer le traitement du serveur. Le corps du message est interprété comme une liste de
commandes à exécuter. Voir section GÉNÉRIQUE MAIL SERVEUR pour plus d'informations sur
le serveur lui-même. le -t option transforme le serveur en confiance mode, Où
pouvoirs peut être acquise. le -d L'option doit être suivie d'une liste de désactivés
commandes, séparées par des virgules sans espace intermédiaire entre elles.

DIVISER [-adieu] dossier
Divisez un e-mail au format digest dans le dossier spécifié (mêmes conventions de nommage
comme dans SAVE). Si aucun dossier n'est spécifié, chaque élément de résumé est mis en file d'attente et sera
analysé comme un seul courrier par lui-même. le -d L'option supprime l'en-tête de résumé.
Le manuel de formation -i L'option signifie que la division est effectuée sur place et que le courrier d'origine est supprimé.
Toutes les options peuvent être utilisées simultanément à condition qu'elles soient collées ensemble à
le début (l'option parsing étant vraiment rudimentaire).

Si le courrier n'est pas au format condensé et qu'un dossier est spécifié, il est alors enregistré
dans ce dossier. Sinon, l'action SPLIT échoue et rien ne se passe (le filtre
continue son traitement cependant). La commande SPLIT éclatera correctement la RFC-934
digérer les messages et essayera de faire de son mieux sinon. Si le condensé n'était pas
Conforme à la RFC-934 et il est possible que SPLIT ait produit quelque chose
incorrect, le message d'origine est également enregistré si -i, sinon ce n'est pas
marqué comme enregistré (afin que la commande QUITTER par défaut puisse s'appliquer). le -w (Regardez)
demande une attention particulière et détectera chaque condensé non RFC-934, même lorsque le
le non-respect est par ailleurs inoffensif ; de plus, tout déchet restant plus longtemps
que 100 octets seront enregistrés en tant qu'élément de résumé par lui-même.

Le manuel de formation -a L'option annote chaque élément de résumé avec une ligne d'en-tête X-Digest-To :
qui est la concaténation des champs To: et Cc: du condensé d'origine
message. Cela peut être utilisé par exemple pour éclater le condensé dans la file d'attente et
puis retraitez chacun de ses éléments en fonction de ce champ ajouté. Finalement, le
-e L'option ne supprimera l'en-tête digest que si son corps est vide (c'est-à-dire le
le modérateur n'a pas inclus de commentaire de premier plan). (Renvoie un succès si le courrier était dans
format digest et correctement divisé sans aucune erreur)

BOUTIQUE dossier
Enregistrez le message dans le dossier spécifié et laissez une copie dans la boîte aux lettres du système.
Le manuel de formation dossier Le paramètre suit les mêmes conventions de nommage que dans SAVE. Encore,
en raison de problèmes de verrouillage, il n'est pas recommandé de laisser du courrier dans la boîte aux lettres sur
Machines Debian. (Échec si le message ne peut pas être enregistré dans le dossier ou dans
La boîte aux lettres)

STRIP liste_de_champs_en-tête
Supprimez les lignes correspondantes dans l'en-tête du courrier. Par exemple, une « BANDE
Newsgroups Apparemment-To" supprimera les lignes appropriées pour effacer tout
Groupes de discussion : ou Apparemment-À : en-tête. Vous pouvez ajouter un ':' après chaque champ d'en-tête
nom si vous le souhaitez, mais ce n'est pas strictement nécessaire. Les en-têtes peuvent être spécifiés
via des expressions régulières de style shell ou via l'inclusion de "fichier". (Ne modifie pas
état d'exécution)

subst var/en-tête expression
Remplace l'expression sur la variable définie par l'utilisateur spécifiée (nom commençant
avec un #) ou une référence arrière (chiffre) ou un champ d'en-tête (se terminant éventuellement par
':'). Par exemple

SUBST #foo /w/y/g

remplacerait dans la variable définie par l'utilisateur foo toute la w by y. Voir aussi ASSIGNER
et TR.

Pour les substitutions sur les champs d'en-tête, comme :

Objet SUBST : /\[foo\]\s+// ;

les lignes d'en-tête correspondantes seront reformatées lorsque la substitution sera réussie,
ce qui signifie probablement que les continuations originales ne seront pas conservées. La cible de
la substitution est l'en-tête entier, avec des continuations normalisées à un
espace. Vous êtes donc assuré d'être indépendant de l'en-tête réel
mise en forme dans l'original.

N'oubliez pas d'émettre un RESYNC après un champ d'en-tête SUBST, car certaines routines
(comme POST) sonde dans la table de hachage d'en-tête analysée pour générer le fichier enregistré
par voie électronique.

(Échec si erreur dans expression)

TR var/en-tête traductions
Effectuer la traduction sur la variable, la référence arrière ou l'en-tête spécifiés
domaine. Par exemple

TR 1 /AZ/az/

canoniserait le contenu de la référence 1 en minuscule. Avec succès
les en-têtes translittérés sont reformatés, même lorsque leur taille globale n'est pas
modifié. Voir aussi ASSIGN et SUBST. (Échec si erreur dans traductions)

UMASQUE [-l] mode
Remplace l'umask du processus par le spécifié mode, qui peut être décimal, octal
(si précédé de '0') ou hexadécimal (commençant par '0x'). La notation octale est
le moyen le plus clair de spécifier le umask de toute façon. Les rumeurs ne disent-elles pas que l'octal
a été inventé dans ce seul but ? ;-) Utilisez le -l option pour changer l'umask
pour la durée de la règle d'action en cours uniquement. Notez que le umask par défaut
spécifié dans votre fichier de configuration est utilisé pour réinitialiser agent de messagerie's umask au début de
chaque traitement de courrier. (Ne modifie pas le statut d'exécution)

UNIQUE [-acr] [Etat] [(liste de balises)]
Enregistrer le message dans l'historique et marquer le message comme enregistré s'il était déjà présent
là. Si le message est enregistré pour la première fois, le traitement se poursuit
normalement. Sinon, un REJECT est exécuté. Si -r a été utilisé, un RESTART est utilisé
à la place tandis que -a exécuterait un ABORT. Par exemple, pour supprimer les doublons
messages des listes de diffusion, exécutez un UNIQUE -a avant d'enregistrer le courrier. le -c
L'option peut être utilisée seule pour empêcher réellement la commande de perturber le
flux d'exécution, et d'utiliser plus tard le statut de retour pour voir ce qui s'est passé : UNIQUE
renvoie un état d'échec si le message a déjà été enregistré. Si une option
Etat est donné, alors l'automate entrera dans cet état si le courrier
était auparavant dans la base de données. Voir aussi RECORD, et le paragraphe intitulé
En utilisant Tags in Enregistrement et Unique pour plus d'informations sur la liste de balises. (Échoue
si le courrier était déjà enregistré)

VACANCES [-l] sur|hors|chemin [période]
Autoriser ou interdire un message d'absence. Lorsque le mode vacances est activé via le
fichier de configuration, un message est envoyé chaque fois que l'utilisateur reçoit une réunion par courrier électronique
certaines exigences, comme expliqué dans la section INOUBLIABLE MODE. L'un des
conditions est que l'indicateur de vacances modifié par cette commande soit vrai. Cette
permet d'interdire facilement les messages de vacances, jamais, à un groupe de personnes pour
exemple.

Au lieu de on or de rabais, vous pouvez spécifier un nom de fichier (~ substitution autorisée) étant
le nouveau chemin à utiliser pour localiser le fichier de vacances. En option, vous pouvez
spécifier un dernier paramètre, qui sera pris comme période à appliquer lorsque
envoyer le message de vacances. Modifications du message de vacances chemin sommes-nous
interdit lorsque la variable de configuration vacfix est réglé sur ON.

Si vous utilisez le -l option, les modifications sont apportées localement, pour la durée de la règle
seul. Si vous REJETEZ d'aller à une autre règle, vos modifications seront perdues. le
la valeur globale des paramètres modifiés est modifiée lors de la première utilisation locale et
restauré lorsqu'une nouvelle règle est entrée. (Ne modifie pas le statut d'exécution)

ÉCRIRE dossier
Écrivez le message dans le dossier spécifié, en supprimant tout dossier préexistant avec
Le même nom. Par conséquent, les commandes WRITE successives écraseront la précédente.
Ceci est utile pour stocker la sortie des commandes système exécutées par cron. N'essayez pas d'utiliser
avec un dossier MH ou un dossier répertoire ou il se comportera comme SAVE. (Échoue
si le message ne peut pas être écrit)

Internationaux Statut
Presque toutes les actions modifient une variable qui garde une trace de l'état d'exécution
(analogue à la variable $? dans le shell). Cette variable peut être testée via le -t or -f
option de la commande REJECT par exemple. Pour ne donner qu'un seul exemple, l'action SAVE
retournerais manqué s'il n'a pas pu enregistrer le courrier dans le dossier spécifié. Si cela SAUVEGARDE
était suivie d'un "REJECT -f FAILED", alors l'exécution de la règle actuelle serait
s'arrêter et l'automate continuerait à analyser le courrier dans l'état ÉCHEC.

Certaines actions ne modifient cependant pas ce dernier statut d'exécution. Typiquement, ce sont
des actions qui prennent des décisions basées sur ce statut, ou simplement des actions qui peuvent ne jamais échouer.
Ces actions spéciales sont : ABORT, ASSIGN, BEGIN, KEEP, MACRO, NOP, REJECT, RESTART,
RESYNC, BANDE et VACANCES.

Il est regrettable que les commandes ONCE ou SELECT ne puissent pas faire la différence entre un non-
l'exécution et une exécution réussie de la commande spécifiée. Il peut y avoir un changement dans
la façon dont ce schéma fonctionne, mais il doit rester rétrocompatible.

Perl Échapper
En utilisant la commande PERL, vous avez la possibilité d'effectuer un filtrage et d'autres
actions sophistiquées directement dans perl. C'est vraiment différent de ce que vous pourriez faire en
alimenter votre courrier dans un script perl. Tout d'abord, aucun processus supplémentaire n'est créé : le script
est chargé directement dans mailagent et compilé dans un package spécial appelé crochet de courrier.
Deuxièmement, vous disposez d'une interface perl pour toutes les commandes de filtrage : chaque action de filtrage
est associé à une fonction perl (écrit en minuscule). Enfin, certains prédéfinis
les variables sont définies pour vous par mailagent.

Avant d'aller plus loin, veuillez noter qu'aucun processus supplémentaire n'est créé, vous doit
pas appeler le perl sortie une fonction. Utilisation &sortir à la place, de sorte que la sortie peut être piégée. &sortir
prend un argument, le code de sortie. Si vous utilisez 0, cela est considéré comme un succès, tout
autre valeur signifiant échec (c'est-à-dire que la commande PERL renverra un état d'échec). Utilisant
la perle sortie fonction tuerait directement agent de messagerie et encourrait probablement du courrier
pertes.

Les scripts utilisés doivent rester simples. En particulier, vous devez éviter l'utilisation du
paquet directive ou définir des fonctions avec un nom de package autre que crochet de courrier (c'est-à-dire le
package où votre script est chargé). Ne pas le faire peut provoquer des conflits de noms avec
agent de messagerieses propres routines. En particulier, évitez les principal paquet. A noter que depuis le
l'environnement de compilation est configuré pour crochet de courrier, sans spécifier de nom de package dans votre
variables et sous-routine est bien (en fait, il est censé fonctionner de cette façon).

Votre script est libre de faire ce qu'il veut pour le courrier. La plupart du temps cependant, vous terminez
en utilisant le agent de messagerie primitives pour enregistrer le courrier ou le transférer (mais vous êtes libre de
reconcevez les vôtres et appelez-les à la place, bien sûr). L'interface est simple : chaque
La fonction ne prend qu'un argument, une chaîne, qui correspond aux arguments de la commande, le cas échéant.
Par exemple, dans un script d'échappement perl, vous exprimeriez :

{ ENREGISTRER la liste ; FORWARD « utilisateurs » ; NOURRIR ~/bin/nouveaumail -tty ; REJETER }

avec:

&save('liste');
&forward('"utilisateurs"');
&nourrir('~/bin/nouveaumail -tty');
&rejeter;

La règle est simple : chaque commande est remplacée par un appel de fonction, le reste
paramètres inclus dans une chaîne, le cas échéant. Alternativement, vous pouvez spécifier des paramètres en tant que
list : tous les arguments que vous fournissez sont réunis dans une grande chaîne heureuse, en utilisant un espace
caractère comme séparateur. Le mécanisme de substitution de macro est ensuite exécuté sur ce résultat
chaîne d'arguments.

Chaque fonction renvoie un statut de réussite booléen de la commande (c'est-à-dire que 1 signifie réussite). Pour
les fonctions qui ne modifient généralement pas la dernière variable d'état d'exécution du filtre, un
le succès est toujours au rendez-vous. Cela permet d'écrire (intuitivement) :

&sortie(0) si &save('uucp');
&bounce('racine') || &save('urgence');

et obtenir le résultat attendu. Le courrier sera enregistré dans le dossier d'urgence uniquement lorsque
l'enregistrement dans le dossier uucp a échoué et le courrier n'a pas pu être renvoyé à la racine.

Il est important de comprendre que ces commandes ont exactement le même effet sur le
processus de filtrage lorsqu'ils sont exécutés à partir d'un script d'échappement perl ou à partir du fichier de règles
comme des actions régulières. UNE &rejeter l'appel abandonnera simplement l'exécution du perl actuel
script et l'automate de filtrage reprendra le contrôle et tentera une nouvelle correspondance. Mais perl
vous apporte beaucoup plus de puissance, en particulier les appels système, les structures de contrôle comme if et
pour, expressions régulières brutes, etc...

Le spécial perl tableau @INC (qui contrôle le chemin de recherche pour exigent) est légèrement
modifié en ajoutant le chemin d'accès à la bibliothèque privée de mailagent. Cela laisse la porte ouverte à
futurs scripts perl de la bibliothèque mailagent qui pourraient être requis par le script perl.
De plus, les variables spéciales suivantes sont configurées par perl avant d'appeler votre
script:

@ARGV Les arguments du script, qui ont été donnés par la commande PERL. Cette
le tableau est configuré exactement de la même manière que vous vous attendriez à ce qu'il soit configuré si vous
invoqué la commande directement depuis le shell, sauf que @ARGV[0] est le
nom du script (puisque vous ne pouvez pas utiliser les $0 pour y arriver; qui serait
vous donner le nom de l'agent de messagerie).
$adresse La partie adresse de la ligne De:.
$cc Le contenu brut de la ligne Cc:.
@cc La liste des adresses sur la ligne Cc:, avec les commentaires supprimés.
enveloppe $ L'enveloppe du courrier, telle que calculée à l'aide de la première ligne De du message.
$amical La partie commentaire de la ligne From:, le cas échéant.
$à partir de Le contenu de la ligne De :, avec l'adresse et la partie commentaire.
%entête Cette table, indexée par nom de champ, renvoie le contenu brut sur le
ligne d'en-tête correspondante. Voir ci-dessous.
$chemin_messagerie Le nom de chemin complet du dossier (ou message dans un dossier MH) où le
la dernière opération de sauvegarde a eu lieu. Ceci est destiné à être utilisé si vous le souhaitez
pour construire votre propre notification de réception de courrier.
$longueur La longueur du message, en octets.
$lignes Le nombre de lignes du message.
$connexion Le nom de connexion de l'adresse sur la ligne De :.
$précédence Le contenu de la priorité : ligne, le cas échéant.
@relayé La liste des noms d'hôtes (éventuellement des adresses IP brutes si aucun mappage DNS) répertorié
dans la ligne d'en-tête (calculée) Relayed:.
$répondre_à L'adresse e-mail à laquelle une réponse doit être envoyée, avec commentaire
supprimée.
$expéditeur L'expéditeur du message (peut avoir un commentaire), déduit de la même manière le
Expéditeur : la ligne est calculée par mailagent.
$sujet Le sujet du message.
Le contenu brut de la ligne À :.
La liste des adresses sur la ligne À :, avec les commentaires supprimés.

Le tableau associatif %entête vous donne accès à tous les champs de l'en-tête du
message. Par exemple, est vraiment la valeur de $header{'À'}. La clé est spécifiée
en utilisant une casse normalisée, c'est-à-dire que la première lettre de chaque mot est en majuscule, le reste
étant en minuscule. Ceci est indépendant de la représentation physique réelle dans le
message lui-même.

Les pseudo clés Head, Les chuchotements et Tous vous donne respectivement accès à l'en-tête brut du
message, le corps et l'ensemble du message. le %entête tableau est vraiment une référence à la
agent de messageriela structure de données interne de , donc la modification des valeurs influencera le filtrage
traiter. Par exemple, la commande SAVE écrit le Head, la Filtre X : ligne, la fin de
en-tête (une seule nouvelle ligne) puis le Les chuchotements (ceci n'est qu'un exemple, pas un document
caractéristique :-). le =Corps= key est spécial : c'est une référence Perl à un scalaire contenant le
body avec tout codage de transfert de contenu supprimé.

Notez que le $chemin_messagerie variable ne contient qu'un instantané du chemin du dossier au moment où
l'évasion PERL a été appelée. Si vous réalisez vos propres économies en perl, alors vous devez regarder
au $main'folder_saved variable à la place pour obtenir la valeur du chemin d'accès au dossier à jour.

Enfin, résistez à la tentation de lire les entrailles de l'agent de messagerie et
appeler directement les routines dont vous avez besoin. S'il n'est pas documenté dans la page de manuel, il peut
être modifié sans préavis par tout autre correctif. (Et cela ne veut pas dire que documenté
les fonctionnalités peuvent ne pas changer aussi... C'est juste plus improbable, et les correctifs indiqueraient clairement
ça, bien sûr.)

Programme Environnement
Tous les programmes démarrés par mailagent via RUN et ses amis héritent des éléments suivants
variables d'environnement : HOME, USER et NAME, respectivement définies à partir de la configuration
paramètres Accueil, utilisateur et prénom. Si l'agent de messagerie est appelé par le une fonction filtre, puis le CHEMIN
est également défini en fonction du fichier de configuration (si vous utilisez le filtre C) ou pour
tout ce que vous définissez PATH (si vous utilisez le filtre shell).

Tous les programmes sont exécutés depuis le Accueil annuaire. Cela inclut les scripts
démarré via la commande PERL et les crochets de messagerie. Ce dernier sera décrit en détail
plus bas.

Fichier l'inclusion
Certaines commandes comme FORWARD ou KEEP permettent de spécifier un nom de fichier entre guillemets
pour charger réellement les paramètres de ce fichier. À moins qu'un chemin d'accès complet ne soit donné, ce qui suit
est utilisée pour localiser le fichier : d'abord à l'emplacement pointé par le filtre de courrier
variable si définie, sinon dans répertoire de messagerie et enfin dans le répertoire personnel. Notez que c'est
pas un chemin de recherche dans le sens où si filtre de courrier est défini et que le fichier n'est pas là, un
l'erreur sera signalée.

Le fichier doit répertorier chaque paramètre (qu'il s'agisse d'une adresse, d'un en-tête ou d'un motif) sur une ligne en
lui-même. Les commentaires de style shell (#) sont autorisés dans ce fichier et les espaces blancs en tête sont
coupé (mais pas les espaces de fin).

Macros remplacements
Toutes les commandes passent par un mécanisme de substitution de macros avant d'être exécutées. le
les macros suivantes sont disponibles :

%% Un vrai signe de pourcentage
%A L'adresse Internet extraite du À partir de domaine (abc in [email protected]),
converti en minuscules.
%C Nom du processeur sur lequel l'agent de messagerie s'exécute. Il s'agit d'un nom d'hôte complet avec le
nom de domaine, par exemple lyon.eiffel.com.
%D Jour de la semaine (0-6)
%H Nom d'hôte (nom de la machine sur laquelle le agent de messagerie runs), sans aucun domaine
Nom. Toujours en minuscules, quel que soit le nom de la machine.
%I Le nom de domaine Internet extrait du À partir de domaine (bc in [email protected]),
converti en minuscules.
%L Longueur de la partie du corps, en octets, avec le codage de transfert de contenu supprimé.
%N Nom complet de l'expéditeur (nom de connexion si aucun)
%O Le nom de l'organisation extrait du À partir de domaine (b in [email protected]), converti
en minuscules.
%R Objet du message d'origine avec Re : supprimé
%S Re : objet du message d'origine
%T Heure de la dernière modification sur le fichier envoyé (commandes MESSAGE et NOTIFY)
%U Nom complet de l'utilisateur
%Y Année complète, à quatre chiffres (appelée aaaa le format)
%_ Un espace blanc (utile pour mettre des espaces blancs dans des motifs simples)
%& Liste des sélecteurs qui ont généré une correspondance (parmi ceux spécifiés via un
expression telle que 'X-*: /foo/i'. Si nous trouvons le foo sous-chaîne dans le X-Mailer :
ligne d'en-tête, alors %& sera défini sur cette valeur). Les valeurs dans la liste sont des virgules
séparé.
%~ Un caractère nul, effacé de la chaîne résultante.
%chiffre Valeur de la référence arrière correspondante du dernier match.
%#var Valeur de la variable définie par l'utilisateur var
%=var Valeur de la variable de configuration mailagent var comme spécifié dans le
~/.mailagent fichier.
%d Jour du mois (01-31)
%e L'adresse e-mail de l'utilisateur (la vôtre !).
%f Contenu de la ligne "From:", quelque chose comme %N <%r> ou %r (%N) selon la façon dont
l'expéditeur est configuré.
%h Heure du jour (00-23)
%i ID de message, si disponible (sinon, il s'agit d'une chaîne vide)
%l Nombre de lignes dans le message, une fois le codage de transfert de contenu supprimé
%m Mois de l'année (01-12)
%n Nom de connexion en minuscules de l'expéditeur
%o Organisation (où agent de messagerie s'exécute)
%r Adresse de retour du message
%s Objet du message d'origine
%t Heure et minute actuelles (au format HH:MM)
%u Nom de connexion de l'utilisateur
%y Année (deux derniers chiffres)
%[To] Valeur du champ d'entête (ici To :)

Défini par l'utilisateur Macros
Le mailagent vous permet de définir vos propres macros de deux manières : au niveau du filtre via le
MACRO, ou au niveau perl dans vos propres commandes ou actions perl.

Une fois définie, une macro utilisateur (par exemple foo) peut être remplacé en utilisant %-(foo). Dans le cas d'un
macro à une seule lettre, qui peut être optimisée en %-F par exemple, c'est-à-dire que la parenthèse peut
être omis.

Il existe six types de macros :

SCALAIRE Une valeur scalaire est donnée, par exemple : rouge. La valeur de la macro est le scalaire littéral
valeur, aucune autre interprétation n'est effectuée sur les données.

EXPR Une expression perl sera evaled pour obtenir la valeur, par exemple : $rouge. Notez que le
l'évaluation sera effectuée dans le cadre de usrmac paquet, donc si vous faites référence
à une variable dans un autre package, il serait judicieux de le spécifier, comme dans
$foo'bar.

CONST C'est vraiment la même chose que EXPR, mais la valeur est connue pour être une constante. Alors le
première fois qu'une substitution est effectuée, l'expression sera évaluée, puis
son résultat est mis en cache.

FN Un nom de fonction perl (sans le & initial), tel que main'do_thisL’
La fonction sera appelée avec un seul paramètre : le nom de la macro elle-même.
Cela laisse la porte ouverte à d'autres conventions définies par l'utilisateur en forçant
évaluation via une seule fonction perl.

PROG Un programme à exécuter pour obtenir la valeur réelle. Seule la nouvelle ligne de fin est coupée,
d'autres sont conservés. Le programme est bifurqué à chaque fois. Dans la liste des arguments
donné au programme, %n est développé comme le nom de la macro que nous essayons de
évaluer. Si vous spécifiez cela dans les règles de filtrage, n'oubliez pas d'échapper le
première %.

PROGC Identique à PROG, mais le programme n'est dérivé qu'une seule fois et la valeur est mise en cache
pour lecture ultérieure.

Au niveau perl, quatre fonctions vous permettent de manipuler et de définir vos macros (toutes partie de
le usrmac paquet):

nouveau nom, valeur, Type d')
Remplacez ou créez une macro %-(nom). Par exemple:

new('foo', "$mailhook'header{'X-Foo'}", 'EXPR');

créerait une nouvelle macro foo qui se développerait dans la valeur d'un hypothétique
X-Foo en-tête.

supprimer (nom)
Supprimez toutes les valeurs enregistrées pour la macro.

push(nom, valeur, Type d')
Empilez une nouvelle macro, en la créant si nécessaire.

pop (nom) Supprimez la dernière définition de macro de la pile.

Une pile de macros est allouée pour chaque macro, de sorte qu'une sorte de portée dynamique brute
peuvent être mises en œuvre. Création d'une macro via pousser c'est comme prendre une variable locale en perl,
tout en en créant un par nouvelle est simplement une affectation à une variable. Probable, pop c'est comme sortir d'un
bloc avec une définition de variable locale et delete libère tous la macro portant ce nom,
c'est-à-dire qu'il supprime toute la pile.

Au niveau du filtre, la commande MACRO a trois options. Par défaut, la commande définit
une nouvelle macro en utilisant pousser, et les autres options vous permettent chacune d'accéder à l'une des autres
fonctions d'interface. Notez que les définitions de macro persistent dans les commandes APPLY.

Défini par l'utilisateur Journal
La plupart du temps, lors de l'écriture d'une nouvelle commande de filtrage de l'agent de messagerie ou d'un hook perl, vous
avez besoin d'une journalisation spécifique, soit pour signaler un problème, soit pour garder une trace de ce que vous
exécutent.

Normalement, les journaux sont ajoutés dans le journal de l'agent fichier en appelant &main'add_log(chaîne) (voir
sous-section Général Objet Routines). Pour les actions d'agent de messagerie simples, c'est très bien.

Mais mailagent vous permet de définir des fichiers de journalisation alternatifs, référencés par leur nom. Ce générique
l'interface de journalisation est définie dans le journal utilisateur emballage:

nouveau nom, fichier, drapeau)
Enregistre un nouveau fichier journal appelé prénom et fait en filet. Si le chemin donné pour
ce fichier n'est pas absolu, il est enraciné sous le rép_log annuaire. Si drapeau is
défini sur true, toute journalisation effectuée sur ce fichier sera également copiée sur la valeur par défaut
fichier journal à l'échelle du système. Rien n'est fait si un fichier journal portant le même nom a déjà été
été défini.

supprimer (nom)
Supprime le fichier journal appelé prénom. La journalisation supplémentaire effectuée sur ce fichier est
redirigé vers le fichier journal par défaut.

main'usr_log(nom, chaîne)
Ajoute une entrée au fichier journal prénom. Le fichier journal par défaut est appelé défaut et
ne peut être redéfini ni supprimé. Notez que cette fonction est disponible à partir du
principal paquet. L'appeler avec prénom mis à la chaîne «Par défaut» est principalement
équivalent à appeler directement main'add_log à l'exception notable que le
-i l'option mailagent ne sera pas honorée dans ce cas. Cela peut être ou ne pas être
utile pour vous.

Si vous appelez &main'usr_log avec un nom de fichier journal inexistant, la journalisation est redirigée vers le
fichier journal par défaut à l'échelle du système défini dans votre ~/.mailagent.

Dynamiquement chargement New Code
Dans vos routines perl (commandes définies par l'utilisateur, hooks perl, etc...), vous pouvez ressentir le besoin de
charger dynamiquement du nouveau code dans mailagent. Vous avez un accès direct à l'intérieur
routine utilisée par mailagent pour implémenter la commande REQUIRE ou charger votre nouveau filtrage
commandes par exemple.

En utilisant le soi-disant chargement dynamique l'interface vous achète quelques fonctionnalités supplémentaires :

· Le chemin de la bibliothèque publique de l'agent de messagerie est automatiquement ajouté au tableau @INC, qui
vous permet de définir vos propres fichiers de bibliothèque perl à l'échelle du système ou privés (le
le chemin de la bibliothèque est défini par le perlib variable de configuration, le chemin de la bibliothèque publique
a été défini au moment de l'installation).

· Comme Perl exigent, mailagent garde une trace des fichiers chargés dans lesquels
packages et ne rechargera pas deux fois le même fichier dans le même package.

· Il est possible de faire en sorte qu'une fonction spécifique soit définie dans le fichier chargé,
avec une erreur signalée si ce n'est pas le cas.

· Vous bénéficiez de la journalisation par défaut effectuée par chargement dynamique lorsqu'une erreur se produit.

Pour faire tout cela, vous appelez :

&dynload'charger(paquet, fichier, une fonction)

en spécifiant le package dans lequel vous souhaitez charger le fichier, et éventuellement le nom d'un
fonction qui doit être définie une fois le fichier chargé (laissez ce champ indéfini if
vous n'avez pas une telle contrainte). La routine revient indéfini si le fichier ne peut pas être
chargé (fichier inexistant, très probablement), 0 si le fichier a été chargé mais contenait une syntaxe
erreur ou n'a pas défini la fonction spécifiée, et 1 pour le succes.

En utilisant Une fois Commandes
Les constructions ONCE vous permettent de spécifier une commande donnée à exécuter une fois par période (jour,
la semaine...). La commande est identifiée par un prénom et Étiquette, la combinaison des deux étant
unique. Pourquoi pas un seul identifiant ? Eh bien, ce serait bien, mais supposons que vous vouliez
envoyer un message en réponse à quelqu'un une fois par semaine. Vous pouvez utiliser l'adresse e-mail de
la personne comme identifiant de commande. Mais que se passe-t-il si vous souhaitez également envoyer un autre message à
la même adresse, cette fois une fois par mois ?

Voici une utilisation prototypique d'une ONCE, qui agit comme le programme de vacances, sauf
qu'il n'envoie une réponse qu'une fois par jour pour une adresse donnée :

{ UNE FOIS (%r, message, 1d) MESSAGE ~/.message };

Cela repose sur le mécanisme de substitution de macros pour envoyer une seule fois par jour le message détenu
in ~/.message. Ne pas utiliser la balise vacances, à moins que vous ne sachiez ce que vous faites : c'est
le tag utilisé en interne par mailagent en mode vacances. Rappelons qu'aucun sélecteur ni pattern
est compris comme "Subject: *", donc la règle est toujours exécutée car ce modèle
correspond toujours.

Les horodatages associés à chaque commande sont conservés dans des fichiers sous le répertoire Hash.
Le nom est utilisé comme clé de hachage pour calculer le nom du fichier (les deux premières lettres
sont utilisés). Dans le fichier, les horodatages sont triés par nom, puis par balise. Bien sûr toi
pourrait dire (en inversant la balise et le nom) :

{ UNE FOIS (message, %r, 1d) MESSAGE ~/.message };

mais cela risquerait d'être moins efficace, car le premier hachage se ferait sur un
mot fixe, donc tous les horodatages seraient situés dans le fichier Hachage/m/e (OÙ Hash is
le nom de votre répertoire de hachage, qui est le hachage paramètre dans la configuration
fichier).

En utilisant Tags in Enregistrement et Unique
Les commandes RECORD et UNIQUE vous permettent de spécifier une liste de balises séparées par des virgules entre '('
et ')'. Pour chaque balise présente dans la liste, il existe une entrée distincte dans la base de données
associé à l'identifiant du message. Lorsque le message est enregistré pour au moins une des balises,
la commande "échoue". Ne pas spécifier de balises signifie rechercher toute occurrence de cela
ID du message, qu'il soit balisé ou non.

Ceci est très utile lorsque vous recevez des messages croisés sur des listes de diffusion distinctes et que vous
souhaitez enregistrer une instance du message dans chaque dossier, tout en vous protégeant contre
doublons. Vous pouvez dire:

À Cc : assistants unix {
UNIQUE (assistants);
Assistants SAVE ;
REJETER;
};
À Cc : majordomo-users {
UNIQUE (majordome);
SAUVEZ le majordome ;
REJETER;
};

et une seule instance du message se retrouvera dans chaque dossier. Lorsque vous avez des dossiers
avec des intérêts conflictuels, vous pouvez utiliser une liste de balises au lieu d'une seule balise. Pour
exemple, en supposant que vous souhaitiez conserver une seule copie pour les messages croisés aux deux dis-
des opportunités et agents-utilisateurs, mais ayez une copie séparée si elle est également postée à majordomo-utilisateurs,
alors dire:

À Cc : majordomo-users {
UNIQUE (majordome);
SAUVEZ le majordome ;
REJETER;
};
À Cc : dist-users {
UNIQUE (dist, agent);
SAVE dist-utilisateurs ;
REJETER;
};
À Cc : agents-utilisateurs {
UNIQUE (dist, agent);
SAVE dist-utilisateurs ;
REJETER;
};

Si vous avez une règle utilisant UNIQUE sans aucune balise, elle correspondra lorsqu'au moins une
instance du message a été enregistrée, quelle que soit la balise (le cas échéant) utilisée dans
la première place.

Spécification A Période
Le paramètre de période des commandes ONCE ou le période de vide paramètre de votre configuration
Le fichier a le format suivant : un nombre suivi d'un modificateur. Le modificateur est un atomique
période comme un jour ou une semaine, le nombre est le nombre de périodes atomiques la période finale
doit être égal à. Les modificateurs disponibles sont :

m minute
h heure (60 minutes)
j jour (24 heures)
w semaine (7 jours)
M mois (30 jours)
année (365 jours)

Toutes les périodes sont converties en interne en secondes, bien que vous ne vous en souciez pas vraiment...
Des exemples de périodes valides vont de "1m" à "136y" sur une machine 32 bits (pourquoi ?).

Délais d'attente
Afin d'éviter d'avoir un agent de messagerie en attente d'une commande indéfiniment, une exécution maximale
un temps d'une heure est autorisé par défaut. Passé ce délai, l'enfant reçoit un
Signal SIGTERM. S'il ne meurt pas dans les 30 prochaines secondes, un SIGKILL est envoyé. Sortir
du programme, le cas échéant jusqu'à présent, est renvoyé par courrier à l'utilisateur. Ce comportement par défaut peut
être modifié en définissant un bon courirmax variable dans votre fichier de configuration pour permettre plus
le temps que la commande se termine.

Il y a aussi une fonction filtre délai d'attente de la file d'attente. Afin de modérer la charge du système, le C une fonction filtre
le programme attend 60 secondes par défaut (ou quoi que ce soit attendre la file d'attente a été défini dans le fichier de configuration)
avant de lancer agent de messagerie. Pour éviter les conflits, les messages mis en file d'attente par le premier filtre (qui
dormira alors pendant attendre la file d'attente secondes) ne sont pas traitées par agent de messagerie's -q possibilité jusqu'à
ils sont au moins mise en file d'attente secondes. Un autre paramètre lié à la file d'attente est file d'attente perdue, le
nombre de secondes après lesquelles agent de messagerie marquera les messages comme "perdus" lors de la liste des
file d'attente.

Enfin, la politique de délai de verrouillage peut également être configurée. Par défaut, un verrou est cassé
quand il a une heure (configuré par le verrouillage variable) et agent de messagerie fera seulement
verrouillage max tentatives, espacées de délai de verrouillage secondes pour acquérir le verrou. Il procédera alors
si oui ou non il a obtenu ce verrou. Si vous voulez une politique de verrouillage sécurisée, assurez-vous verrouillage max
fois délai de verrouillage est supérieure verrouillage, ce paramètre étant suffisamment "grand".

Éviter Boucles
Le manuel de formation agent de messagerie laisse un en-tête "X-Filter :" sur chaque message filtré, qui à son tour est utilisé
pour détecter les boucles. Si un message déjà filtré doit être traité, le agent de messagerie entre dans un
état spécial _VU_. Cet état est spécial dans le sens où il est intégré, il n'est pas adapté
par ALL, et certaines actions ne sont pas rendues disponibles, à savoir : BACK, BOUNCE, FEED, FORWARD,
DONNER, NOTIFIER, PASSER, PIPE, POSTER, PURIFIER, FILE D'ATTENTE et COURIR. Notez également que même si le ONCE
et les constructions SELECT sont activées, elles ne vous permettront pas d'exécuter des commandes non autorisées.
Sinon, l'état _VU_ se comporte comme n'importe quel autre état que vous pouvez sélectionner ou annuler, donc un
guard ne sélectionnera pas la règle lorsque nous sommes dans l'état _VU_.

L'état _VU_ facilite le traitement des mails qui bouclent à cause d'une boucle d'alias que vous
n'ont aucun contrôle sur. Si aucune action n'est trouvée dans l'état _VU_, le courrier est laissé dans le
boîte aux lettres, comme d'habitude. De plus, si aucune sauvegarde n'est effectuée, un LEAVE est exécuté. C'est la normale
comportement.

L'en-tête "X-Filter :" n'est ajouté que lorsque le message est enregistré. Des actions telles que PIPE ou
GIVE ne marque pas le message comme étant enregistré et donc ils le font pas ajouter cet en-tête
ligne. Vous pouvez en ajouter un via ANNOTATE si vous souhaitez éviter les boucles, au cas où le programme à
auquel vous envoyez le message peut vous le renvoyer d'une manière étrange.

Message Documents officiels
Le texte du message à renvoyer (pour MESSAGE ou NOTIFY) est lu dans un fichier et
passé par le mécanisme de macro-substitution. La macro spéciale %T est fixé à la date
de la dernière modification apportée à ce fichier. La forme est mois/jour, et l'année est ajoutée
avant le mois uniquement s'il diffère de l'année en cours.

En tête du message, vous pouvez mettre des lignes d'en-tête. Ces lignes écraseront le
lignes fournies par défaut. Cela peut être utile pour changer le sujet par défaut ou ajouter des
des champs supplémentaires comme le nom de votre organisation. La fin de votre en-tête est donnée par
la première ligne vide rencontrée. Si le haut du message que vous souhaitez envoyer ressemble à un
en-tête de courrier, vous pouvez le protéger en ajoutant une ligne vide tout en haut du fichier. Cette
la ligne factice sera supprimée du message et le fichier entier sera envoyé en tant que corps
partie.

Voici un exemple de fichier vacances. Nous ajoutons une copie carbone ainsi que le nom de notre
organisation dans l'en-tête :

CC : bélier
Organisation : %o
Priorité: en vrac

[Dernière révision faite le %T]

Cher %N :

J'ai reçu votre courrier concernant "%R".
Il sera lu dès mon retour de vacances.

Sincères salutations,
--
%U <%u@%C>

INOUBLIABLE MODE


Lorsqu'il est temps de prendre des vacances, il est possible de configurer l'agent de messagerie en mode vacances.
Chaque période de vide, le message fichiervac sera renvoyé à l'utilisateur (avec des macros
substitutions) si l'utilisateur est explicitement répertorié dans le À or Cc champ et si l'expéditeur est
pas un utilisateur spécial (racine, uucp, nouvelles, démon, maître de poste, maître de nouvelles, usenet, Courrier-
démon, Agent de messagerie or personne). Les correspondances sont faites d'une manière insensible à la casse, donc
MAILER DAEMON sera également reconnu comme un utilisateur spécial. De plus, tout message marqué
avec Priorité: champ réglé à masse, liste or jonque ne déclenchera pas de message d'absence.
Ce comportement intégré peut bien entendu être surchargé par des règles adaptées (en testant et
émettre vous-même le message d'absence via MESSAGE).

En interne, mailagent utilise une commande ONCE étiquetée (%r, vacances, $vacpériode). Cela implique
vous ne devez pas utiliser le vacances tag dans vos propres commandes ONCE, sauf si vous savez ce que vous êtes
Faire.

De plus, le message de vacances n'est envoyé que si aucune commande "VACATION off" n'a été émise, ou
si un autre "VACATION on" écrase le précédent. Notez que si une règle correspond ou
not n'est pas pertinent pour l'algorithme. Par défaut, bien sûr, le message de vacances est autorisé
lorsque le vacances paramètre de configuration est défini sur on.

Si vous n'êtes pas satisfait du fait qu'un message d'absence soit envoyé aux personnes qui se sont adressées
une copie carbone uniquement, vous pouvez alors écrire en haut de votre fichier de règles :

Cc : ram { VACANCES off ; REJETER } ;

Bien sûr, vous devez substituer votre propre nom de connexion à la place de écrasement. Vous ne pouvez pas utiliser le
même schéma pour autoriser les messages de vacances à des utilisateurs spéciaux comme racine, car le test de
"spécialité" se produit après le drapeau du mode vacances. Ceci est interprété comme une caractéristique car il
évite les erreurs stupides, comme l'utilisation r* au lieu de écrasement dans la règle précédente.

Vous pouvez également configurer un message d'absence différent, destiné uniquement aux personnes de votre
organisation compte tenu du caractère sensible des informations révélées ;-). Une façon simple de
faire c'est :

De : /^\w+$/, /^\w+@\w+$/, /^[\w.-]+@.*\.hp\.com$/i
{ VACANCES ~/.hp_vacances 1w ; REJETER HP } ;

En supposant que le domaine de mon organisation est .hp.com et que les messages ne portant aucun domaine
sont des messages locaux, la règle ci-dessus configure le fichier ~/.hp_vacances, envoyé une fois par semaine, pour
tous les employés de HP.

La commande VACATION ne vous permettra pas de changer le chemin du message (mais permettra la fréquence
change de toute façon) lorsque le vacfix variable de configuration est définie sur ON. Ceci est censé être
utilisé dans les situations d'urgence, lorsqu'un seul message d'absence conviendra. Par exemple, lorsque
vous êtes en arrêt maladie, un simple message déclencheur à votre agent de messagerie depuis chez vous pourrait changer
votre ~/.mailagent configuration pour forcer ~/.je_suis_malade message, quel que soit le
diverses règles ont à dire. En fait, c'est précisément pourquoi cette fonctionnalité a été ajoutée,
incroyable... :-)

VARIABLES


On prête attention aux variables suivantes : elles peuvent provenir de l'environnement ou être
défini dans le fichier de règles :

filtre de courrier
indique où rechercher les motifs chargés, si le nom du fichier est
pas pleinement qualifié. S'il n'est pas défini, répertoire de messagerie sera utilisé à la place. Si répertoire de messagerie
n'est pas défini non plus, le répertoire personnel est utilisé.

répertoire de messagerie est l'emplacement de vos dossiers de messagerie. Tout chemin relatif est compris comme
a partir de répertoire de messagerie. S'il n'est pas défini, ~/Courriel est utilisé.

Ces variables restent actives dans la portée du fichier de règles. Un suppléant devrait-il
fichier de règles soit utilisé (via le hook de règles ou la commande APPLY), les valeurs actuelles sont propagées
au nouvel ensemble de règles, sauf s'il est remplacé dans le fichier de règles alternatif. En tout cas, le
la valeur précédente est restaurée lorsque le contrôle est retransféré à l'ensemble de règles précédent.
C'est-à-dire que ces variables ont une portée dynamique plutôt que statique.

AUTOMATIQUE REMERCIEMENTS


N'importe où dans le courrier, il peut y avoir une ligne @RR justifiée à gauche qui renverra un
accusé de réception à l'expéditeur du courrier. Le @RR peut éventuellement être suivi d'un
adresse, auquel cas l'accusé de réception sera envoyé à cette adresse à la place. En réalité
(mais gardons ça secret), c'est une façon pour moi de voir qui dirige mon
programme mailagent et qui ne le fait pas...

Le manuel de formation sendmail programme implémente généralement une telle fonctionnalité via un en-tête Return-Receipt-To:
ligne, qui renvoie tout l'en-tête une fois la livraison réussie. Cependant, ce n'est pas
implémenté sur tous les agents de transport de courrier, et @RR est une bonne alternative :-).

NOTE BENE


Tout au long de cette page de manuel, j'ai toujours écrit les champs d'en-tête avec la première lettre de
chaque mot en majuscule, comme dans Retour-Reçu-A. Mais la RFC-822 n'impose pas cette orthographe
convention, et un expéditeur pourrait légalement réécrire le champ précédent comme récépissé-de-retour-à
(et en fait il en va de même sendmail dans ses propres fichiers de file d'attente de messagerie privée).

Cependant, vous devez toujours spécifier les en-têtes dans ce que l'on pourrait appeler un normalisée maisons
(pour les en-têtes en tout cas). L'agent de messagerie reconnaîtra correctement cc:, CC: or Cc: dans un courrier
message et vous permettra de sélectionner ces champs via le Cc: sélecteur. Dans
fait, il opère la normalisation pour vous, et un cc: le sélecteur ne serait pas reconnu comme
tel. Bien sûr, aucune modification physique n'est jamais apportée à l'en-tête lui-même.

Ceci est également vrai pour les en-têtes spécifiés dans la commande STRIP ou KEEP. Si vous écrivez STRIP
Cc, il supprimera correctement tout cc: ligne. De même, si vous utilisez des expressions régulières pour
spécifier un sélecteur, Ré.*: correspondrait à la fois à l'original reçu: et Chemin de retour: des champs,
connues en interne grâce à leur représentation normalisée.

MAIL HOOKS


Les crochets de messagerie permettent à l'agent de messagerie d'invoquer de manière transparente certains scripts ou d'effectuer d'autres
traitement sur le message. Ces crochets sont activés via SAVE, STORE ou LEAVE
commandes. À savoir, l'enregistrement dans un dossier dont le bit exécutable est défini soulèvera un problème spécial.
En traitement. Par défaut, le dossier est considéré comme un programme où le courrier doit être redirigé
à. Si le programme "dossier" retourne un état zéro, alors le message est considéré sauvé by
l'agent postal. Sinon, tout le traitement attaché aux commandes de sauvegarde ayant échoué est démarré
(y compris les tentatives de sauvegarde d'urgence). Les dossiers exécutables offrent un moyen transparent (de
du point de vue du fichier de règles) pour traiter des types particuliers de messages.

En fait, cinq types de crochets différents sont disponibles. Le premier est la plaine
dossier exécutable dont nous venons de parler. Mais en fait, voici ce qui se passe réellement lorsque
une commande de sauvegarde détecte un dossier exécutable : le mailagent scanne la première ligne du
dossier (en fait, les 128 premiers octets) et cherche quelque chose commençant par # : et
suivi d'un seul mot décrivant un type particulier d'hameçon. Ceci est similaire dans la manière
le noyau s'occupe du #! crochet dans les programmes exécutables. Si aucun # : n'est trouvé ou si # : n'est
suivi de quelques ordures, puis agent de messagerie décide qu'il s'agit d'un programme simple et alimente le courrier
message à ce programme. Fin de l'histoire.

Mais si le jeton # : est suivi (espaces autorisés, la casse n'a pas d'importance) par l'un des
mots suivants, puis des actions spéciales sont prises :

Le fichier contient un ensemble de règles d'agent de messagerie qui doivent être appliquées. Un nouvel agent postal
le processus est créé pour les gérer et le statut de sortie est propagé
retour à l'agent de messagerie d'origine.

audit Ceci est similaire dans l'esprit à ce que fait le package audit.pl de Martin Streicher,
d'où le nom de ce crochet. Les variables spéciales créées par PERL
les commandes de filtrage sont initialisées et le script est chargé dans le fichier spécial crochet de courrier
l'espace de nom du package, qui vous donne également une interface avec le propre de l'agent de messagerie
routines. Vous pouvez utiliser en toute sécurité le sortie fonctionner ici, puisqu'un supplément fourche is
Fini. C'est la seule différence entre un audit et perl crochet.

livrer Même chose que pour le audit crochet, mais la sortie standard de votre script est
surveillé par agent de messagerie et compris comme des commandes de filtrage d'agent de messagerie. Sur
retour réussi, un processus mailagent sera invoqué pour exécuter réellement ces
commandes sur le message. Encore une fois, c'est similaire dans l'esprit à celui de Chip Salzenberg
livrer package et a donné le nom de ce crochet.

perl Ce crochet est le même que audit mais il est exécuté sans forker un nouveau
mailagent, et vous avez l'interface perl pour les commandes de filtrage de mailagent.
Il n'y a pas de différence avec la commande PERL, car elle est implémentée
manière, en appelant un agent de messagerie et en forçant l'exécution de la commande PERL. C'est
semblable dans l'esprit au célèbre de Larry Wall perl langue et il est responsable de
le nom de ce crochet :-).

Comme mentionné précédemment dans cette page de manuel, le crochet est invoqué à partir de la Accueil annuaire
spécifié dans votre ~/.mailagent (qui peut différer de votre véritable répertoire personnel, dans la mesure où
agent de messagerie or crochet de courrier sont concernés).

Pour les crochets qui sont finalement exécutés par perl, le tableau spécial @INC a le propre de mailagent
chemin de la bibliothèque privée ajouté, de sorte que exigent premiers regards à cet endroit.

DOSSIERS


Un dossier est un fichier ou un répertoire pouvant faire l'objet d'une diffusion par l'agent de messagerie,
c'est-à-dire l'argument des commandes de type SAVE.

Dossier Format
Par défaut, les e-mails sont écrits dans des dossiers conformément à la boîte aux lettres standard de style UNIX
format : chaque e-mail commence par un début Dès ligne portant l'adresse de l'expéditeur et le
Date. Cependant, en réglant le mmdf paramètre du ~/.mailagent sur ON, le agent de messagerie
pourra enregistrer les messages au format MMDF : chaque message est pris en sandwich entre deux lignes
de quatre caractères Ctrl-A (code ASCII 1) et le premier Dès la ligne est supprimée.

Lorsque le mode MMDF est activé, chaque dossier sera analysé pour voir s'il s'agit d'un fichier de style UNIX ou
boîte aux lettres de style MMDF et le message sera enregistré en conséquence. Lors de l'enregistrement dans un nouveau
dossier, la valeur par défaut est de créer une boîte aux lettres de style UNIX, à moins que le boîte mmdf paramétrage
variable a été définie sur ON, auquel cas le format MMDF prévaut.

Notez que le format MMDF est également la norme pour les dossiers compressés MH, donc en activant le
En mode MMDF, vous pouvez réellement livrer directement dans ces dossiers emballés. La commande MH inc
est en mesure d'incorporer le courrier de l'une ou l'autre forme de toute façon, c'est-à-dire que peu importe si le
dossier est au format UNIX (également appelé style UUCP) ou au format MMDF.

Les dossiers de style MH sont également pris en charge. Il s'agit principalement d'un répertoire dans lequel les messages sont stockés
dans des dossiers individuels. Pour enregistrer directement dans un dossier MH, préfixez simplement le nom du dossier
avec '+', comme vous le feriez avec les commandes MH. Les séquences inédites spécifiées dans votre
Profil MH (le mhprofil paramètre dans votre ~/.mailagent, la valeur par défaut est ~/.mh_profile) Sera
être correctement mis à jour, comme magasin rcv aurait.

Lorsque le dossier cible est un répertoire, mailagent tente la livraison dans un dossier individuel
dossier numéroté. Si un fichier de préfixe est présent (paramètre de configuration préfixe msg, la valeur par défaut est
.msg_préfixe), sa première ligne est utilisée pour spécifier le nom de base du message, puis un
numéro est ajouté pour donner le nom du fichier de messages à utiliser. C'est-à-dire s'il n'y a pas
un tel fichier, le dossier ressemblera à un dossier MH, sans aucun fichier de séquence MH.

Dossier Compression
Si vous disposez d'un ou de plusieurs utilitaires de compression de fichiers largement répandus, tels que
compresser or gzip dans votre PATH (tel qu'établi par ~/.mailagent), alors vous pouvez utiliser le dossier
compression pour économiser de l'espace disque, en particulier lorsque vous êtes absent pendant un certain temps et que vous ne
voulez voir votre courrier remplir le système de fichiers.

Pour obtenir une compression de dossier, vous devez configurer un fichier, désigné par le compresser
variables de configuration. Ce fichier doit répertorier les noms de dossier, un par ligne, avec des lignes vides
commentaires ignorés et de style shell (#) autorisés. Vous pouvez utiliser des modèles de style shell pour spécifier
les dossiers, et la correspondance sera tentée sur le chemin d'accès complet du dossier (~
substitution se produit). Si vous ne spécifiez pas de modèle commençant par un '/'
caractère, alors la correspondance sera tentée sur le nom de base du dossier (c'est-à-dire le dernier
composant du chemin du dossier). Si vous voulez compresser tous vos dossiers, alors mettez simplement un
'*' unique dans ce fichier.

Mailagent utilise l'extension de nom de fichier pour déterminer quel schéma de compression est utilisé pour un
dossier particulier. Le dossier visé par le spécifications comp variable de configuration (par défaut
est $spool/compressors) est utilisé pour définir les commandes que mailagent utilisera pour exécuter
les opérations compress, uncompress et cat pour une extension particulière.

Le manuel de formation compresseurs fichier contient des lignes de la forme suivante :

Étiquette l'extension de compression_prog décompresser_prog chat_prog

où:

Étiquette est le nom logique du schéma de compression. C'est généralement la même chose que
le nom du programme utilisé pour fournir la compression, mais peut être différent
pour une raison imprévue. Celui-ci doit être unique dans tous les enregistrements du fichier.

l'extension de est l'extension à reconnaître comme appartenant à la balise spécifiée. Cela doit être
unique dans tous les enregistrements du fichier.

compression_prog
est le nom de la commande à exécuter pour compresser un dossier. Le programme doit
remplacer le fichier non compressé par le fichier compressé avec l'extension
ajouté au nom du fichier (comme compresser or gzip).

décompression_prog
est le nom de la commande à exécuter pour décompresser un dossier. Le programme doit
remplacer le fichier compressé par celui non compressé sans l'extension
(comme décompresser or gunzip).

chat_prog est le nom de la commande pour afficher le contenu non compressé d'un fichier compressé
dossier vers stdout (comme zcat or gzcat).

Les champs sont séparés par PATTES pour permettre l'utilisation de caractères d'espacement dans la commande
champs.

Si le dossier visé par le spécifications comp la variable de configuration n'est pas accessible pour
quelle que soit la raison, une entrée par défaut est câblée dans mailagent (connaît à la fois compresser
et gzip programmes):

compresse .Z compresse décompresser zcat
gzip .gz gzip gunzip gunzip-c

Si vous souhaitez ajouter plus de compresseurs, vous pouvez copier la valeur par défaut compresseurs fichier de
répertoire de la bibliothèque privée de l'agent de messagerie et configurez une entrée correcte pour votre alternative
compresseur. Gardez à l'esprit que l'extension de fin doit être unique parmi toutes les
programmes répertoriés, puisque cette extension est utilisée pour déterminer le type de compression
effectuée sur le dossier.

Si le dossier est créé sans aucun formulaire compressé existant, un compresseur par défaut
est sélectionné pour vous, tel que défini par le balise comp variables de configuration. Qui fait référence à la
nom de balise du spécifications comp fichier, c'est-à-dire le premier mot de la ligne (généralement le nom du
programme de compression, mais pas nécessairement).

Lors de la tentative de livraison, mailagent vérifiera le nom du dossier par rapport à la liste des
motifs dans le fichier compressé. S'il y a une correspondance, le dossier est marqué comme compressé.
Mailagent tente ensuite la décompression s'il existe déjà un formulaire compressé (c'est-à-dire le fichier
a une extension de nom de fichier reconnue) et si aucune forme non compressée n'est présente. La livraison est
puis effectué dans le dossier non compressé. Cependant, la recompression ne se fait pas immédiatement,
car il est toujours possible d'obtenir des messages dans ce dossier en une seule livraison par lots.
Si l'espace disque devient si restreint que la décompression d'autres dossiers est impossible,
mailagent va re-compresser les dossiers qu'il a déjà décompressés. Sinon, il attend
jusqu'au dernier moment.

Si, pour une raison quelconque, un dossier compressé ne peut pas être décompressé, mailagent
livrera le courrier au dossier ordinaire. Une livraison ultérieure à ce dossier sera confrontée
avec à la fois une version compressée et une version simple du dossier, et cela vous donnera un avertissement
dans le fichier journal, mais la livraison se fera automatiquement dans le fichier brut.

Sur les dossiers nouvellement créés, le balise comp la variable de configuration est référencée pour déterminer la
type de compression à utiliser pour le dossier.

MAIL BIFFER


Si vous recevez et traitez du courrier sur votre propre machine, vous avez accès à
messagerie locale où agent de messagerie peut vous avertir de l'arrivée de nouveaux messages et vous informer de
où ils ont été enregistrés, en imprimant un petit sous-ensemble de l'en-tête et des premières lignes
du corps.

Pour utiliser le biffing, tout ce dont vous avez besoin est le réglage des quelques paramètres de biff dans votre
~/.mailagent et assurez-vous coup de poing est réglé sur MARCHE. En fait, c'est le seul paramètre que vous
besoin de définir pour obtenir un comportement de biffing par défaut minimal. N'oubliez pas de lancer le shell
commande "coup de poing y" sur les terminaux où vous souhaitez recevoir une notification (vous pouvez le faire sur
plusieurs ttys, un pour chaque écran virtuel par exemple).

Lors de la réception du courrier et de l'enregistrement dans un dossier ou de la publication dans un groupe de discussion, agent de messagerie localise
tous les ttys où vous êtes connecté, puis sélectionne ceux où le biffing a été demandé,
enfin émettre un message et émettre un bip sonore (si votre terminal le supporte et
vous utilisez le format standard--voir ci-dessous).

Personnalisation Biffer Sortie
Si le format par défaut ne correspond pas à vos besoins, vous pouvez personnaliser le message Biffing
librement, en fixant biffmsg paramètre pour pointer vers le fichier où le format est stocké.
Des substitutions de macros standard seront effectuées sur votre message, le jeu de macros suivant
remplaçant et complétant l'ensemble standard :

%-A Identique à écrire %-H, nouvelle ligne, %-B
%-B La partie du corps du message biffing, avec le codage de transfert de contenu supprimé.
Si le message est en plusieurs parties MIME, la partie text/plain est affichée. Si seulement un
text/html est disponible, le balisage HTML est supprimé pour le biffing.
%-H La partie d'en-tête du message de biffing. Si affiche uniquement De :, À : Objet : et
Date : en-têtes ou tout ce que vous avez défini tête de biff variable de configuration à.
Tous les en-têtes sont affichés sur une seule ligne de texte, quelle que soit leur longueur réelle.
Il y aura trois points de fin à la fin pour signaler que la troncature s'est produite.
Pour un article de presse (biffing après un POST -b), les champs To : et Cc : ne sont jamais
affiché, même s'il est spécifié dans tête de biff.
%-T Identique à %-B, mais le découpage est activé. Le but du rognage est d'enlever tout
citation principale dans le message, pour n'obtenir que la partie la plus significative. Cette
suppose que le caractère guillemet est un seul caractère non alphanumérique. le
la première ligne d'attribution qui peut introduire la citation peut également être supprimée,
et une longueur minimale pour la citation peut être définie dans le fichier de configuration.
%B Le chemin relatif sous %d du dossier de messages, chemin complet (%p) s'il n'est pas enregistré
sous ce répertoire. Le nom du groupe de discussion pour les articles de presse.
%D Le répertoire dans lequel le message est stocké. S'il s'agit d'un dossier MH, il s'agit du dossier
chemin complet. Le répertoire personnel est remplacé par un ~. Vide pour les articles de presse.
%F Le nom de base (dernier composant du chemin) du message. Pour un message MH, c'est
le numéro du message. Vide pour les articles de presse.
%P Le chemin du dossier. Il a la sémantique correcte pour MH et les dossiers de répertoire, c'est-à-dire
il pointe vers le répertoire du dossier lui-même. Sinon, comme %p.
%a Caractères d'alarme (^G). Peut s'étendre à plus d'un sous le contrôle du
Commande de filtrage BIP. Utilisez %b si vous ne voulez qu'une seule cloche.
%b Un caractère sonore (^G). Contrairement à %a, cela ne s'étend que pour donner UN cloche.
%d Chemin d'accès complet où les dossiers tels que celui en cours d'enregistrement sont stockés si ce n'est pas le cas
qualifié (c'est-à-dire votre chemin MH pour les dossiers MH, de quelque chose comme ~/Courriel Pour les autres
Dossiers). Vide pour les articles de presse.
%f Dossier où le courrier a été enregistré, home remplacé par ~ en abrégé. Le groupe de discussion quand
l'article a été posté pour les nouvelles.
%m Un signe '+' si le dossier est un dossier MH, vide sinon.
%p Le chemin d'accès complet (identique à %f) du message, mais sans raccourci ~. le
nom du groupe de discussion pour les articles de presse.
%t Le type de message : généralement "mail", mais défini sur "article" pour biffer après un
Commande POST.

Vous pouvez obtenir l'extension de macro standard en utilisant %:F par exemple, depuis le %f la macro est
remplacé. le %: vous permet d'obtenir la définition de macro standard de toute façon, peu importe
quoi, vous n'avez donc pas à vous rappeler si une macro donnée est remplacée dans ce contexte ou
ne pas. De plus, c'est plus sûr puisque de nouvelles macros peuvent être ajoutées ici sans préavis. Noter que
les macros liées au contenu du message commencent toutes par %- et ne sont donc pas contradictoires
avec un standard.

Voici le format que vous devez utiliser pour obtenir le même comportement que le format câblé par défaut
Format:

%b
Le nouveau %t pour %u est arrivé à %f :
----
%-UNE
----%b

Notez que la chaîne ...Suite... apparaît à l'extrémité du corps lorsqu'il n'a pas été
complètement imprimé à l'écran et les lignes restantes ne sont pas vierges ou similaires.

Garniture piste Devis
C'est une pratique courante, lorsque vous répondez à un message, d'inclure un extrait du
phrases auxquelles vous répondez, en utilisant un caractère non alphanumérique tel que '>' comme préfixe
lignes citées. Quelque chose comme:

Citant John Doe :
> Ceci est du matériel cité.
> Une autre ligne du courrier de John.

Cela fait partie de la réponse à John.

La première ligne "Quoting ...", appelée attribution ligne, est facultative et peut être
manquant ou prendre une autre forme libre.

Cependant, lorsque l'on se biffe, cela peut être considéré comme un bruit inutile, surtout de nos jours où les gens
citent librement de plus en plus dans leurs réponses. Puisque le message biff ne montre que le haut
lignes du message, il peut être souhaitable de couper automatiquement ces lignes entre guillemets.

Via l' %-T macro au format biff personnalisé, vous pouvez demander le rognage de l'interlignage
matériel de citation, en gardant ou non la ligne d'attribution, et même remplacer le matériel coupé
avec une notification indiquant que tant de lignes ont été supprimées.

Toute cette personnalisation se fait depuis le ~/.mailagent fichier de configuration, en utilisant le
garniture de biff, bifferlen et guillemet variables.

Vous devez d'abord activer le rognage en utilisant un format biff personnalisé à l'aide de la %-T macro.
En définissant bifferlen à 3, vous pouvez demander que seules les citations d'au moins 3 lignes soient
taillé. Tournant garniture de biff off supprimera la notification de rognage, tout en tournant
guillemet off supprimera également la ligne d'attribution, lorsqu'elle est présente.

Par exemple, en supposant les paramètres suivants :

bifftrim : ON
bifferlen : 2
citation biff: OFF

alors l'exemple ci-dessus produirait la sortie biffing suivante (en-tête du message
nonobstant):

[coupé 3 lignes commençant par un caractère '>' de début et une ligne d'attribution]
Cela fait partie de la réponse à John.

parce que la ligne vide suivant le matériel cité est comptée comme faisant partie du
devis. Le message "[coupé ..]" peut être désactivé en réglant garniture de biff sur OFF.

L'algorithme de découpage considère la première ligne du corps pour voir si elle commence par un
caractère non-alphanumérique. Si c'est le cas, alors toutes les lignes suivantes commençant par cela
même caractère, ou toute ligne vide est supprimée, jusqu'à la première ligne non vide commençant par
un autre personnage. Facultativement, la première ligne (et cette ligne uniquement) est ignorée si le
la seconde commence par un caractère non alphanumérique, et la première ligne est considérée comme étant
la ligne d'attribution.

En utilisant Compact Style MH Biffer
La dite Style MH biffing est une façon de présenter un corps compact où toutes les lignes
sont réunis en une grande chaîne heureuse avec des espaces successifs transformés en un seul
caractère d'espace. Pour l'activer, vous devez définir le biffmh variable sur ON.

Étant donné que ce compactage est affiché textuellement sur le tty, les sauts de ligne se produiront de manière aléatoire et
cela peut rendre la lecture difficile. Vous pouvez demander un reformatage automatique du
corps compacté en tournant biffnice sur ON et la sortie biff s'intégrera parfaitement dans le
Terminal.

Malheureusement, il n'est pas possible de personnaliser le nombre de colonnes à utiliser
pour le formatage : puisque vous pouvez biffer n'importe quel tty auquel vous êtes connecté, cela forcerait
agent de messagerie pour sonder le tty pour sa taille de colonne, pour chaque tty possible où la sortie peut aller,
et il n'existe aucun moyen portable fiable de le faire. Pardon.

EXTENSION Filtrage COMMANDES


Une fois que vous avez atteint le expert niveau, et à condition d'avoir une bonne connaissance de perl, Vous
peuvent ressentir le besoin de commandes plus avancées qui ne font pas partie de l'ensemble standard. Cette
explique comment vous pouvez y parvenir de manière dynamique, sans avoir besoin de plonger profondément
à l'intérieur du code source.

Une fois que vous avez étendu le jeu de commandes de filtrage, vous pouvez utiliser ces commandes dans le
fichier de règles comme s'ils étaient intégrés. Vous pouvez même choisir de redéfinir les commandes standard
s'ils ne vous conviennent pas (cependant, si vous souhaitez le faire, vous devez savoir exactement ce que vous
faites, ou vous pouvez commencer à perdre du courrier ou avoir un comportement inattendu - cela aussi
annule votre garantie :-).

La possibilité de fournir des commandes externes sans réellement modifier le code source principal
est, je crois, un point fort en faveur d'avoir un programme écrit dans un langage interprété
langue comme perl. Ceci bien sûr une fois que vous vous êtes convaincu que c'est un Bon
Chose pour personnaliser et étendre un programme dans le même langage que celui utilisé pour le noyau,
ce qui signifie généralement un langage assez bas avec moins de crochets conviviaux.

Informations clés
Afin d'implémenter une nouvelle commande, disons FOLD, vous devrez faire ce qui suit :

· Écrire une sous-routine perl pour implémenter l'action FOLD et la mettre dans un fichier externe
déposer. Disons que nous écrivons le sous-programme plier et nous stockons cela dans un pli.pl déposer. C'est
naturellement la partie difficile, où vous devez connaître certaines choses de base sur
internes de l'agent de messagerie.

· Choisissez où vous voulez stocker votre pli.pl déposer. Vérifiez ensuite la syntaxe avec perl -c,
juste pour être sûr...

· Modifier le nouveaucmd fichier (tel qu'indiqué par le fichier de configuration) pour enregistrer votre nouvelle commande.
Assurez-vous ensuite que ce fichier est bien protégé. Vous devez le posséder, et il ne devrait pas être
inscriptible par toute autre personne que vous.

· De plus, vous pouvez spécifier si FOLD doit modifier le
statut d'exécution et s'il sera autorisé ou non dans la _SEEN_ spéciale
Etat.

· Écrivez quelques règles en utilisant la nouvelle commande FOLD. C'est le facile partie! Notez que votre
La commande peut également être utilisée dans les crochets Perl comme s'il s'agissait d'une commande intégrée (cette
signifie qu'il existe une fonction d'interface conçue pour vous dans le crochet de courrier paquet).

Dans les sections suivantes, nous allons décrire la syntaxe du nouveaucmd fichier, et
nous présenterons ensuite quelques variables internes de bas niveau qui pourront être utilisées lors de l'implémentation
nouvelles commandes.

New Command Fichier Format
Le manuel de formation nouveaucmd Le fichier se compose d'une série de lignes, chaque ligne décrivant une commande. Vierge
les lignes sont ignorées et les commentaires de style shell introduits par le caractère dièse (#) sont
autorisé.

Chaque ligne est formée de 3 champs principaux et 2 optionnels ; les champs sont séparés par
espaces ou tabulations. Voici un squelette :



Le manuel de formation nom_cmd est le nom de la commande que vous souhaitez ajouter. Dans notre exemple précédent, il s'agirait
être PLIÉ. Le champ suivant, chemin, indique à mailagent où se trouve le fichier contenant la commande
la mise en œuvre est localisée. Disons que nous le stockons dans ~/mail/cmds/fold.plL’ fonction le champ est
le nom du perl fonction implémentant FOLD, qui peut être trouvée dans pli.pl. Ici, nous
nommé notre fonction plier. Notez que si votre fonction a son nom dans le nouveaucmd
package, qui est le comportement par défaut si vous n'en spécifiez aucun, il n'est pas nécessaire de
préfixez le nom de la fonction avec le package. Sinon, vous devez utiliser un nom complet.

Les deux derniers champs sont facultatifs et sont des valeurs booléennes qui peuvent être spécifiées par oui or
oui exprimer la vérité, et non or aucune pour exprimer le mensonge. Si statut_flag est défini sur true,
alors la commande modifiera la dernière variable d'état d'exécution. Si vu_flag est vrai,
alors la commande peut être utilisée lorsque le filtre est dans l'état _VU_. Les valeurs par défaut sont
respectivement oui et non.

Ainsi dans notre exemple, nous aurions écrit :

PLIER ~/mail/cmds/fold.pl plier non oui

pour autoriser FOLD même dans l'état _SEEN_ et l'exécuter sans modifier le courant
valeur de la état de la dernière commande variable.

Écriture An Mise en œuvre
Votre fonction perl sera chargée en cas de besoin dans le package spécial nouveaucmd, de sorte que son
son propre espace de nom est protégé et n'entre pas accidentellement en conflit avec un autre agent de messagerie
routines ou variables. Lorsque vous devez appeler l'interface perl d'un agent de messagerie courant
fonctions, vous devrez vous rappeler d'utiliser le nom complet de la routine, par exemple
&mailhook'congé pour exécuter réellement la commande LEAVE.

(Normalement, dans les crochets PERL, il n'y a pas besoin de ce préfixe puisque le script perl est
chargé dans le crochet de courrier paquet. Lorsque vous prolongez votre agent de messagerie, vous devriez être en plus
attention cependant, et ça ne fait pas vraiment de mal d'utiliser ce préfixe. Vous êtes libre d'utiliser
la perle paquet directive au sein de votre fonction, passant ainsi à la crochet de courrier paquet
dans le corps de la routine mais en laissant son nom dans le nouveaucmd paquet.)

Étant donné que mailagent chargera dynamiquement l'implémentation de votre commande la première fois qu'il
est exécuté, en chargeant le script perl spécifié en mémoire et en l'évaluant, je vous suggère
mettre chaque implémentation de commande dans un fichier séparé, pour éviter de stocker potentiellement inutile
code en mémoire.

Chaque commande est appelée avec un argument, à savoir la chaîne de commande complète telle que lue à partir du
règles de filtrage. De plus, la spéciale @ARGV tableau est défini en effectuant un style shell
analyse de la ligne de commande (qui échouera si les guillemets ne correspondent pas, mais vous pouvez alors le faire
l'analyse par vous-même depuis que vous obtenez la ligne de commande). A la fin de votre routine, vous
doit renvoyer un état d'échec, c'est-à-dire 0 pour le succès et 1 signaler un échec.

Ce sont vos seules exigences. Vous êtes libre de faire ce que vous voulez dans la routine.
Pour vous faciliter la tâche cependant, certaines variables sont pré-calculées pour vous, les mêmes qui sont
mis à disposition dans les crochets de messagerie, seuls ils sont définis dans le nouveaucmd emballer ça
temps. Il y a aussi quelques variables spéciales que vous devez connaître, et un ensemble de
routines standard que vous voudrez peut-être appeler. Veuillez éviter d'appeler quelque chose qui n'est pas
documenté ici, car il peut changer sans préavis. Si vous souhaitez en utiliser un
routine et qu'il n'est pas documenté dans cette page de manuel, veuillez me le faire savoir.

Chaque commande est appelée à partir d'un eval construire, de sorte que vous pouvez utiliser en toute sécurité la ou appelez le
routines de bibliothèque externe qui utilisent la. Si tu utilises exigent, sachez que mailagent est
mise en place d'une spéciale @INC tableau en plaçant son chemin de bibliothèque privée en premier, vous pouvez donc
placez tous vos agent de messagerie-fichiers de bibliothèque liés à cet endroit.

Spécial Variables
Les variables spéciales suivantes (certaines d'entre elles marquées en lecture seule, ce qui signifie que vous ne devriez pas
les modifier, et en effet vous ne pouvez pas) mis à disposition directement dans le nouveaucmd paquet, sont
préréglés par l'automate de filtrage, et permettent de piloter le processus de filtrage :

$mfichier Nom de base du fichier courrier en cours de traitement. Cette variable est en lecture seule.
Il est principalement utilisé dans les messages de journal, comme dans [$mfile] pour baliser chaque journal, car un
un seul processus mailagent peut traiter plusieurs messages.

$ever_saved Ceci est un booléen, qui devrait être set à 1 une fois une sauvegarde réussie
l'opération est terminée. Si à la fin du filtrage, cette variable
est encore 0, alors le LEAVE par défaut sera exécuté.

$dossier_saved La valeur de cette variable régit $chemin_messagerie ensemble de variables de commodité
pour les échappements PERL. Il est mis à jour chaque fois qu'un message est écrit dans un fichier, pour
contenir le chemin du fichier écrit.

$suite C'est le statut de continuation, une variable de la plus haute importance lorsque
gérer le flux de contrôle. Quatre constantes de la principal le paquet peut être
utilisé pour spécifier si nous devons continuer avec la règle actuelle
($FT_CONT), abandonner la règle actuelle ($FT_REJECT), relancer le filtrage à partir du
commencer ($FT_RESTART) ou simplement abandonner le traitement ($FT_ABORT). Plus sur
cela plus tard.

$dernière cmd Le dernier état de panne enregistré par la dernière commande (parmi ceux qui ne
modifier le statut d'exécution). Vous ne devriez pas avoir à le mettre à jour en
vous-même, sauf si vous implémentez une encapsulation pour d'autres commandes,
comme BACK ou ONCE, puisque par défaut $dernière cmd sera réglé sur la valeur que vous
retour à la fin de la commande.

$wmode Celui-ci enregistre l'état courant de l'automate de filtrage (mode de fonctionnement), dans un
forme de chaîne littérale, généralement modifiée par la commande BEGIN ou en accompagnement
effet, comme dans REJECT par exemple.

Toutes les variables spéciales configurées pour les échappements PERL sont également installées dans le nouveaucmd
paquet. Ce sont $connexion, %entête, etc... Vous pouvez les consulter à volonté.

D'autres variables dont vous pourriez avoir besoin sont les paramètres de configuration, contenus dans le
~/.mailagent fichier de configuration. Eh bien, la règle est simple. La valeur de chaque paramètre
arrêter du fichier de configuration est contenu dans la variable $cf'param. Variable $main'loglvl is
la copie de $cf'niveau, puisqu'il est toujours plus court à saisir $'loglvl après chaque appel à
la routine de journalisation &add_log.

Il y a une autre variable à connaître : $main'FILTRE, qui est le X- convenable
Ligne de filtre à ajouter dans tous le courrier que vous envoyez via mailagent, afin de
éviter les boucles. De plus, lorsque vous enregistrez des e-mails dans un dossier, il est judicieux d'ajouter cette ligne au cas où un
problème se pose : vous pouvez alors identifier le coupable.

Règle Environnement
Une action peut avoir un désir légitime de modifier l'environnement dans le cadre d'une
règle uniquement, revenant à la valeur précédente lors de la sortie de la règle. Ou vous voudrez peut-être
changer la valeur pour toujours.

Quand on parle de modification de l'environnement, on se réfère à celui mis en place via le
fichier de configuration, dont les valeurs se retrouvent dans le cf paquet. Eh bien, certaines de ces variables
sont copiés dans le env package avant le début du filtrage d'un message (sous le contrôle de
le @env'Env déployer).

Toutes les règles doivent alors se référer à la version dans le env paquet, et non dans le cf paquet,
pour voir les modifications. Les modifications globales sont apportées en affectant directement la variable dans
env package, tandis que les modifications locales sont demandées en appelant le &env'local routine.

Par exemple, le cf'umask la valeur est copiée comme env'umask car umask est tenue dans @env'Env.
Les modifications globales sont apportées en configurant cette copie directement, tandis que des modifications locales peuvent être apportées
avec:

&env'local('umask', 0722);

pour définir une nouvelle valeur locale. La première fois &env'local est appelée sur une variable, sa valeur
est enregistré quelque part et sera restauré à la sortie de la portée de la règle. Puis le nouveau
la valeur est affectée à la variable.

Les variables nécessitant un effet secondaire lorsque leur valeur est modifiée (telles que la variable umask,
qui nécessite un appel système pour permettre au noyau de voir le changement) peut le spécifier en accédant
le %env'Spec tableau, la clé étant le nom de la variable nécessitant un effet de bord, le
valeur étant interprétée comme un morceau de code perl exécuté une fois la valeur d'origine restaurée. Pour
exemple, nous disons quelque part (dans &env'init):

paquet env ;
$Spec{'umask'} = 'umask($umask)' ;

pour mettre à jour la vue du noyau lorsque vous quittez la portée. Notez que l'effet secondaire est évalué une fois
la variable a retrouvé sa valeur d'origine, et dans env paquet.

En interne, le &analyser_mail appels de routine &Configuration de l'env avant de commencer son traitement pour
initialiser le env paquet, et &env'nettoyer à la fin avant de revenir. Avant de courir
les actions spécifiées sur une règle correspondent, &appliquer_règles en cours &env'restaurer pour assurer une
vue cohérente de l'environnement lors de l'exécution des actions pour cette règle particulière.

Modification Contrôle Débit
Lorsque vous souhaitez modifier le flux de contrôle pour effectuer un REJECT, un RESTART ou un ABORT, vous devez
trois choix. Si vous souhaitez contrôler cette action via une option, de la même manière que le standard
UNIQUE fait (avec -c, -r or -a), vous pouvez appeler &main'alter_execution(option, Etat) donnant
deux paramètres : la lettre d'option et l'état que vous souhaitez modifier avant de modifier
le flux de contrôle.

Vous pouvez également modifier directement le $wmode et $suite variables, mais alors vous aurez
pour faire votre propre journalisation si vous en voulez. Ou vous pouvez appeler des routines de bas niveau
&main'do_reject, &main'do_restart et &main'do_abort effectuer les opérations correspondantes
fonctionnement (avec journalisation).

Rappelez-vous que l'état _VU_ est spécial et directement géré au niveau du filtre, et
le filtre commence à l'état INITIAL. L'action par défaut est de continuer avec le
règle, c'est pourquoi il n'y a pas de routine pour effectuer cette tâche.

La méthode préférée est d'invoquer le crochet de courrier fonctions d'interface, &mailhook'commence,
&mailhook'rejeter, etc..., et cela fonctionnera même si vous redéfinissez ces fonctions
toi-même. De plus, c'est la seule interface qui ne sera probablement pas modifiée par de nouvelles
versions.

Général Objet Routines
Voici une liste de toutes les routines générales que vous pouvez appeler lors de l'exécution
certaines tâches de bas niveau. Notez que ces informations dépendent de la version. Depuis que je documente
eux, je vais essayer de les garder dans de nouvelles versions, mais je ne peux pas garantir que je n'aurai pas à
modifier légèrement une partie de leur sémantique. Il y a de fortes chances que vous n'ayez jamais à le faire
t'inquiète quand même pour ça.

&format d'en-tête (champ rfc822)
Renvoie un champ RFC822 formaté pour tenir dans 78 colonnes, avec les continuations appropriées
introduit par huit espaces.

&header'normalize(rfc822-header-name)
Normaliser la casse dans l'en-tête RFC822 et renvoyer le nouveau nom d'en-tête avec chaque premier
lettre majuscule.

&header'réinitialiser
Cela fait partie d'une validation d'en-tête RFC822, principalement utilisée lors du fractionnement d'un
digérer. Ceci réinitialise l'automate de reconnaissance (voir &header'valid).

&header'valid(line)
Renvoie un statut booléen, indiquant si toutes les lignes données jusqu'à présent à ce
fonction depuis la dernière &header'réinitialiser font partie d'un en-tête RFC822 valide. le
La fonction comprend la première ligne From qui fait partie des mails UNIX. À n'importe
temps, la variable $header'peut-être peut être vérifié pour voir si jusqu'à présent nous avons trouvé
au moins un champ d'en-tête de courrier essentiel.

&main'acs_rqst(fichier)
Effectuez un verrouillage .lock sur le fichier, renvoyant 0 en cas de succès et -1 en cas d'échec.
Si un ancien verrou était présent, il est supprimé (délai fixé à une heure). Utiliser
&main'free_file pour débloquer le verrou.

&main'add_log(chaîne)
Ajoutez le un magnifique au fichier journal. L'idiome habituel est de postfixer cet appel avec le
if $'loglvl > Plus-value, Où Plus-value est le niveau de journalisation que vous souhaitez avoir avant
émettant ce type de journal ($'loglvl est une forme abrégée pour $main'loglvl).

&main'free_file(fichier)
Supprimer un .lock sur un fichier, obtenu par &main'acs_rqst. Elle renvoie 0 si le verrou
a été supprimé avec succès, -1 s'il s'agissait d'un verrou obsolète (obtenu par quelqu'un d'autre).

&main'header_found(fichier)
Analysez l'en-tête d'un fichier et essayez de déterminer s'il y a un en-tête de courrier à
le début ou pas. Renvoie vrai si un en-tête a été trouvé.

&main'history_record
Enregistrez l'ID de message du message en cours et renvoyez 0 si le message n'a pas
déjà vu, 1 s'il s'agit d'un doublon.

&nom'hôte principal
Renvoie la valeur du nom d'hôte, en minuscules, avec le nom de domaine éventuel ajouté
à elle. Le nom d'hôte est mis en cache, puisque sa valeur doit initialement être obtenue par
bifurquer. (voir également &main'monnomd'hôte)

&main'internet_info(email-address)
Analyser une adresse e-mail Internet et renvoyer un tableau à trois éléments contenant le
hôte, le domaine et la partie pays de l'hôte Internet. Par exemple, si le
L'adresse est [email protected], il reviendra (c, b, a).

&main'login_name(email-address)
Analysez l'adresse Internet e-mail et renvoyez le nom de connexion.

&main'macros_subst(*ligne)
Effectuez une substitution de macros sur place (ligne passée en tant que type glob) à l'aide de la
informations actuellement détenues dans le %main'En-tête déployer. Faire pas pass *_ en tant que
paramètre, puisqu'en interne macros_subst utilise une variable locale portant ce nom
pour effectuer les substitutions et vous vous retrouveriez avec une version non modifiée. Si
tu veux vraiment passer *_, vous devez utiliser la valeur renvoyée par
macros_subst qui est le texte substitué, mais c'est moins efficace que
le faire modifier en place.

&main'makedir(chemin, Mode)
Make directory, créant tous les répertoires intermédiaires nécessaires pour faire
chemin d'accès un répertoire valide. N'a aucun effet si le répertoire existe déjà. le
Le paramètre mode est facultatif, 0700 est utilisé (nombre octal) s'il n'est pas spécifié.

&main'monnomd'hôte
Renvoie le nom d'hôte de la machine actuelle, sans nom de domaine. le
hostname est mis en cache, car sa valeur doit initialement être obtenue par fork.

&main'run_command(filter-command)
Exécute la commande de filtre unique spécifiée et renvoie l'état de continuation,
qui devrait normalement être affecté à la $suite variable. Vous aurez besoin de ceci
routine lorsque vous essayez d'implémenter des commandes qui encapsulent d'autres commandes, comme
UNE FOIS ou SÉLECTIONNER.

&main'seconds_in_period(période)
Renvoie le nombre de secondes dans la période spécifiée. Voir section Spécification A
Période pour obtenir des chaînes de période valides.

&main'shell_command(programme, contribution, Rétroaction)
Exécutez une commande shell et renvoyez un état d'échec (0 pour OK). Le paramètre d'entrée
peut être l'une des constantes suivantes (définies dans le principal paquet) : $NO_INPUT
pour fermer l'entrée standard, $BODY_INPUT pour rediriger le corps du message courant,
$MAIL_INPUT pour diriger l'ensemble du courrier tel quel, $MAIL_INPUT_BINARY pour diriger l'ensemble
mail après avoir supprimé tout codage de transfert de contenu et $HEADER_INPUT à
diriger l'en-tête du message. Le paramètre de rétroaction peut être l'un de $FEEDBACK ou
$NO_FEEDBACK selon que vous souhaitez ou non utiliser la sortie standard pour
modifier la partie correspondante du message. Si aucune rétroaction n'est souhaitée, le
la sortie de la commande est renvoyée par courrier à l'utilisateur. Le $FEEDBACK_ENCODING est
géré comme $ FEEDBACK mais indiquera à l'agent de messagerie de regarder le corps le mieux adapté
encodage lorsque l'entrée est le message entier.

&main'parse_address(rfc822-address)
Analyser une adresse e-mail RFC822 et renvoyer un tableau à deux éléments contenant le
adresse Internet et la partie commentaire de cette adresse.

&main'xeqte(filter-actions)
Exécute une série d'actions séparées par le ';' caractère, appelant commande_exécution
pour effectuer réellement le travail. Renvoie le statut de continuation. Noter que
$FT_ABORT va jamais être renvoyé, car l'agent de messagerie s'arrête généralement après avoir
exécuté un ensemble d'actions, ne continuant que s'il a vu un RESTART ou un REJECT.
Ce que ABORT fait, c'est ignorer les commandes restantes sur la ligne et quitter comme si
toutes les commandes avaient été exécutées. Vous pourriez dire xéqte est l'équivalent de la eval
fonction en perl, car elle interprète un petit script de filtrage et renvoie le contrôle
à l'appelant une fois terminé, et ABORT est de perl la.

Vous pouvez également utiliser les trois fonctions de la externe package qui manipule persistant
variables (déjà documentées dans la section traitant des variables) ainsi que l'utilisateur-
macro-routines définies.

Exemple
Écrire vos propres commandes n'est pas facile, car cela nécessite des connaissances de base concernant
internes de l'agent de messagerie. Cependant, une fois que vous êtes familiarisé avec cela, cela devrait être relativement
simple.

Voici un petit exemple. Nous voulons écrire une commande pour renvoyer un message électronique au
l'expéditeur d'origine, comme le fait sendmail, avec un texte d'introduction pour expliquer ce qui s'est passé.
La commande aurait la syntaxe suivante :

RENVOYER raison

et nous voudrions que cette commande modifie le statut existant, renvoyant un échec si le
le courrier ne peut pas être renvoyé. Puisque cette commande renvoie en fait quelque chose, nous ne
voulez qu'il soit exécuté dans l'état _VU_. Voici mon implémentation (non testée):

sous renvoi {
local($cmd_line) = @_;
local($raison) = join(' ', @ARGV[1..$#ARGV]);
sauf si (open(MAILER, "|/usr/lib/sendmail -odq -t")) {
&'add_log("ERREUR impossible d'exécuter sendmail pour envoyer un message")
si $'loglvl;
1 revenir;
}
imprimer COURRIER <
De : agent de messagerie
À : $header{'Expéditeur'}
Objet : Courrier retourné : échec de l'agent de messagerie
$main'FILTRE

--- Transcription de la session

$raison

--- Le message non envoyé suit

$header{'Tous'}
EOF
fermer MAILER ;
$ever_saved = 1 ; # Je ne le veux pas dans la boîte aux lettres
$ ? == 0 ? 0 : 1 ; # Statut d'échec
}

En supposant que cette commande est mise dans ~/mail/cmds/sendback.pl, la ligne le décrivant dans le
nouveaucmd le fichier serait:

RENVOYER ~/mail/cmds/sendback.pl renvoi oui non

Désormais, cette commande peut être utilisée librement dans n'importe quelle règle et sera enregistrée en tant qu'élément défini par l'utilisateur.
commande par le répartiteur de commandes. Qui a dit que ce n'était pas facile à faire ? :-)

Notez l'utilisation de la variable $ever_saved pour marquer le courrier comme enregistré une fois qu'il a été
rebondi. En effet, si l'action SENDBACK est la seule action à exécuter, nous ne
voulez que l'agent de messagerie LAISSE le courrier dans la boîte aux lettres car il n'a jamais été enregistré (cela
le comportement par défaut n'étant qu'une précaution -- mieux vaut prévenir que guérir).

Conclusion
Si en cours de route vous imaginez des commandes utiles qui pourraient faire partie de la norme
jeu de commandes, veuillez me les envoyer par e-mail et j'envisagerai de les intégrer. A l'avenir, je
aimerait également fournir une bibliothèque standard de scripts perl pour implémenter des
commandes qui pourraient être nécessaires dans des cas particuliers.

Notez que vous pouvez également utiliser les informations présentées ici dans les scripts d'échappement perl.
Via l' exigent opérateur, il est facile d'obtenir la nouvelle implémentation de la commande dans votre
script et effectuer la même tâche. Vous devrez peut-être configurer @ARGV par vous-même si vous
comptez sur cette fonctionnalité dans votre implémentation de commande.

L'extension de commande peut également être considérée comme un moyen de réutiliser un autre code perl, le mailagent
fournissant un cadre fixe et fiable et le programme externe fournissant le service. Un
l'extension immédiate serait la gestion des listes de diffusion, en utilisant ce mécanisme pour s'interfacer avec
certains logiciels de gestion de listes de diffusion écrits en perl.

GÉNÉRIQUE MAIL SERVEUR


Une bonne chose à propos de mailagent est qu'il vous fournit les outils de base pour implémenter un
serveur de messagerie générique. En effet, via la commande SERVER, vous pouvez traiter un message mail,
extraire puis exécuter certaines commandes prédéfinies. Par exemple, vous pouvez implémenter un
serveur d'archives, ou un gestionnaire de liste de diffusion, etc...

La principale limitation actuelle est que seules les commandes simples sont acceptées, ou les commandes
en prenant quelques informations supplémentaires comme Standard contribution ou équivalent. Il n'y a pas de notion de modes,
avec des ensembles de commandes séparés pour chaque mode ou une visibilité limitée de l'espace de noms, au moins pour
maintenant, il n'est donc pas facile (bien que possible) d'implémenter un serveur ftpmail, par exemple,
puisque cela implique la notion de mode.

Informations clés
Afin d'implémenter une commande de serveur de messagerie (disons envoyer filet, ce qui enverrait un arbitraire
fichier du système de fichiers dans un message électronique séparé), vous devez effectuer les opérations suivantes :

· Pensez à la commande du point de vue de la sécurité. Ici, la commande que nous voulons
implémenter est potentiellement dangereux puisqu'il peut donner accès à n'importe quel fichier sur le
machine l'individu en cours d'exécution agent de messagerie a accès à. Nous voulons donc limiter cela
commande à un nombre limité de personnes de confiance, qui se verront accorder power pour exécuter
cette commande. Plus à ce sujet plus tard.

· Choisissez si vous souhaitez implémenter la commande en perl ou dans une autre programmation
Langue. Si vous faites ce dernier, votre commande sera connue comme un coquille commande (c'est-à-dire un
commande exécutable directement depuis un shell), alors que dans le premier cas, vous avez la
choix de le faire apparaître comme un coquille commande, ou l'avoir accroché à la agent de messagerie in
auquel cas il est connu comme un perl commander. Dans ce dernier cas, votre commande sera
chargé dynamiquement dans mailagent avec tous les avantages que cela vous apporte. Ici, nous
allons écrire notre commande en tant que script shell.

· Écrivez la commande elle-même. C'est la partie la plus difficile de ce schéma. Plus tard,
nous verrons une mise en œuvre simple de la envoyer commander.

· Modifier le serveur de commande fichier (défini dans votre ~/.mailagent) pour enregistrer votre nouvelle commande.
Assurez-vous ensuite que ce fichier est bien protégé. Vous devez le posséder et être le seul
permis de le modifier.

· De plus, vous voudrez peut-être masquer certains des arguments dans la transcription de la session
(plus à ce sujet plus tard), autorisez la commande à prendre un flux de données comme son Standard contribution,
assigner un chemin à la commande, etc... Tous ces paramètres prennent place dans votre
serveur de commande fichier.

· Commencez à utiliser la commande... qui est bien sûr la partie la plus agréable de ce schéma !

Dans les sections suivantes, nous apprendrons la syntaxe de serveur de commande fichier, quoi pouvoirs
sont, comment la transcription de la session est construite, quel est l'environnement de commande, etc...

Intégré Commandes Informations clés
Le serveur de messagerie a un ensemble limité de commandes intégrées, traitant de l'authentification de l'utilisateur
et les paramètres d'environnement de commande. L'authentification de l'utilisateur est basée sur un mot de passe et n'est pas
extrêmement fort puisque les mots de passe sont spécifiés en clair dans le message lui-même,
qui pourrait être facilement intercepté.

Le serveur maintient la notion de pouvoirs. Un utilisateur peut avoir plus d'un pouvoir à la fois.
temps, chaque pouvoir n'accordant qu'un accès limité à certaines zones sensibles. Quelques pouvoirs sont
câblés dans le serveur, mais l'utilisateur peut en créer de nouveaux si nécessaire. Ces pouvoirs sont
appliqué par logiciel, ce qui signifie que la commande doit vérifier par elle-même si elle a le nécessaire
puissance(s) pour fonctionner correctement.

Les pouvoirs sont protégés par un mot de passe et un fichier d'habilitation. Avoir le bon mot de passe n'est pas
assez, vous devez être autorisé à (ab)utiliser. Le dossier de dédouanement est une liste d'e-
modèles d'adresses e-mail, en utilisant le schéma de métacaractères du shell, quelqu'un étant effacé si et
uniquement si son adresse e-mail correspond à au moins un des modèles du fichier de dédouanement.
Plus vous utiliserez les métacaractères, plus ce schéma d'autorisation sera faible, donc
être prudent.

Vos commandes et le résultat résultant de leur exécution vous sont normalement renvoyés par courrier
sous forme de transcription de session. Pour des raisons de sécurité, les mots de passe sont masqués depuis la ligne de commande.
De même, le fait de ne pas obtenir de pouvoir n'indiquera pas si vous manquiez d'autorisation ou
si votre mot de passe était mauvais.

Un utilisateur avec le Système pouvoir est autorisé à créer de nouveaux pouvoirs, supprimer d'autres pouvoirs, modifier
mots de passe d'alimentation et répertorier, supprimer ou modifier les autorisations d'alimentation. C'est en quelque sorte un élément important
puissance qui doit être détenue par un petit nombre d'utilisateurs avec une autorisation très stricte (pas
méta-caractères dans l'adresse, si possible). Un bon mot de passe devrait également protéger cela
Puissance.

Cependant, un utilisateur avec le Système le pouvoir n'est pas autorisé à obtenir directement un autre pouvoir sans
spécifiant son mot de passe et y étant autorisé par le fichier d'apurement associé. Mais
il serait possible d'y parvenir indirectement en supprimant le pouvoir et en créant un nouveau
celui portant le même nom. Afin de contrôler les personnes avec le Système puissance et aussi pour
une situation délicate, il y a un autre pouvoir plus divin : le racine Puissance.

Un utilisateur avec le racine le pouvoir peut faire pratiquement n'importe quoi, puisqu'il accorde instantanément que
individuels tous les pouvoirs disponibles sur le serveur (mais Sécurité). La seule limitation est
qui racine ne peut pas supprimer le racine pouvoir seul. Il faut préciser le Sécurité
(une autre alimentation câblée) afin de continuer. Inutile de dire que seulement UN l'individu devrait
avoir les deux racine et Sécurité autorisation, et une seule personne doit connaître Sécurité
mot de passe et figurer dans le dossier de dédouanement. le Système le pouvoir ne peut nuire à aucun de ceux
deux puissances. Finalement, plus d'un utilisateur pourrait avoir le racine pouvoir, mais n'accordez pas
que légèrement...

Obtenir le racine la puissance est nécessaire lorsque Système a joué avec la configuration du système
de manière désespérée, ou lorsqu'une longue séquence atomique de commandes doit être émise : racine is
pas soumis au nombre maximum de commandes pouvant être émises dans un seul message.

Au cas où vous pensez cela agent de messagerie fonctionnalité est dangereuse pour votre compte, ne créez pas la
racine et Sécurité pouvoirs, et n'écrivez pas de commandes sensibles.

Intégré Commandes Définition
Voyons maintenant ces commandes intégrées. Les mots de passe des commandes sensibles seront
caché dans la transcription de la session. Certaines commandes acceptent l'entrée en lisant le courrier
message jusqu'au EOF marqueur, qui est une simple chaîne EOF sur une ligne par elle-même (analogue
avec des coquillages here. INSTITUTIONNELS ).

addauth power
Ajouter des utilisateurs au fichier d'autorisation pour power. Si le mot de passe d'alimentation est donné, aucun
une puissance spéciale est nécessaire, sinon le Système puissance est nécessaire. Pour racine or
Sécurité puissances, la puissance correspondante est requise, ou la doit être
spécifié. La commande lit l'entrée standard jusqu'au marqueur EOF pour obtenir le
nouveaux utilisateurs.

approuver commander
Enregistre le mot de passe dans l'environnement de commande, puis exécute la commande. Si
un pouvoir est requis et pas encore obtenu, la commande cherchera le mot de passe
dans l'environnement et essayez d'obtenir le pouvoir approprié en utilisant ce mot de passe. D'où,
la commande approuvée (avec le mot de passe approprié) s'exécutera de manière transparente sans le
les tracas de demander l'alimentation, d'émettre la commande puis de relâcher le
Puissance. C'est au commandement d'effectuer la approuver test de mot de passe en regardant
au approuver variable dans l'environnement de commande (voir ci-dessous). Depuis le dédouanement
les contrôles (tels que ceux effectués lors d'une demande de puissance) ne sont pas effectués,
commande sensible devrait toujours traiter le approuver construction.

delpower power [Sécurité]
Supprimer un pouvoir du système et sa liste d'autorisations associée. le Système
le pouvoir est nécessaire pour supprimer la plupart des pouvoirs sauf racine et SécuritéL’ Sécurité
le pouvoir ne peut être supprimé que par lui-même et le racine le pouvoir ne peut être supprimé que lorsque
le Sécurité mot de passe est également spécifié.

obtenir l'autorisation power
Obtenir le fichier d'autorisation actuel pour une puissance donnée. Aucune alimentation spéciale requise si le
mot de passe est donné ou le pouvoir est déjà détenu. Sinon, l'alimentation du système
est nécessaire pour tous les pouvoirs mais racine or Sécurité où la puissance correspondante est
obligatoire.

nouveau pouvoir power [alias]
Ajouter un nouveau pouvoir au système. La commande lit ensuite l'entrée de courrier standard
jusqu'au marqueur EOF pour obtenir la liste d'autorisation de puissance. le Système le pouvoir est
nécessaire pour créer un nouveau pouvoir, à moins qu'il ne soit racine or Sécurité: Les Sécurité power
est nécessaire pour créer racine et la racine le pouvoir est nécessaire pour créer Sécurité.

passwd power et les sites anciens nouvelle
Modifier le mot de passe d'alimentation. Peu importe si vous détenez déjà le correspondant
pouvoir, vous devez donner l'ancien mot de passe approprié. Voir aussi le commander.

power nouvelle
Modifier le mot de passe d'alimentation. La puissance correspondante est requise, ou vous devez obtenir
le Système Puissance. Pour changer le racine or Sécurité mots de passe, vous avez besoin du
puissance correspondante.

power prénom
Demandez un nouveau pouvoir. Bien sûr, racine n'a pas besoin de demander d'autre
pouvoir mais Sécurité, moins donner de mot de passe. Cette commande n'est pas honorée lorsque le
le serveur n'est pas en mode sécurisé, à l'insu de l'utilisateur : le message d'erreur dans le
fichier de transcription n'est pas différent de celui obtenu avec un mot de passe invalide.

pouvoirs regexp
Lister toutes les puissances correspondant à l'expression régulière perl, ainsi que leur
dossier de dédouanement respectif. le Système puissance est nécessaire pour obtenir la liste. le
racine or Sécurité l'alimentation est nécessaire pour accéder au racine or Sécurité
informations, respectivement. Si aucun argument n'est donné, toutes les puissances sont
listé.

libérer power
Débarrassez-vous d'un certain pouvoir.

remauth power
Supprimer les utilisateurs du fichier d'autorisation, en obtenant la liste en lisant le courrier standard
saisie jusqu'au marqueur EOF. Cette commande ne nécessite aucun pouvoir particulier si
le mot de passe correct est donné ou si le pouvoir est déjà détenu. Autrement,
le Système il faut de la puissance. Pour racine et Sécurité dégagement, le correspondant
il faut aussi de la puissance.

set variable Plus-value
Définissez la variable sur la valeur correspondante. Utile pour modifier les variables internes
comme la valeur du marqueur EOF, ou modifier un environnement de commande. L'utilisateur peut
définir ses propres variables pour ses commandes. Pour drapeau-variable de type, une valeur de
on, oui or oui définit la variable sur 1, toute autre chaîne la définit sur 0 (faux).
Utilisé tout seul comme set, la liste de toutes les variables définies avec
leurs valeurs respectives sont renvoyées.

définirauth power
Remplacez le fichier d'autorisation de puissance par celui obtenu à partir de l'entrée de courrier standard jusqu'à
la marque EOF. le Système l'alimentation est nécessaire à moins que vous ne spécifiiez le mot de passe approprié
ou le pouvoir est déjà vôtre. Comme d'habitude, racine or Sécurité les autorisations ne peuvent être
changé lorsque le pouvoir est détenu.

utilisateur [e-mail [commander]]
Exécutez la commande en assumant l'identité de messagerie spécifiée. Les pouvoirs sont perdus pendant que
exécutant la commande. L'identité de l'e-mail peut être vérifiée par la commande elle-même,
qui peut imposer d'autres restrictions sur l'exécution, comme obtenir l'utilisateur-
pouvoirs définis. Notez que cette commande ne modifie que l'environnement global, et
que c'est à la commander mise en œuvre pour utiliser ces informations. Si
aucune commande n'est spécifiée, la nouvelle identité est supposée jusqu'à ce qu'elle soit modifiée par une autre
utilisateur commande et tous les pouvoirs actuellement détenus par l'utilisateur sont libérés. Sinon
e-mail adresse est donnée, l'ID utilisateur d'origine est restauré.

Command Environnement
Il existe six types de commandes et de variables pouvant être spécifiées en mode serveur. Deux de
leur, fin et vous aider les types sont spéciaux et traités séparément. Deux types var et drapeau reportez-vous
aux variables et aux deux derniers types perl et coquille se référer aux commandes.

Chaque fois que l'agent de messagerie lance une commande de serveur, il configure un environnement pour cette commande : si
c'est un perl-type commande, puis un ensemble de variables perl sont définies avant de charger le
commander; si c'est un coquille-type commande, certaines variables d'environnement sont initialisées et
le descripteur de fichier n° 3 est configuré pour pointer directement vers la transcription de la session de l'agent de messagerie.

A coquille-type commande est fourchue, tandis qu'un perlLa commande -type est chargée directement dans agent de messagerie
au sein du cmdenv paquet. Cela fonctionne un peu comme la commande de filtrage PERL, seule la
package cible diffère et un ensemble distinct de variables est prédéfini.

Certaines commandes collectent des données supplémentaires jusqu'à un marqueur de fin de fichier (par défaut la chaîne
EOF sur une ligne par elle-même) et ces données sont transmises aux commandes shell via Stdin et perler
commandes via le @tampon variable configurée dans le package d'environnement nommé cmdenv (dans lequel
la commande est chargée et exécutée).

Si vous définissez vos propres variables (types var or drapeau), vous pouvez utiliser la commande intégrée set commander
pour modifier leurs valeurs. Notez qu'aucune valeur par défaut ne peut être fournie lors de la définition de votre
variable. Une valeur par défaut appropriée doit être définie dans les commandes qui les utilisent, avec
l'avantage que différentes valeurs par défaut peuvent être utilisées par différentes commandes.

convivial variables sont définies. La plupart sont en lecture seule, sauf notification
sinon, auquel cas la fonction intégrée set commande peut être utilisée sur eux.

approuver Le mot de passe d'approbation pour approuver commandes, vide si pas dans une commande intégrée approuver
construction.

auth Un indicateur défini sur vrai lorsqu'une enveloppe valide a été trouvée dans le message électronique. Lorsque
ce drapeau est faux, le serveur ne peut pas être mis en mode de confiance.

cmd La ligne de commande, telle qu'écrite dans le message.

recueillir Indicateur interne défini sur vrai lors de la collecte des entrées d'un document ici. Il est
normalement remis à false avant d'appeler la commande.

déboguer Vrai lorsque le mode débogage est activé (peut être défini).

handicapé Une liste de commandes désactivées séparées par des virgules, sans espace entre elles. Cette
est initialisé lorsque la commande SERVER est invoquée et que -d option est utilisée.

eof Le marqueur de fin de fichier actuel pour les commandes here-document. Par défaut réglé sur
'EOF' (peut être modifié).

erreurs Nombre d'erreurs jusqu'à présent.

numéro de travail Le numéro de travail attribué à l'agent de messagerie actuel.

enregistrer Ce qui a été consigné dans la transcription, avec certains arguments éventuellement cachés.

prénom Le nom de la commande.

un jeu Mode d'emballage pour l'envoi de fichiers (peut être défini).

chemin Adresse de destination pour l'envoi de fichier ou la notification (peut être définie).

pouvoirs Une liste de pouvoirs séparés par deux-points (:) que l'utilisateur a actuellement avec succès
demandé et obtenu.

demandes Nombre de demandes traitées à ce jour.

tracer Vrai lorsque les commandes shell veulent être tracées dans la transcription (peut être défini).

confiance Vrai lorsque le serveur est en mode de confiance, où des pouvoirs peuvent être obtenus. Ceci est activé
par le -t option de la commande SERVER, à condition qu'une enveloppe de courrier valide ait été
trouvé.

uid Adresse de l'expéditeur du message, où la transcription doit être envoyée. Par
extension, le véritable ID utilisateur pour le serveur, qui est la base de la puissance
mécanisme de dédouanement.

utilisateur L'ID utilisateur effectif, identique à l'origine à l'uid, mais peut être modifié via
le utilisateur commande intégrée.

Session Transcription
Une transcription de session est automatiquement renvoyée par courrier à l'utilisateur qui a demandé un serveur
accès. Cette transcription montre les commandes exécutées par l'utilisateur et leur statut : OK or ÉCHEC.
Entre ces deux lignes, la transcription montre toute sortie explicitement faite par la commande à
la transcription. Généralement, la transcription peut être utilisée pour renvoyer les messages d'erreur à
l'utilisateur, mais même les commandes s'exécutant correctement peuvent vouloir émettre un message explicite,
indiquant ce qui vient d'être fait.

Une commande perl peut accéder à la transcription via le MAILER descripteur de fichier, défini dans le cmdenv
package, alors qu'une commande shell peut y accéder via son descripteur de fichier #3.

Notez que la transcription de la session est envoyée par la poste au expéditeur du message, c'est-à-dire quel que soit le
la ligne d'en-tête de l'enveloppe l'indique. En ce qui concerne le serveur, cette adresse e-mail est
utilisé comme ID utilisateur, tout comme un nom de connexion simple peut être considéré comme l'ID utilisateur. Pour
commandes sensibles, l'authentification basée sur ces informations est vraiment faible. Un plus
l'authentification "sécurisée" est fournie par les pouvoirs du serveur, qui est basée sur un mot de passe.
Malheureusement, le mot de passe en clair doit être transmis dans le message lui-même et pourrait être
écouté.

enregistrement New Commandes et Variables
Les commandes et les variables du serveur sont définies dans le serveur de commande fichier défini dans votre
~/.mailagent. Le format du fichier est celui d'un tableau avec des éléments sur une ligne séparés par
caractères de tabulation. Chaque ligne définit une commande ou une variable. Tout champ non pertinent peut être
saisie sous la forme d'un seul caractère '-' (moins). Le format autorise les commentaires de style shell (#).

Chaque ligne contient les champs suivants :

prénom type cacher collecter des données chemin supplémentaire

où:

prénom est le nom de la commande ou de la variable tel qu'il est reconnu par le serveur.

type fait partie de perl, coquille, var, drapeau, vous aider or fin.

cacher indique quels arguments de la commande doivent être masqués (le nom de la commande
étant l'argument zéro) dans la transcription de la session. Utilisez '-' si aucun argument
besoin d'être caché. Généralement, ceci est utilisé pour masquer les mots de passe clairs dans
commandes. Si plusieurs arguments doivent être masqués, une liste de
des nombres séparés par un ',' (virgule) peuvent être spécifiés, avec aucune surpeuplés jusqu'à XNUMX fois
eux. Par exemple, '2,4' masquerait les arguments 2 et 4 dans la transcription.

collecter des données est un indicateur (précisez 'y' ou 'n', mais vous pouvez utiliser des mots complets
'oui' ou 'non') indiquant si la commande collecte des données supplémentaires dans un
ici-document jusqu'au marqueur EOF. Alternativement, vous pouvez spécifier '-' dans
lieu de 'n'.

chemin spécifie le chemin de la commande (~substitution de nom autorisée). Si non
pertinent (par exemple lors de la définition d'une variable) ou lorsque vous souhaitez le laisser
vide, utilisez '-'. Si un chemin vide est spécifié pour un perl or coquille commander,
alors la mise en œuvre de cette commande devrait se trouver dans rép_serv,
tel que défini dans ~/.mailagent. Si le nom de la commande est cmd par exemple, alors
perl y sont attendus dans un fichier nommé cmd of cmd.pl, tandis que
les commandes shell doivent se trouver dans un cmd of cmd.sh déposer. Noter que
une commande est désactivée si elle ne peut pas être localisée au moment où serveur de commande
le fichier est analysé.

supplémentaire est tout paramètre supplémentaire nécessaire pour la commande. Contrairement à d'autres domaines, ce
doit être laissé vide s'il n'est pas nécessaire. Tout jusqu'à la fin de la ligne est
saisi par ce champ. Les commandes Perl doivent spécifier le nom du perl
fonction à appeler pour exécuter la commande ; si aucun n'est spécifié, le nom de
la commande elle-même est appelée. Les commandes Shell peuvent utiliser ce champ pour fournir
options supplémentaires, qui seront insérées juste après le nom de la commande et
avant tout autre argument fourni par l'utilisateur. D'autres devraient laisser cela tranquille.

Spécial Command Types
Il existe actuellement deux types de commandes spéciales.

Le plus simple est le fin taper. Ceci est utilisé pour spécifier les commandes qui peuvent mettre fin au serveur
En traitement. Par défaut, le traitement continue jusqu'à ce que la fin du fichier soit atteinte ou qu'un
le délimiteur de signature '--' est trouvé. Par exemple, vous pouvez définir la commande quitter
et donnez-lui le fin taper. Dès que le serveur atteint cette commande, il abandonne
traitement et supprime le reste du message.

Le manuel de formation vous aider le type est généralement attaché à un vous aider commande et imprime l'aide sur une base de commande,
aide pour chaque commande stockée sous le répertoire d'aide variable (définie dans votre
~/.mailagent) dans un fichier portant le même nom que la commande elle-même. Par exemple, en supposant
une commande tirer, son fichier d'aide serait attendu dans aide à la réalisation/tournage. Si aucun fichier n'est trouvé
là, mailagent recherche dans sa bibliothèque publique (/usr/share/mailagent) un fichier d'aide.
L'aide est fournie uniquement lorsque le fichier d'aide existe et n'est pas de taille nulle.

La création le Traitement Puissance
Pour démarrer le serveur, vous devez créer le pouvoir racine. Tous les autres pouvoirs
peuvent ensuite être créés à l'aide de l'interface serveur, qui assure la cohérence et enregistre vos
Actions. Si vous ne prévoyez pas du tout d'utiliser des pouvoirs, vous pouvez ignorer cette section.

Tout d'abord, vous devez choisir un bon mot de passe pour le racine Puissance. Quelqu'un avec le racine power
peut faire pratiquement n'importe quoi avec le serveur, alors soyez prudent. Supposons que vous choisissiez racine-
pass comme mot de passe.

Modifier passwd (défini dans votre ~/.mailagent) et ajoutez la ligne suivante :

racine: :

c'est-à-dire entrer le mot de passe en clair entre '<' et '>'. Il ne restera pas longtemps sous cette forme,
mais c'est le moyen le plus simple de le démarrer. Protégez le passwd fichier étroitement (lecture-écriture
autorisations uniquement pour vous). Créez ensuite un powerdir/racine fichier, protégez-le de la même manière et
ajoutez-y votre adresse e-mail, sur une ligne à part. Cette doit être l'adresse qui sera
se présenter dans le À partir de ligne de vos mails. Étant donné que les fichiers d'autorisation prennent en charge le style shell
modèles, vous pouvez utiliser login@*domaine.top pour autoriser les e-mails de votre connexion à partir de n'importe quelle machine dans
ton domaine.

Tu as presque fini. Maintenant, lancez simplement la commande suivante :

agent de messagerie -i -e 'SERVEUR -t'

et alimentez son entrée standard avec :

Dès votre e-mail propos
À partir de votre e-mail propos

power root passe-racine
mot de passe root root-pass
^D

Notez que le premier Dès ligne est obligatoire ici, puisqu'il s'agit de l'enveloppe sur laquelle
l'authentification est basée. Puisque nous alimentons l'agent de messagerie avec un message artisanal, nous
doit fournir une enveloppe valide sinon le serveur ne passera pas en mode de confiance...

L'effet secondaire de la ré-instanciation de votre mot de passe sera de le crypter dans le passwd fichier,
afin que quiconque regarde ce fichier ne puisse pas deviner votre racine mot de passe, je l'espère.

Une fois que vous avez un valide racine l'alimentation installée, vous pouvez créer le Système pouvoir en utilisant
nouveau pouvoir. D'autres pouvoirs peuvent alors être créés et supprimés à l'aide du Système puissance uniquement.

Vous devez également créer le Sécurité power et donnez-lui un mot de passe différent de celui racine
le mot de passe. Ceci n'est vraiment nécessaire que si vous souhaitez administrer le serveur à distance. Si
vous avez un accès local et les choses sont corrompues, il est toujours possible de changer la racine
mot de passe manuellement en répétant cette séquence d'amorçage.

Notez que les vérifications d'apurement sont effectuées à l'aide de l'adresse de l'enveloppe du message, qui est un
un peu plus difficile à falsifier que les champs d'en-tête simples comme Expéditeur:. L'enveloppe est extraite
en regardant la première ligne d'en-tête, qui sur les systèmes Unix ressemble à :

Dès adresse-enveloppe envoyer la date

et est inséré par l'agent de transport de courrier (MTA). Si vous utilisez sendmail en tant que MTA,
alors seulement confiance utilisateurs déclarés dans le envoyermail.cf fichier sont capables de créer un "faux"
l'adresse de l'enveloppe, une fonctionnalité généralement utilisée par les répartiteurs de listes de diffusion, puisque cette adresse
est ensuite utilisé comme cible de rebond au cas où le courrier ne pourrait pas être livré. Si ce premier
ligne d'en-tête est absente, l'expéditeur est calculé à l'aide de la Expéditeur: champ s'il est présent, alors le
À partir de terrain, mais le auth la variable est définie sur false et le serveur ne basculera pas dans
mode sécurisé ; en d'autres termes, il ne sera pas possible d'obtenir des pouvoirs lors de cette session.

De plus, étant donné que la transcription de la session est envoyée à la même adresse d'enveloppe utilisée pour
authentifier l'éligibilité à un pouvoir, la fonction serveur peut difficilement être utilisée pour
récupérer des informations confidentielles détenues sur le site où agent de messagerie est exécuté depuis le
les informations seraient envoyées à l'un des utilisateurs autorisés pour ce pouvoir. C'est le
responsabilité de vous, l'utilisateur, pour vous assurer que cela ne peut pas arriver ou vous pourriez entrer dans
ennuis juridiques.

Enfin, les commandes sensibles doivent être protégées par une alimentation adéquate, et un grand soin doit être
être pris par écrit la mise en œuvre de la commande pour s'assurer que la sécurité ne peut pas être
contourné. Mais non, cette fonctionnalité d'agent de messagerie n'est pas considérée comme dangereuse pour le
système ou site sur lequel il est utilisé, puisqu'un utilisateur déterminé pourrait en implémenter un de manière triviale via un
script shell de cinq lignes. Si la sécurité est vraiment un problème, .vers l'avant fichiers utilisant la tuyauterie
fonctionnalité doit être interdite et l'accès à cron interdit afin d'éviter le courrier automatique
traitement (puisqu'il serait possible que cron invoque un agent de messagerie processus - ou tout autre
autre programme d'ailleurs - pour traiter le courrier entrant d'une manière comparable).

Exemple
Voici un exemple montrant les étapes impliquées dans la création d'un coquille commande, ce qui permettrait
prenez un script en collectant des lignes jusqu'à une marque EOF et alimentez-le dans un vrai shell pour
exécution. Étant donné qu'autoriser cette fonctionnalité sans aucune garantie serait une véritable sécurité
trou, nous le protégeons en demandant le pouvoir coquille avant d'autoriser l'exécution.

Voici ma mise en œuvre du coquille commande (disponible dans la distribution mailagent
sous divers/coque):

#!/ Bin / sh

# Exécute les commandes depuis stdin, telles qu'elles sont transmises par le serveur mailagent.
# Le descripteur de fichier #3 est un canal vers la transcription de la session.

# Assurez-vous que nous avons la puissance du shell.
# N'autorisez même pas le pouvoir root à contourner cela pour des raisons de sécurité.
cas ":$pouvoirs :" dans
*:coquille:*) ;;
*)
echo "Autorisation refusée." >&3
sortie 1
;;
Esac

# Peut-être qu'un shell a été défini... Sinon, utilisez / Bin / sh
cas "$shell" dans
'') shell='/ Bin / sh';;
Esac

# Normalement, une commande shell a sa sortie incluse dans la transcription uniquement dans
# cas d'erreur ou lorsque l'utilisateur demande la trace. Ici cependant, nous devons
# voir ce qui s'est passé, donc tout est redirigé vers la transcription de la session.

exec $shell -x >&3 2>&3

Notez comment nous rendons accès au $pouvoirs et $coquille variables d'environnement. Ce dernier est
défini par l'utilisateur pour permettre la configuration dynamique d'un shell.

En supposant que nous stockons cette commande sous répserv/shell.sh (n'oubliez pas d'ajouter l'exécution
peu sur le fichier...), voici comment on le déclare et sa variable dans le serveur de commande fichier.

coquille coquille - y -
variable de shell - - -

Cet exemple montre qu'il existe un espace de noms séparé pour les variables et les commandes.
De plus, la commande porte le même nom que son type -- ne vous y trompez pas :-).

Maintenant, en supposant que vous avez déjà créé un Système alimentez-le et protégez-le avec un mot de passe
(assumons passe système pour les besoins de cet exemple), vous devez créer le shell
Puissance. Bien que vous puissiez le faire manuellement (comme lorsque vous avez fabriqué à la main le racine puissance), c'est
mieux vaut utiliser l'interface SERVER car elle assure la cohérence.

Afin de créer le coquille puissance nécessaire pour utiliser le nouveau coquille commande, vous
devez ajouter la règle suivante à votre fichier de règles :

Objet : Serveur { SAUVEGARDER le serveur ; SERVEUR -t } ;

qui enregistrera tous les messages du serveur dans un dossier dédié et les traitera. Noter la -t
option, qui permet le mode de confiance, dans lequel des pouvoirs peuvent être obtenus. Maintenant, envoyez-vous le
courrier suivant :

Sujet : Serveur
système d'alimentation sys-pass
nouveau power shell shell-pass
[email protected]
EOF

qui demande la Système pouvoir (nécessaire pour créer la plupart des pouvoirs), puis crée un
nouveau pouvoir coquille, attribuant passage d'obus comme mot de passe et effacement [email protected] pour elle.
Notez le remplissage du document ici pour la commande newpower, jusqu'au marqueur EOF. Bien sûr,
vous devez remplacer l'adresse par votre adresse réelle.

Vous recevrez une transcription de la session selon ces lignes :

---- Transcription de la session de l'agent de messagerie pour [email protected] ----

----> système d'alimentation ********
D'ACCORD.

====> nouveau shell d'alimentation ********
D'ACCORD.

====> --
Fin de traitement (.signature)

---- Fin de la transcription de la session de l'agent de messagerie ----

Notez les mots de passe cachés et le changement d'invite une fois que l'alimentation du système a été
accordé. Étant donné que mon expéditeur appose automatiquement une signature, le traitement s'arrête dessus.

Utilisons maintenant cette nouvelle commande... Envoyez-vous le mail suivant :

Sujet : Serveur
définir le shell /bin/ksh
définir eof FIN
coquille
ls -l / Etc / passwd
FIN
shell de puissance shell-pass
coquille
ls -l / Etc / passwd
FIN

Si tout va bien, vous devriez recevoir en retour une transcription ressemblant à ceci :

---- Transcription de la session de l'agent de messagerie pour [email protected] ----

----> définir le shell /bin/ksh
D'ACCORD.

----> définir eof FIN
D'ACCORD.

----> coque
Permission refusée.
La commande a renvoyé un état différent de zéro (1).
MANQUÉ.

----> coque de puissance ********
D'ACCORD.

====> coque
+ ls -l / Etc / passwd
-rw-r--r-- 1 système racine 691 Oct 01 14:24 / Etc / passwd
D'ACCORD.

====> --
Fin de traitement (.signature)

---- Fin de la transcription de la session de l'agent de messagerie ----

La première invocation du coquille la commande échoue car nous n'avons pas le coquille Puissance. La chaîne
"Permission refusée." est repris par la commande elle-même dans le descripteur de fichier #3 et le rend
à la transcription.

Conclusion
Le serveur de messagerie générique implémenté dans mailagent peut être utilisé pour implémenter une liste de diffusion
gestionnaire, un serveur de vote, un serveur d'archives, etc... Malheureusement, cela ne fonctionne pas actuellement
avoir la notion d'état, avec un jeu de commandes dédié à chaque état, donc ce n'est pas
possible de mettre en place un serveur d'archives intelligent.

Si vous implémentez de nouvelles commandes serveur simples et pensez qu'elles sont suffisamment génériques pour être
contribué, merci de me les envoyer et je les intégrerai avec plaisir.

EXEMPLES


Voici quelques exemples de fichiers de règles. Tout d'abord, si vous ne spécifiez pas de fichier de règles ou s'il est
vide, la règle intégrée suivante s'applique :

Tous : /^Objet : [Cc]commande/ { LEAVE ; TRAITER };

Chaque courrier est laissé dans la boîte aux lettres. De plus, envoyez un courrier avec "Objet : Commande" n'importe où dans le
message sont traités.

Le fichier de règles suivant est celui que j'utilise actuellement :

rép_mail = ~/courrier;

Tous : /^Objet : [Cc]commande/ { SAVE cmds ; TRAITER };

À : /^[email protected]/ { POST -l mail.gue } ;
Apparemment-À : bélier,
Groupes de discussion : mail.gue { BOUNCE [email protected] };

<_VU_>
Apparemment-À : bélier,
Groupes de discussion : mail.gue { SUPPRIMER } ;

De : racine, À : racine { COMMENCER RACINE ; REJETER } ;
/^Sortie d'exécution quotidienne/ { ÉCRIRE ~/var/log/york/daily.%RÉ };
/^Sortie d'exécution hebdomadaire/ { ÉCRIRE ~/var/log/york/hebdomadaire };
/^Sortie d'exécution mensuelle/ { ÉCRIRE ~/var/log/york/mensuel };

De : ram { COMMENCER RAM ; REJETER } ;
À : bélier { QUITTER } ;
X-Mailer : /mailagent/ { QUITTER } ;
{ EFFACER };

Le répertoire du dossier est défini sur ~/courrier. Tous les e-mails de commande sont enregistrés dans le dossier
~/mail/cmds et traité. Ils n'apparaissent pas dans ma boîte aux lettres. Courriers adressés au gue
liste de diffusion (Groupe des Utilisateurs d'Eiffel français, à savoir Groupe des Utilisateurs Eiffel) sont
publié sur le groupe de discussion local mail.gue et n'apparaissent pas non plus dans ma boîte aux lettres. Tout suivi-
up fait sur ce groupe m'est envoyé par nouvelles (et non directement à la liste de diffusion,
parce que ces e-mails me revenaient à nouveau et étaient transmis au groupe de discussion, qui à son tour
les ferait renvoyer par la poste à la liste, et ainsi de suite). D'où la règle suivante
qui attrape ces suivis et les renvoie à la liste de diffusion. Ces courriers seront
en effet revenir, mais la règle _VU_ les supprimera simplement.

Sur ma machine, les mails pour racine me sont transmises. Pourtant, chaque jour, le cron démon
lance certains processus pour effectuer un nettoyage administratif (rotation des fichiers journaux, etc.), et
renvoie les résultats par mail. Ils sont redirigés dans des dossiers spécifiques avec la commande WRITE,
pour s'assurer qu'ils ne grandissent pas sans limite. Notez la substitution de macro pour le quotidien
sortie (le lundi, la sortie est stockée dans quotidien.1 par exemple).

Le groupe de règles suivant empêche le système de messagerie de renvoyer des e-mails lorsque je suis dans un
extension d'alias de groupe. C'est un sendmail option que j'ai désactivée sur ma machine. Le soin est
pris cependant pour garder les mails provenant de l'agent de messagerie que je reçois en tant que carbone aveugle
copie.

MISE EN GARDE


Afin de limiter la surcharge de charge sur le système, seuls UN le processus mailagent est autorisé
pour exécuter les commandes. Si de nouveaux messages arrivent alors qu'un autre agent de messagerie est en cours d'exécution, cela
le courrier est mis en file d'attente et sera traité plus tard par le principal agent postal.

Pour la même raison, les messages renvoyés par mailagent sont mis en file d'attente par sendmail, pour éviter les
coût du transfert de courrier lors du traitement des commandes.

SÛRETÉ


Tout d'abord, permettez-moi de discuter de ce Sécurité signifie ici. Cela fait pas signifie la sécurité du système contre
attaques d'intrus. Si votre système le permet .vers l'avant crochets et/ou cron tâches à définir par
utilisateurs réguliers, votre système n'est pas sécurisé du tout. Point final. Donc on ne s'embête pas avec
sécurité au niveau du système, mais plutôt au niveau de votre propre compte où toutes sortes de
des données précieuses sont conservées.

Pour éviter toute intrusion pernicieuse via des chevaux de Troie, le C une fonction filtre refusera de courir si
le fichier de configuration ~/.mailagent ou le fichier de règles spécifié est inscriptible ou non
propriété de l'utilisateur. Ces tests sont appliqués même si le une fonction filtre ne tourne pas setuid,
car ils compromettent la sécurité de votre compte. le agent de messagerie effectuera également
certaines de ces vérifications, au cas où elles ne seraient pas appelées via le C une fonction filtre.

En effet, si quelqu'un peut écrire dans votre ~/.mailagent fichier, alors il peut facilement changer votre
paramètre de configuration pour pointer vers un autre fichier de règles falsifié, puis vous envoyer un
mail, qui déclenchera mailagent, s'exécutant sous votre nom. Via la commande RUN, ce potentiel
l'intrus pourrait exécuter n'importe quelle commande, en utilisant vos privilèges, et pourrait définir un cheval de Troie pour
lecture ultérieure. En appliquant la même logique, le fichier de règles doit également être protégé étroitement.

Et, sans surprise, les mêmes règles s'appliquent pour votre nouveaucmd fichier, qui est utilisé pour décrire
commandes de filtrage étendues. Sinon, cela permettrait à quelqu'un de redéfinir tranquillement un
commande standard couramment utilisée comme LEAVE et plus tard être en mesure d'assumer votre identité.

Les versions après 3.0 PL44 sont livrées avec un C amélioré (d'un point de vue de la sécurité) une fonction filtre
qui non seulement effectuera les vérifications susmentionnées, mais veillera également à ce que perl
exécutable et le agent de messagerie script qu'il est sur le point d'exécuter ne sont pas protégés de manière lâche (lorsque
exécutable est activé ou lors de l'exécution avec des privilèges de superutilisateur). De plus, si le une fonction filtre is
mis en place dans votre .vers l'avant comme décrit dans cette page de manuel, il pourra vérifier lui-même
sécurité et vous avertira vivement s'il peut être altéré, ce qui pourrait vaincre tous
contrôles de sécurité.

Mailagent a également été étendu afin que tous les programmes exécutés via RUN et amis, ainsi que
mail hooks, sont vérifiés pour des défauts de protection évidents avant d'être réellement exécutés Interprété
scripts (commençant par le jeton magique #!) et les scripts perl suivant le mot magique "exec perl
si l'incantation $under_shell" est spécialement vérifiée pour plus de sécurité
interprète. Ces contrôles sont effectués systématiquement (lorsque exécutable est activé ou lorsque
s'exécutant avec des privilèges de superutilisateur) même si le sécurisée paramètre n'a pas été réglé sur ON. Aussi,
tous les fichiers sur le point d'être exécutable()ed sont vérifiés à l'aide de la même méthode de vérification étendue utilisée lorsque
sécurisée est activé (les tests de propriété sont toutefois ignorés lors de la vérification exécutable()-ness d'un
fichier).

Utiliser mailagent en ligne en utilisant les services onworks.net


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

Commandes Linux

Ad




×
Publicité
❤ ️Achetez, réservez ou achetez ici — gratuitement, contribue à maintenir la gratuité des services.