1 Punkte von GN⁺ 2024-05-22 | 2 Kommentare | Auf WhatsApp teilen

Das Rätsel der verschwundenen Punkte im E-Mail-Text

Das nicht ganz so einfache Simple Mail Transfer Protocol

  • Tjaart
      1. Februar 2024

Das Problem tritt auf

  • Es wurde berichtet, dass Punkte im Text einer an einen Kunden gesendeten E-Mail verschwanden.
  • Wurde dieselbe E-Mail an einen anderen Kunden gesendet, verschwanden die Punkte nicht.

Rückblick auf das Projekt

  • Vor etwa 7 Jahren wurde eine Lösung entwickelt, um Dokumentvorlagen in einem einzigen System zu konsolidieren.
  • Der Kunde verwendete Microsoft-Word-Vorlagen, um Platzhalter in Dokumente einzufügen.
  • Jedes Mal, wenn Mitarbeitende ein Dokument per E-Mail verschickten, mussten die Platzhalter durch die tatsächlichen Inhalte ersetzt werden.

Probleme bei der Vorlagenverwaltung

  • Es gab mehrere Vorlagenversionen, die schwer zu verwalten waren.
  • Einige Vorlagen verwendeten veraltete Geschäftsbedingungen, Logos, Schriftarten usw.
  • Es wurde eine Lösung entwickelt, mit der alle Vorlagen zentral verwaltet werden konnten.

Umsetzung der Lösung

  • Der Kunde konnte zentral Vorlagen verwalten, mit denen PDF-Dokumente, Textnachrichten und E-Mail-Texte erzeugt wurden.
  • So konnte zum Beispiel eine Vorlage für ein Begrüßungsschreiben an neue Kunden eingerichtet werden.
  • Für jeden Übermittlungsweg (E-Mail, SMS, Post) konnten unterschiedliche Vorlagen konfiguriert werden.

Reproduktion des Problems

  • Das Problem, dass Punkte verschwanden, trat nur bei E-Mails an einen bestimmten Kunden auf.
  • Im Quelltext der Vorlage waren die Punkte vorhanden.
  • Bei der lokalen Vorschau des E-Mail-Textes waren die Punkte sichtbar.

Analyse der Ursache

  • Beim Erzeugen des E-Mail-Textes gab es Code, der die Länge jeder Zeile begrenzte.
  • Wenn eine Zeile die erlaubte Länge überschritt, wurde eine neue Zeile erzeugt und der restliche Inhalt dorthin verschoben.
  • Laut SMTP-Spezifikation wird, wenn eine Zeile mit einem Punkt beginnt, ein zusätzlicher Punkt eingefügt, und der Server entfernt den ersten Punkt.

Die Lösung

  • Der Code wurde so angepasst, dass beim Beginn einer Zeile mit einem Punkt ein zusätzlicher Punkt eingefügt wird, damit nach dem Entfernen durch den Server weiterhin ein Punkt erhalten bleibt.
  • Tests mit dem geänderten Code bestätigten, dass die Punkte nicht mehr verschwanden.
  • Das Problem wurde behoben und andere Teams wurden über den Bug informiert.

Ein späteres Folgeproblem

  • Einige Monate später hatte ein anderes Team denselben Bug nicht behoben, sodass in einer wichtigen E-Mail erneut Punkte verschwanden.
  • Einige Kunden erhielten E-Mails, in denen die neue monatliche Gebühr als $2700 statt $27.00 angezeigt wurde.
  • Das Problem wurde sofort durch einen Code-Patch behoben.

Meinung von GN⁺

  1. Wie wichtig das Verständnis der SMTP-Spezifikation ist: Um Probleme beim E-Mail-Versand zu lösen, ist ein tiefes Verständnis der SMTP-Spezifikation entscheidend.
  2. Die Komplexität der Vorlagenverwaltung: Die Verwaltung mehrerer Vorlagenversionen kann komplex sein und erfordert ein zentrales Verwaltungssystem.
  3. Debugging-Fähigkeiten: Die Fähigkeit, Probleme zu reproduzieren und ihre Ursache zu analysieren, ist entscheidend.
  4. Kommunikation zwischen Teams: Nach der Problemlösung ist es wichtig, Informationen mit anderen Teams zu teilen.
  5. Automatisierte Tests: Um solche Probleme zu verhindern, ist die Einführung automatisierter Tests sinnvoll.

