Cette page d'information est certainement la moins abordable de
ce site web. Il est nécessaire d'avoir une connaissance du format des
messages transmis par courrier électronique (notamment l'encodage
MIME)
pour en suivre tous les détails.
Généralités
A l'origine, les protocoles Internet ont été développés pour les
états unis d'amérique, avant d'être utilisés dans d'autres pays.
Cette internationalisation a nécessité de prendre en compte des
alphabets plus riches que l'alphabet américain.
De plus, après les textes basiques, les protocoles de courrier
électronique ont intégré la possibilité d'envoyer des textes
avec mise en page et des fichiers de toute nature.
Malheureusement, pour chaque problème rencontré, plusieurs
solutions techniques distinctes ont été adoptées sans que, la
plupart du temps, une telle diversité présente un intérêt
pratique.
Par ailleurs, la complexité des normes fait qu'elles ne sont pas
respectées à la lettre par les mailers, que ce soit pour des
difficultés de mise en oeuvre, ou pour cause d'implémentation
très approximative.
Dans la pratique, la plupart des mailers utilisent un sous
ensemble limité des formats de messages possibles.
Deux choix sont donc possibles :
soit essayer de traiter du mieux possible tous les messages
au risque de réaliser une application très complexe,
soit se limiter aux cas les plus courants (qui peuvent
quand même englober 99 % des messages).
C'est la deuxième approche qui a été adoptée pour Libremail.
Toutefois, version après version, Libremail traite de plus en
plus de cas particuliers, sans pour autant être devenu beaucoup
plus complexe qu'à l'origine.
Traitement des mails reçus en fonction de leur structure
Si le mail reçu se limite à une zone de texte de type text/plain,
Libremail affiche ce texte.
Dans le cas de messages multipart/alternative (d'abord du texte
puis l'équivalent en HTML), Libremail affiche par défaut la section
texte du mail.
Si le mail est en HTML pur (text/html), Libremail affiche par
défaut le message avec les balises HTML.
L'outil suphtm est capable de détecter et de supprimer avant
téléchargement ces messages en HTML pur.
Si un mail est de type multipart/report, Libremail affiche les
différentes zones de texte qu'il contient les unes à la suite des
autres.
Il n'y a pas de recherche de fichiers joints dans les mails de type
multipart/report.
Dans le cas d'un mail de type multipart/mixed, Libremail affiche
le texte contenu dans la première section. Selon le cas, ce sera :
le texte contenu dans une section de type text/plain,
la sous section text/plain d'une section multipart/alternative,
le texte non converti de la section text/html s'il n'y a pas de
section text/plain.
Après cet affichage, Libremail rajoute la liste des fichiers joints
qui pourront être récupérés.
Si le mail contient des sections message/rfc822, ces dernières sont
traités comme des mails, et leur texte sera rajouté à celui du mail
principal.
Par contre, si un mail de type multipart/mixed comporte plusieurs
zones de texte successives, seule la première sera affichée.
Dans un mail multi section, On peut choisir d'afficher la section
text/html à la place de la section text/plain.
Lors de l'affichage d'une section text/html, il est possible de
n'afficher que le texte significatif.
Les sections multipart/related figurant à l'intérieur d'autres sections
multipart sont prises en compte pour le traitement des bordures de
sections, sans toutefois que leur présence n'entraîne de changements
dans l'analyse du mail.
Structure des messages envoyés
Pour l'envoi de mails, Libremail se limite à deux structures de
message seulement :
mail constitué seulement d'une section texte de type text/plain,
mail de type multipart/mixed composés d'une section text/plain
suivi d'un ou plusieurs fichiers joints.
Encodage des caractères
Comme précisé plus haut, les protocoles Internet ont d'abord été créés
par des américains avant de s'internationaliser. Or, les américains
possèdent 2 caractéristiques qui les distinguent de la plupart des
peuples de la planète :
ils possèdent un stock démesuré d'armes de destruction massive,
leur langue ne comporte pas d'accents.
Pour le courrier électronique, c'est le 2ème point qui est le plus
important, notamment parce qu'à l'origine, les protocoles Internet
ont été prévus pour une transmission des caractères sur 7 bits.
Dans ces conditions les caractères ayant le 8ème bit significatif
(c'est à dire à 1) devaient être encodés.
Du reste, même aujourd'hui où la transmission des caractères sur 8 bits
s'est généralisée, la norme de transmission prévoit que les caractères
de l'entête des messages ayant le 8ème bit significatif positionné seront
toujours encodés.
Deux formats d'encodage existent : le format "quoted printable" et le
format base64.
Pour l'affichage des champs de l'entête des messages, libremail
supporte l'encodage quoted printable et l'encodage base64 (beaucoup
plus rare et sans intérêt pratique avec un alphabet européen, sinon
peut être celui d'empêcher un affichage lisible par des mailers anciens
et de compliquer le filtrage des mails directement par le serveur de
messagerie à partir du champ Subject:).
Pour l'affichage du contenu messages reçus, Libremail accepte les
textes transmis directement sur 7 ou 8 bits (sans encodage visible à
la réception), les messages encodés au format quoted printable et
Les messages encodés base64 qui deviennent de plus en plus nombreux
même si l'emploi de cet encodage est totalement injustifié avec un
alphabet européen.
Pour la récupération des fichiers joints, les encodages quoted
printable et base64 sont tous deux convertis depuis le début, (ce qui
est la moindre des choses).
Pour l'envoi de mails, Libremail réalise automatiquement un encodage
quoted printable des champs de l'entête qui contiennent des caractères
spéciaux, alors que le corps des messages est transmit sous 8-bits
et donc, sans encodage.
Pour envoyer des fichiers joints, en fonction du contenu de ces
fichiers, Libremail choisit entre l'encodage quoted printable et
l'encodage base64, celui qui est le moins encombrant.
Jeux de caractères reconnus
A l'origine, Libremail a été conçu pour travailler avec le jeu de
caractères par défaut ISO-8859-15 ou ISO-8859-1 lorsque le symbole
€ (euro) n'est pas nécessaire.
Il peut donc afficher sans conversion les mails issus d'un PC
fonctionnant aussi bien sous Windows (jusqu'à la version 98), que sous
certaines distributions de GNU/Linux et d'autres UNIX.
Un sous ensemble des caractères (non affichables en l'état) compris
dans l'intervalle 80h à 9Fh (utilisé notamment sur Mac) est converti
dans son équivalent dans le jeu ISO-8859-15.
Libremail analyse la variable d'environnement $LANG pour détecter
le jeu de caractères (ISO-8859-n ou UTF-8) utilisé par le système
d'exploitation.
Les mails rédigés avec le même jeu de caractères que celui du système
d'exploitation sont affichés sans conversion, les autres sont convertis
de ISO-8859-1 à UTF-8 ou de UTF-8 à ISO-8859-15 pour permettre un bon
affichage des caractères accentués.
De même, la saisie des mails peut se faire aussi bien avec le jeu de
caractères ISO-8859-15 que le jeu de caractères UTF-8 .
L'encodage UTF-7 n'est pas traité par Libremail.
Heure et fuseau horaire
Pour l'affichage des dates et heures d'expédition des messages, la
commande vmailsj corrige les écarts (en heures entières) entre
le fuseau horaire de l'expéditeur et celui du destinataire et en tient
compte pour faire un tri chronologique des mails utilisant des fuseaux
horaires différents.
Le outils servant à visualiser le contenu des mails continuent d'afficher
tels qu'ils sont dans les mails dates et heures d'expédition et le
fuseau horaire de l'expéditeur.
Saisie des caractères en mode page
Ce point concerne une particularité de l'interface utilisateur qui a
du évoluer pour s'adapter aux évolutions de GNU/Linux.
Certains outils de Libremail permettent d'utiliser les flèches du
clavier et d'autres touches pour se déplacer dans :
une liste de répertoires,
une liste de mails,
le contenu d'un mail,
le carnet d'adresses.
Ces différentes touches sont vues par le système d'exploitation
comme une séquence de caractères qui commence par le caractère
Esc suivi d'un [
De plus, la touche Esc employée seule a été choisie pour
quitter selon le cas l'outil vmaildir,
vmailsj, vmailfic ou la sélection
de destinataires.
Pour pouvoir lire ces caractères au moment où ils sont tapés, la
console sur laquelle on travaille était configurée depuis la création
de Libremail par la commande suivante :
stty -icanon min 0 time 5 -echo
Cette commande comporte notamment un délai de lecture d'une demi
seconde et la possibilité de ne récupérer aucun caractère pour
différencier la réception d'un caractère Esc isolé du début
d'une séquence de caractères commençant par Esc.
A l'origine de Libremail, ce système fonctionnait parfaitement et
il semble fonctionner encore sur des versions de GNU/Linux récentes
démarrant avec init (vérifié avec la Devuan 2.0 basée sur la Debian
8).
Par contre, avec une Debian 10 qui démarre avec systemd, les caractères
saisis ne sont pas détectés ! (sauf le Control C qui permet de sortir
d'un programme).
Un essai a été fait en augmentant le délai de lecture d'un caractère.
Ça permet de détecter les caractères Esc isolés, mais d'autres caractères
ne le sont pas et les programmes manquent de stabilité.
La seule solution fiable avec systemd est de supprimer le délai de
lecture en exécutant la commande suivante :
stty -icanon -echo
.
Dans ce cas, les caractères saisis seront toujours pris en compte, mais
pour distinguer un caractère Esc isolé d'une séquence commençant
par Esc, il faudra taper un caractère de plus.
Bizarrement, avec la Debian 6, qu'on programme un délai de lecture ou
non, il y en a un implicitement. Donc, plusieurs cas selon peut être
l'ancienneté du noyau Linux :
Distribution très ancienne (noyau 2.2 ou antérieur) : il
faut programmer un délai de lecture pour détecter les touches
Esc isolées.
Distribution ancienne (noyau 2.6) : la programmation d'un
délai de lecture est facultative. Une touche Esc isolée
est détectée correctement.
Distribution récente (noyau version 4) démarrée avec init :
En programmant un délai de lecture, une touche Esc isolée
ou n'importe quelle autre touche est détectée correctement. Il
reste à vérifier si la programmation du délai de lecture est
nécessaire.
Distribution récente (noyau version 4) démarrée avec systemd :
Si on programme un délai de lecture, les touche du clavier ne
sont plus détectée ou le sont très mal. Sans délai de lecture
la détection des touches fonctionne mais la détection d'un
Esc isolé nécessite d'appuyer sur une touche de plus.
Afin de permettre à Libremail de fonctionner avec des distributions
GNU/Linux qu'elles soient anciennes ou récentes, 3 possibilités de
compilation sont proposées :
En décommentant dans le fichier modepage.h la ligne
#define systemd 0
Libremail est compilé pour fonctionner avec un délai de lecture
(démarrage par init).
En décommentant dans le fichier modepage.h la ligne
#define systemd 1
Libremail est compilé pour fonctionner sans un délai de lecture
(démarrage par systemd).
En ne changeant rien au fichier modepage.h , Libremail
est compilé pour détecter si systemd est utilisé et choisir son
mode de fonctionnement en conséquence.
D'autre part, comme la nécessité d'appuyer 2 fois sur la touche Esc
est peu pratique, une possibilité supplémentaire a été rajoutée :
Pour Quitter les commandes vmaildir,
vmailsj ou vmailfic, on peut
taper sur la touche q
Pour Valider une sélection de destinataires issue du carnet
d'adresse, on peut taper sur la touche v
Ces possibilités supplémentaires fonctionnent de la même manière quelque
soit la version de GNU/Linux et l'option de compilation.