Par ma volonté, il y a un serveur de messagerie sous ma garde. Petit, ~ 20 utilisateurs. Cela fonctionne de manière stable, il n'est pas souhaitable de changer de logiciel. Et ce ne serait pas nécessaire, mais une fois que les journaux de sauvegarde ont laissé entendre sans équivoque - si vous continuez dans le même esprit, toute la nuit ira à une sauvegarde complète. Et le problème réside dans le volume des boîtes aux lettres des utilisateurs.

Le problème est indiqué, il faut le résoudre. La voie à suivre - pour acheter du fer encore plus puissant - n'est pas mon genre et le budget n'est pas en caoutchouc. L'option évidente: les quotas. Mais en pratique, cela n'aide pas beaucoup. Les serments de «J'ai tout nettoyé», après un examen plus approfondi, se transforment en sceaux, en images drôles et en archives de photos de famille (dans le courrier de l'entreprise, oui). Et le nombre de cris «J'ai une lumière urgente ne fonctionne pas, faites-le immédiatement» augmente d'un ordre de grandeur. Donc, pas pour longtemps et perdez confiance dans les gens.
Heureusement, je ne suis ni psychologue, ni coach, ni mentor. Mon entreprise est la technologie. Nous allons donc venir du côté technique.
La première chose que j'ai pensé était des messages autodestructeurs. En gros, tout ce qui n'est pas marqué "important" est supprimé après N jours. À mon goût, il devrait être "cousu" dans les normes de stockage du courrier électrique. Mais jusqu'à présent ce n'est pas le cas et la mise en œuvre m'a paru trop ambitieuse.
La deuxième pensée était des copies. Connaissez ces messages dont vous n'êtes pas le destinataire principal. Vient à vous juste pour information. Certains de ces messages pourraient être supprimés automatiquement. Mais, tout à coup, ici, les utilisateurs étaient divisés en deux camps: «ils ont tous besoin de quoi» et «qu'est-ce que c'est». Je n'ai pas maîtrisé l'algorithme de tri automatique dans de telles conditions.
Eh bien, ne supprimez pas, alors copiez! Prenez toutes les copies et faites des liens symboliques. Une analyse rapide a montré que même le traitement des doublons FULL de cette manière permet d'économiser TROIS référentiels. Mais, mais, mais. Malheureusement, il s'agit d'une voie sans issue en raison de nombreuses limitations techniques.
Détails pour ceux intéressés par le spoiler- tous les archiveurs ne comprennent pas les liens symboliques;
- Le logiciel serveur devient fou par endroits;
- complexité org. caractère et droits d'accès.
Soit dit en passant, dans mes paramètres de serveur de messagerie et les sauvegardes générales, et le stockage d'archives pour les utilisateurs sont très rares. L'espace de manœuvre était donc réduit.
Que reste-t-il? Avec tristesse j'ai regardé les phoques
et se demandait déjà un simple réseau de neurones qui nettoierait le courrier pour l'utilisateur. Et puis ... Excusez-moi, excusez-moi, mais que font les chats dans la lettre? Je me souviens qu'une lettre avec une pièce jointe pèse près d'un tiers de plus qu'une pièce jointe! Mais puis-je déplacer la pièce jointe? ..
Ainsi a commencé le chemin où il y avait "beaucoup de merveilleuses découvertes". Si je savais ... Eh bien, tu comprends. Une goutte d'ignorance et de courage nous mène à la victoire!
Donc: nous faisons le
stockage des pièces jointes séparément des lettres .
La principale erreur que vous pouvez faire ici est d'ouvrir le fichier eml dans un éditeur de texte et de décider qu'il y a du texte brut. Alors je l'ai fait. Et était ravi. Pour l'instant, je vais écrire un fichier de commandes. Les utilitaires de ligne de commande pour l'extraction des pièces jointes sont complets:
github.com/erikvdv1/eml-attachments ou
github.com/maiken2051/uudeview , à la
main . Il y a des problèmes avec les encodages, mais ce n'est pas la chose la plus importante.
La chose la plus importante: retirer le fichier et créer un lien vers celui-ci est une affaire insignifiante. Mais pour pousser ce lien dans la lettre d'origine ... Parce qu'il n'y a pas de texte. Il y a
MIME .
Un lecteur expérimenté, bien sûr, glousse maintenant contre l'auteur malheureux. L'auteur a cependant découvert les délices de la «norme». La chose la plus importante que j'ai comprise: les champignons agaric volants ne sont pas nécessaires pour tomber dans un berserk.
Exemples et abus - sous le spoiler:
charset = utf-8
charset = "UTF-8"
charset = "UTF-8"
charset = UTF-8;
charset = "UTF-8";
charset = "UTF-8";
C'est une seule et même chose.
Les sauts de ligne au milieu d'un flux Base64. D'où ils viennent est encore un mystère pour moi.
Et vice versa: l'absence de \ r \ n \ r \ n après la partie en-tête.
Dans l'en-tête lui-même, l'ordre des champs est à la demande du talon gauche.
Les lettres plus anciennes autorisent une longueur de ligne ne dépassant pas 80 caractères, y compris les caractères de service.
Il peut y avoir des sauts de ligne dans les noms de fichiers (dans le corps du message et non dans le nom lui-même).
En général, les sauts de ligne peuvent être n'importe où, malgré le fait que dans le saut de ligne standard est déclaré comme la fin du paramètre actuel.
Le texte de la lettre lui-même est codé. Comment est-il exactement encodé, reste dans la conscience d'un serveur particulier, il y a un tas d'options (puant).
Et, dans la lettre, il y a presque toujours une partie html. Autrement dit, si vous envoyez "Bonjour" et qu'il y a une balise br ou p, alors dans la lettre il y aura toujours DEUX sections: avec du texte simple et avec des balises. Et le texte est dupliqué. Et ici, ils ont "économisé" la puissance de calcul ... Juste une ménagerie avec Frankenstein.
Le nom des fichiers dont ils disposent est le suivant: filename = "=? Encoding? Type?; Et cela se produit comme ceci: filename * 0 * = encoding '' (STA ?? !!). Le second est une norme plus récente, RFC5987. La norme indique explicitement ce nom de fichier * 0 * = ENC et nom de fichier = "=? même chose. À cet endroit, j'ai finalement été convaincu qu'ils se moquaient de moi. Comment cela peut être géré normalement, je ne sais pas.
Séparément, comme d'habitude, Apple a marqué. Ils ont généralement une sorte de norme qui leur est propre. Pour l'avenir, de longues tentatives de traitement de leur code ont conduit à la seule solution correcte: «Erreur: le courrier Apple n'est pas pris en charge.»
Thunderbird le fait cependant. Avec chagrin, je suis monté dans ses sources, mais je n'ai pas pu trouver la section nécessaire dans un gigaoctet et demi de code pour un mélange de python et de dialectes de Java. Aidé dans leur IRC, où ils m'ont gentiment dit où chercher, mais ne pouvaient toujours pas le trouver.
Mais il n'a pas perdu courage. Ne lisez pas la documentation @ écrivez le code, et vous avez terminé. Non, sérieusement, j'ai dû faire quelque chose pour rapprocher la fin du MIME.
Le script batch n'était pas suffisant. Le résultat a été
un utilitaire de ligne de commande en C # et dotNet .
L'utilitaire a deux modes de fonctionnement:
Premièrement: extrait simplement les pièces jointes. En même temps, il fonctionne correctement avec les encodages pour Windows.
Deuxièmement: et ici le principal plaisir. Maintenant, nous pouvons toujours stocker les pièces jointes séparément du courrier! L'utilitaire
crée une nouvelle lettre au lieu de l'ancienne : la
pièce jointe est découpée, la lettre est reformatée en HTML brut avec encodage UTF sans limiter la longueur de la ligne. La section texte / simple est prise comme base. S'il y a des tableaux dans la section html, il les transfère tout en conservant la mise en forme à l'intérieur du tableau, mais cette fonctionnalité fonctionne à peu près. À la fin du texte de la lettre en cours (s'il s'agit d'une réponse ou d'un transfert), des liens vers les ressources réseau sont insérés avec le chemin d'accès aux fichiers extraits, dans les formats file: /// et ftp: //.

