Le principe de réécritures d'adresses

Une règle de réécritures commence par la lettre R. Cette réécriture est composée de 3 partie en règle général (au moins deux). La partie de gauche correspond à l'adresse testée pour réécriture etest appelée lhs (Left Hand Side). Si cette adresse testée coincide avec l'adresse présente dans le workspace (cf çi-dessous), alors cette adresse est réécrite selon la partie de droite: la rhs (Right Hand Side). Dans le cas ou l'adresse ne coincide pas, il n'y a pas de réécriture et l'adresse email passe au test de réécriture suivant.

Adresse testée  Réécriture si coincide avec adresse testée       
      -^             -^ 
    Rlhs           rhs             commentaire
            -^              -^     
       tabulation     tabulation

Le principe décrit içi s'applique à toutes les règles de réécritures.

Le découpage des adresses

Sendmail découpe les adresses en plusieurs marques distinctes:

une adresse arnaud;fileux@domaine.com      devient    arnaud;fileux    @     domaine  .  com

@ et . sont considérés caractères séparateurs mais pas ;

C'est l'option OperatorsChars qui definit les caractères séparateurs:

O OperatorChars=.:%@!^/[]+

L'espace de travail (workspace)

Avant de procéder à la réécriture, l'adresse est placée dans une zone mémoire appelée l'espace de travail où elle subit le découpage décrit çi-dessus.

Pour savoir si Sendmail doit procéder à une réécriture lorsqu'une adresse se présente, le LHS est comparé à l'adresse reçue. Imaginons que Sendmail recoive l'adresse arnaud.fileux@domaine.com et qu'une règle comporte:

Rarnaud.fileux@domaine.com            arno@ailleurs.com             test de réécriture

L'adresse reçue ( arnaud.fileux@domaine.com) est comparée à la LHS. Il y a correspondance avec la LHS et l'adresse est alors réécrite selon la RHS de la règle ( arno@ailleurs.com ).

Exemple avec une règle contenant des macros ($+). Les macros sont définies dans la section LHS:



#####Regle 55 de test
S55
R$+  @  $+    		$: $1  
R$+  @  $+    		$: $2 

  
> 55 arnaud.fileux@decaservices.com
55
input: arnaud . fileux @ decaservices . com (on passe l'adresse e-mail arnaud.fileux@decaservices.com en test)
-----trying rule: $+ @ $+ (la LHS essaie de trouver une coincidence avec la l'adresse envoyée).
-----rule matches: $: $1 (l'adresse coincide, il y a réécriture. La partie droite RHS indique comment l'adresse est réécrite)
rewritten as: arnaud . fileux (l'adresse est réécrite
-----trying rule: $+ @ $+ ('adresse réécrite est envoyée au test suivant)
----- rule fails 55 (l'adresse ne coincide pas: l'adresse envoyée: arnaud.fileux ne correspond pas avec qqchose @ qqchose)
returns: arnaud . fileux (l'adresse retournée au final est donc arnaud.fileux).
>