les démons de nazgullien

Fil des billets - Fil des commentaires

jeudi 21 octobre 2010

Simulating multiple recipient delimiters ($recipient_delimiter) with postfix and mysql/postfixadmin virtual domains

As clearly exposed by Bill McGonigle :

Postfix supports the configuration item recipient_delimiter, like:

recipient_delimiter = +

so that one can do ‘plus-expansion’ style e-mail addresses, like: mike+amazon@bfccomputing.com for myriad reasons, like tracking, spam filtering, auto-sorting, etc. Unfortunately, while + has long been the standard character for this purpose, half of the websites out there have been written by noodle-heads who figure that any incoming + character in a parameter is a faux-encoded space character

Or at least do they simply reject any e-mail address containing the + character.

It would be fairly straightforward to just change the parameter in postfix, but as I'm using this scheme for few years now, I'm kind of reluctant to change all previous subscriptions and I also use DSPAM which recipient delimiter character can't be changed !

In his post Bill McGonigle explains how to use a regexp virtual alias map to rewrite any character into the + character and so simulating the acceptance by Postfix of multiple recipient delimiters. The problem with this solution is that for each virtual domain hosted there has to be a line in the said virtual alias map ; kind of boring when the virtual domains are stored in a SQL database via a Postfixadmin portal.

The solution I found lies in the following MySQL query which will replace (in this case) the _ character by a + character in the recipient part of the address

select concat(replace(left('%s', length('%s') - instr(reverse('%s'), '@')), '_', '+'), '@', reverse(substring_index(reverse('%s'), '@', 1))) "goto" from domain where domain = reverse(substring_index(reverse('%s'), '@', 1)) and active = 1 and instr(left('%s', length('%s') - instr(reverse('%s'), '@')), '_') > 0

This query might neither be very elegant nor quite optimal but it works.

In context, create a file named mysql_multi_recipient_delimiter.cf in your postfix config folder containing :

user = <mysql_user>
password = <mysql_password>
hosts = <mysql_host_or_localhost>
dbname = <mysql_database_name>
query = select concat(replace(left('%s', length('%s') - instr(reverse('%s'), '@')), '_', '+'), '@', reverse(substring_index(reverse('%s'), '@', 1))) "goto" from domain where domain = reverse(substring_index(reverse('%s'), '@', 1)) and active = 1 and instr(left('%s', length('%s') - instr(reverse('%s'), '@')), '_') > 0

And in main.cf, modify the line :

virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf

to :

virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf proxy:mysql:$config_directory/mysql_multi_recipient_delimiter.cf

Reload postfix :

postfix reload

et voilà !

vendredi 14 décembre 2007

Latin-9 c'est bien, mais pas top encore ...

Latin-9 (de son petit nom ISO-8859-15) ajoute le support (entre autres) le suport du caractère € qui manquait à Latin-1 (ISO-8859-1), et c'est bien.

Cependant Latin-9, et c'est déjà beaucoup moins bien, supprime le support (entre autres) du caractère '¨' (Tréma isolé), et - je l'ai déjà dit, mais - c'est beaucoup moins bien.

Je cite :

Avec ISO-8859-1 : - vous disposez des : ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ®¯ ° ± ² ³ ´ µ ¶·¸ ¹ º» ¼ ½ ¾. (Code décimale de 161 à 162). ...

ISO-8859-15 ou latin9 surnommé latin0 : Il pallie les insuffisances de ISO-8859-1 mais, à mon avis, d'une manière moins élégante. (Note de moi, ça c'est sur) ... Disparaissent aussi et sont remplacés par des caractères finlandais : ¦ (broken bar) ; le tréma isolé : ¨ l'accent aigu : ´ ; la cédille isolée : ¸ ; et le ¾

Et voilà comment on fait vautrer une application en ajoutant le support du sigle '€' ...

Cependant, on pourra noter les choses suivantes :

  • le parseur XML de Java traite lit et enregistre sans erreur ce caractère ('€') même dans un flux XML encodé en Latin-1 ;
  • le parseur MSXML de Microsoft lit correctement ce caractère (même si ça ne ressemble à rien) dans un flux XML encodé en Latin-1
  • le parseur MSXML de Microsoft plante lors de l'enregistrement d'un caractère '€' dans un flux XML encodé en Latin-1. La méthode save() renvoie une COleException dont le libellé est "erreur inconnue" et arrête d'écrire dans le fichier ... (ce qu'il fait d'ailleurs à priori dès qu'un caractère invalide dans l'encodage courant doit être écrit). Et ça, je trouve que c'est mal ; mais peut-être que je me trompe :-|

Vive l'UTF-8 !!! (enfin ... pour le moment)

C'était mon coup de gueule du vendredi ;)

mardi 29 août 2006

Copie d'une arborescence sans perte d'attributs avec pax et ssh ...

Comment copier les fichiers du disque-dur d'un ordinateur vers un autre, au travers d'un réseau, sans pour autant perdre les attributs des fichiers ?

Lire la suite...

jeudi 18 mai 2006

Où l'on découvre une des nombreuses activités du guique ....

Matt a trouvé un truc plutôt marrant sur le blog Digital Fashion. On peut se rendre compte en regardant les headers http que renvoie(nt) le(s) serveur(s) web de la chaîne des hôtels Accor que ces gens-là utilisent un serveur web peu répandu :

Server: Tracteur-Diesel/MF7480 Type E60TA,ISO Boost

étonnant non ? 8-)
P.S.: si vous ne savez pas comment voir les headers http d'une page, vous pouvez utiliser cette page

Lire la suite...

mercredi 1 mars 2006

/home sweet /home

Après quelques recherches, j'ai remis la main sur la partie intelligente et émergente de mon site web nazgull.ath.cx, les pertes pour la partie visible portant essentiellement sur de vieilles rubriques pas vraiment intéressantes ...

Lire la suite...

mardi 28 février 2006

A mon /home tant regretté ...

de l'utilité des sauvegardes et des scripts de sauvegarde vérifiés ...

Un script de sauvegarde qui fait des jolies sauvegardes et qui supprime les sauvegardes de plus de 15 jours, c'est bien !
Quand il est testé, c'est mieux :-(

Lire la suite...

jeudi 23 février 2006

Problèmes de dns ...

Deux fois en deux semaines mon serveur a subi une charge importante due à une innondation des logs par le service named
graphe charge systèmegraphe utilisation processeur

Lire la suite...