Le système est testé sur plus de 10000 lettres et est déployé sur l'infrastructure existante.
Avantages identifiés:+ était:
Sauvegarde
Elle a commencé à 01:00:08
et terminé avec succès 03:26:32
est devenu:
Sauvegarde
Cela a commencé à 01:00:09
et terminé avec succès 01:40:36
+ 30% d'économie de stockage +: les fichiers passent du lourd Base64 et d'autres au format de système de fichiers normal, en plus de nombreux doublons ont été trouvés même dans des boîtes aux lettres individuelles.
+ La vitesse de traitement des boîtes aux lettres par le serveur et les programmes de messagerie est augmentée.
+ Disparaît "J'ai ouvert une lettre du bureau de poste, l'ai éditée pendant 10 heures et elle n'a pas survécu"
+ Vous pouvez refuser des quotas.
+ Il reste possible de trouver une pièce jointe dans l'e-mail, au lieu de simplement la transférer dans le stockage de fichiers.
+ Vers la fin de MIME. Repentez-vous, auteurs!
Inconvénients de la décision:- certaines lettres (mais pas les pièces jointes) battent toujours. Fondamentalement pas en interne, mais vu par certains clients;
- en ftp certains démons se brisent constamment;
- tous les clients de messagerie ne prennent pas en charge l'ouverture via un fichier: ///
Problèmes controversés:? Courrier Apple non pris en charge. Pour moi - et le Bouddha est avec lui;
? Battez des lettres avec un formatage complexe. Habituellement, ce sont des dépliants de réservation ou de publicité;
? Si le serveur ftp est sur un port non standard, il peut y avoir des problèmes d'accès. Décidé par un bot de messagerie.
D'une manière si épineuse, le problème a été résolu.
Merci de votre attention!