Routage d'emails
le sytème de courrier étant fondé sur un serveur pop, et la réorganisation des bureaux amenant à modifier l'intitulé des adresses courrier électronique, j'ai écrit ce petit script permettant de rediriger le courrier des anciennes boîtes vers les nouvelles en prévenant les émetteurs des changements. Ce script a tourné au départ sur une machine linux, mais le disque a crasché et je l'ai donc relancé sur un poste windows sans modifications... pendant plusieurs semaines, le temps que tout le monde soit prévenu des changements de comptes. Cela a permis de ne pas oublier personne et nous a évité les éternels problèmes de non réception du courrier et de diffusion des adresses en oubliant quelqu'un...
Les fichiers
Il y a deux fichiers : robomél.ini conteant les adresses à rerouter, lancé via le programme principal robomél.r. (En fait, le fichier ne porte l'extention ini que pour le fun, vu que c'est aussi un script rebol). Ce fichier existe pour permettre de modifier la config entre deux émissions de courrier (il faut néanmoins viser juste). Ce n'est pas la meilleure solution, il faudrait développer une interface de modification, et de contrôle des données, avec un test de mise-à-jour pour éviter les plantages, mais bon... Il m'a suffit de relancer le script dans ces rares cas.
Le principe est donc :
Les problèmes
Foreach [mél_origin mél_passwd mél_dest vider_mél] courriers [ print ["** Compte :" mél_origin "**"] ;Ouvrir une boîte boitamel: open to-url join "pop://" [mél_origin ":" mél_passwd "@pop3.domaine.fr"]
Pour que ça fonctionne chez-vous :
Vous devez également remplacer toutes les entrées domaine.fr par votre domaine.
Le fichier de paramêtrage
REBOL [
Title: "initialisation du courrier"
Date: 28-Jun-2000/14:17:30+2:00
Author: "Alfred Bigan"
File: %robomél.ini
Email: alfred_bigan@yahoo.fr
Purpose: {
Pour rerouter du courrier entre boîtes.
}]
;modifier le tableau des données selon le format :
;compte_origine passwd_origine [mél_destination(s)] vider_messages
;exemple : toto titi tata@ac-lille.fr true
;le nom du compte pop3 est toto, le mote de passe titi
;on renvoie le courrier à tata@ac-lille.fr et on supprime le message
;si vider_messages est positionné à true.
courriers:
[
"compte1" "password1" [email.num1@domaine.fr] true
"compte2" "password2" [email.num2@domaine.fr] true
"compte3" "password3" [email.num3@domaine.fr] true
"compte4" "password4" [email.num4@domaine.fr] true
]
;ici on peut remettre en clair les sources et destinations
;compte1 : toto --> rerouté vers totobis
;initialiser le délai d'attente entre deux itérations
Durée_cycle: 00:30 ;30 minutes
Le code
REBOL [
Title: "Routage Email"
Date: 27-Jun-2000/14:17:30+2:00
Author: "Alfred bigan"
File: %robomél.r
Email: alfred_bigan@yahoo.fr
Purpose: {
Pour rerouter du courrier entre boîtes.
}]
;dans ce programme, pour votre utilisation, vous devez changer toutes les valeurs de domaine
;par votre nom de domaine.
;smtp par le nom de votre serveur de courrier sortant
;pop3 par le nom de votre serveur pop3
;proxy par votre proxy si vous en avez un sinon, supprimez le (ainsi que le bypass)
;Initialiser les variables mail
set-net [
monemail@domaine.fr
smtp.domaine.fr
pop3.domaine.fr
proxy.domaine.fr
8080
]
;Bypasser le proxy par défaut pour l'intranet
system/schemes/default/proxy/bypass: ["*.domaine.fr"]
Trace/net off ;Mode debug réseau arrêté
;Avant de lancer le programme, il faut initialiser le tableau des données
;et le délai en éditant "robomél.ini" selon le format:
;mél_origine passwd_origine mél_destination(s) vider_messages
;courriers:[
; "compte_origine" "motpasse" [adresse_dest@domaine.fr] true
; "compte_destination" "motpasse2" [adr_dest1@domaine.fr adr_dest2@domaine.fr] true
; ]
;durée_cycle: 3:00 ; 3 heures
;Déclaration de fonction pour décoder l'iso @!*$?!
;print de-iso "Message =?iso-8859-1?Q?=E0=20caract=E8re?= informatif"
;par exemple
de-iso: func [txt] [
if txt <> none [ ;si le sujet n'est pas vide (sinon ça plante parfois !)
if find txt "=?iso-8859-1?Q?" [ ;si c'est bien codé en iso
replace/all txt "=?iso-8859-1?Q?" "" ;on enlève la séquence d'amoçage iso
replace/all txt "_" " " ;on enlève tous les "_"
replace/all txt "=" "%" ;on remplace les = par des %
txt: dehex txt ;et on peut ainsi décoder l'hexa: dehex "%E0" donne "à"
replace/all txt "?%" "" ;enlever la dernière séquence
]
]
return txt ;that's all folks!
]
Forever [
;Initialiser le tableau des données et le délai entre les cycles
do %robomél.ini
;ce qui permet d'éditer les données entre deux cycles!
Foreach [mél_origin mél_passwd mél_dest vider_mél] courriers [
print ["** Compte :" mél_origin "**"]
;Ouvrir une boîte
boitamel: open to-url join "pop://" [mél_origin ":" mél_passwd "@pop3.domaine.fr"]
while [not tail? boitamel] [
message: first boitamel ;lire le premier message
entete: import-email message ;Ouvrir l'en-tête
print ["Message " length? boitamel "par :" entete/from] ;voir adresse émetteur et n°
sujet: de-iso entete/subject ;décoder le sujet
if entete/subject <>"L'adresse a changé" [ ;pas routage si déjà fait
foreach dest mél_dest [
prin ["" dest "" sujet newline " de :" now/time]
resend dest entete/from message ;routé gardant la source
Print [" à" now/time]
]
]
if vider_mél [remove boitamel] ;vider le message si autorisé
;créer l'en-tête pour le message d'avertissement
header: make system/standard/email [
To: entete/from
From: mél_origin
Subject: "L'adresse à changé"
]
Texte: rejoin [
{L'adresse de votre correspondant a changé,} newline
{votre courrier : } sujet newline
{daté du : } entete/date newline
{a été redirigé vers sa nouvelle adresse,} newline
{veuillez en prendre note : } mél_dest
]
if entete/subject <>"L'adresse a changé" [ ;pas routage si déjà fait
send/header entete/from Texte header
]
boitamel: next boitamel ;passer au message suivant
]
close boitamel
print ["* Fin des messages pour" mél_origin "*"]
]
Print [" **** Fin du cycle à" now "Nouveau cycle dans" durée_cycle "h:m ****"]
wait durée_cycle ;Attendre x heures:minutes et recommencer
]
Bon courage pour ceux qui s'y collent, Alfred Bigan