2 Kommentare

 
surfindia 2024-05-22

Ich glaube, im Titel wurde period nicht als Punkt, sondern als Zeitraum verstanden, haha.

 
GN⁺ 2024-05-22
Hacker-News-Kommentare

Zusammenfassung der Hacker-News-Kommentare

  • Schwierigkeiten bei der Implementierung von SMTP-Clients

    • Die Implementierung eines SMTP-Clients ist schwierig, und wenn sie nicht korrekt erfolgt, entstehen leicht Bugs. Die Template-Schicht sollte sich nicht um SMTP kümmern müssen.
    • Solche Probleme entstehen, weil viele Leute die grundlegenden Protokolle nicht über das Terminal lernen. Die Regel, eine Nachricht mit einem „einzelnen Punkt“ zu beenden, ist wichtig.
    • Viele Programmierer verstehen das Konzept des Escapings nicht. Sie berücksichtigen nicht den Fall, dass eine E-Mail einen „einzelnen Punkt“ enthält.
  • Eine Geschichte über Arbeitszeugnisse in Deutschland

    • In Deutschland ist es üblich, bei Beendigung eines Arbeitsverhältnisses ein Arbeitszeugnis zu erhalten. Fehlt im letzten Satz der Punkt, hat das eine negative Bedeutung.
    • Als ein Anwalt das Arbeitszeugnis geprüft hat, stellte sich heraus, dass der fehlende Punkt im letzten Satz ein Problem war.
  • Cronjobs und SMTP-Clients

    • Ein Cronjob, der E-Mails versendet, muss keinen eigenen SMTP-Client implementieren. Man kann dafür Programme wie mailutils verwenden.
    • Die grundlegende SMTP-Interaktion per Socket selbst zu implementieren, ist ineffizient. Es werden TLS-Verbindungen und Authentifizierung benötigt.
    • Cron kann bereits selbst E-Mails versenden. Mit der Variablen MAILTO lässt sich die E-Mail-Adresse festlegen.
  • Zwei schlechte Gewohnheiten

    • Standards sollte man nicht halbherzig implementieren. Man muss die nötige Sorgfalt aufbringen oder vorgefertigte Bibliotheken verwenden.
    • Abhängigkeiten sollte man nicht vendoren. Bibliotheken müssen regelmäßig aktualisiert werden. Wenn man Updates aufschiebt, kann das zu großen Problemen führen.
  • Notwendigkeit von Dot-Stuffing

    • Bei SMTP und POP3 ist Dot-Stuffing erforderlich. Dazu kann man die entsprechenden RFC-Dokumente nachschlagen.
  • Problem mit HTML-MIME-Anhängen

    • Der Satz „We are happy to welcome you to our family.“ überschreitet das Zeilenlimit nicht. Möglicherweise handelte es sich um einen HTML-MIME-Anhang.
    • Wenn man HTML blind nach Zeilen trennt, können Tags beschädigt werden.
  • Wenn das erste Zeichen ein Punkt ist

    • Wenn das erste Zeichen ein Punkt ist und weitere Zeichen folgen, wird das erste Zeichen gelöscht. Denn ein einzelner Punkt bedeutet das Ende der Mail.
    • Es ist schwer nachzuvollziehen, warum der Punkt gelöscht wird. Man könnte ein Byte speichern, um das nächste Zeichen zu prüfen.
  • Hinweis auf einen Bugfix

    • Der SMTP-Client-Code wurde aus einem früheren Projekt übernommen, daher wurde ein anderes Team über den Bug informiert.
    • Es ist möglich, dass das andere Team diesen Bug nicht gepatcht hat.
  • Erfahrungen mit der Implementierung eines NNTP-Servers

    • Bei der Implementierung eines NNTP-Servers auf Basis der RFC-Spezifikation wurde das Problem mit Dot-Stuffing sofort verstanden. Es handelt sich um ein Protokoll aus den 80er-Jahren.