Uwe Ohse

Artikel

Header/Envelope-Trennung

Immer wieder fällt mir auf daß viele Leute, obwohl sie teilweise jahrelang mit dem Medium Email umgehen, vielleicht sogar Mailboxen betreiben oder bei einem Internetprovider beschäftigt sind, dennoch nicht wissen was der Envelope einer Nachricht ist. Dies ist ein Versuch ihn zu erläutern.

Das Leben ohne Envelope

Fangen wir vorne an: Sender A verschickt eine Nachricht an Empfänger B. So könnte sie aussehen:
          From: A
          To: B
          Subject: Eine Nachricht

          Inhalt der Nachricht

Das ist, auf das Wesentliche reduziert, was wir im Allgemeinen von den Nachrichten sehen: Einen Header und den Body (Nachrichteninhalt).
Das reicht soweit auch aus, damit könnte man ein einfaches Mailtransportsystem aufbauen (und in der Tat haben die meisten Mailboxnetze auch nicht mehr getan).


Dieses einfache Verfahren stößt unglücklicherweise schnell an seine Grenzen. Nehmen wir mal folgende Fälle:
  1. B ist verreist und läßt sich die Nachricht an die Adresse C weiterleiten. Was passiert nun? To: muß natürlich verändert werden, From: bleibt unverändert (unter anderem weil, wenn `C' nicht erreichbar ist, es auch ziemlich witzlos ist eine Fehlermeldung an `B' zu senden, die dann wieder an `C' zu senden wäre. Oops. Schleife).
    Das funktioniert, ist aber nicht gerade elegant - schließlich kann der Empfänger so nicht nicht mal erkennen an wen die Nachricht ursprünglich gegangen ist (was möglicherweise wichtig ist wenn er mehrere Adressen auf `C' umleiten läßt).
  2. B ist eine Mailingliste mit einigen tausend Empfängern. Man kann dann davon ausgehen daß immer einige Empfänger nicht erreichbar sind. Es dürfte einsehbar sein daß nicht `A' die Fehlermeldungen bekommen sollte, sondern der Listenverwalter. Also vielleicht so?
              From: listenverwalter
              To: D
              Subject: Eine Nachricht
    
              Inhalt der Nachricht
      

    Aber was passiert wenn jetzt jemand antwortet? Der Listenverwalter würde dann sehr schnell unglücklich werden. Also besser so?

              From: B (zur Erinnerung: B ist die Adresse der Liste)
              To: D
              Subject: Eine Nachricht
    
              Inhalt der Nachricht
      

    Aber dann geht der ursprüngliche Absender verloren - auch nicht gut.

    In der Praxis löst man das häufig so (zum Beispiel im MausNet):

              From: B
              To: D (irgendein Empfänger)
              Subject: Eine Nachricht
    
              Dies ist eine Nachricht von A
    
              Inhalt der Nachricht
      

    Sprich man versucht die Informationen im Text unterzubringen - was allerdings mit PGP-Signaturen problematisch wird. Andererseits kann man mit dieser Lösung sowieso keinen Schönheitspreis gewinnen ... vergessen wir sie besser.

Durch den Einsatz der Reply-To:-Zeile kann man die Probleme zwar entschärfen, aber nicht sauber lösen. Im Falle der Mailingliste könnte man dann so vorgehen:
          From: listenverwalter
          To: D (irgendein Empfänger)
          Reply-To: liste
          Subject: Eine Nachricht

          Dies ist eine Nachricht von A

          Inhalt der Nachricht

Schön ist das allerdings nicht - was passiert wenn der Absender selbst Reply-To: E gesetzt hatte, weil er im Begriff ist seinen Wohnort/Provider/Urlaubsort zu wechseln?
Und warum zum Henker kann ohne Verrenkungen (manuelles Eintippen der Empfängeradresse) keine Antwort nur an den Absender gesendet werden?

Offensichtlich geht hier etwas schief - so wie es aussieht ist die Vermengungen der Informationen im Header mit den Transportinformationen problematisch.

Die Lösung - der Envelope

Wenn einfache Lösungen nicht ausreichen, was tun? Nun, man macht die Sache so kompliziert wie nötig - man fügt eine weitere Informationsschicht hinzu, die nur für Transportzwecke verwendet wird. In Anlehnung an das Briefwesen nennt man sie Envelope (Umschlag). Die Analogie ist nicht ganz perfekt - Internetmailsysteme verewigen den Weg, den die Nachricht nimmt, im Header der Nachricht (was ich durchaus für einen konzeptionellen Fehler halte - würde diese Information im Envelope übertragen könnte man problemlos ganze Nachrichten signieren statt nur den Inhalt und, siehe PGP-signierte Controlmessages im Usenet, ausgewählte Header. Ausserdem wäre es logischer alle Transportinformationen, inclusive der beigefügten Debuginformationen, an einer Stelle aufzubewahren).

Wie versenden jetzt wieder eine Nachricht. Der Darstellung willen habe ich die Envelope-Informationen einfach vor die Nachricht gestellt, praktisch funktioniert das etwas anders.

          Envelope-From: A
          Envelope-To: B
          From: A
          To: B
          Subject: Eine Nachricht

          Inhalt der Nachricht

Was entsteht daraus?

sei `B' ein Nachrichtenweiterleiter auf `C':
          Envelope-From: A
          Envelope-To: C
          From: A
          To: B
          Subject: Eine Nachricht

          Inhalt der Nachricht

Je nachdem wie das Weiterleiten durchgeführt wird kann auch schon mal `B' (oder etwas anderes was der Besitzer von `B' oder seine Programme dort eintragen) im Envelope-From: stehen, aber das ist Sache von `B'.

sei `B' eine Mailingliste, und `D' ein Leser:
          Envelope-From: listenverwalter
          Envelope-To: D
          From: A
          To: B
          Subject: Eine Nachricht

          Inhalt der Nachricht

Elegant, nicht? `listenverwalter' kann nun auch noch ein Programm sein ...


Aber ich brauche das nicht, es geht auch ohne

Gemünzt auf Jörg wir brauchen diese Internetbesonderheit nicht Stattaus.

Natürlich geht es auch ohne - aber mit geht es besser. Viel besser.
Denn selbst wenn man, wie im MausNet, Mailinglisten lieber nicht sieht (jedenfalls offiziell - praktisch gibt es genug davon!) - der Rest der Welt benutzt sie trotzdem, und natürlich wollen MausNet-Benutzer daran teilnehmen. Nicht jeder vielleicht - aber das sollte man den Leuten selbst überlassen.


Was passiert denn beim Übergang ins MausNet mit dem Envelope?

Im Prinzip ist das Sache der Gatewaysoftware. Es gibt allerdings nur eine Lösung mit minimalen Problemen (im Vergleich zu anderen Lösungen ohne Envelope. Nicht im Vergleich zu einer optimalen Lösung).
Wenn diese Nachricht aus dem Internet käme:
          Envelope-From: A
          Envelope-To: B
          From: C
          To: D
          Subject: Eine Nachricht

          Inhalt der Nachricht
dann macht das Gateway (mindestens mauscon) daraus:
          From: C
          To: B
          Subject: Eine Nachricht
  
          Inhalt der Nachricht
(tatsächlich schreibt mauscon noch eine X-To: D-Zeile in den Body [woanders kann es die, dank MausTausch, nicht unterbringen])

Das bringt einige Probleme mit sich - die eigentlich oben schon beschrieben worden sind:


übrigens gibt es an einer Stelle ein Envelope-To im MausNet

Wenn in der Box des Empfängers einer Nachricht diese Nachricht durch einen Weiterleiter läuft (ich bin mir jetzt nicht sicher ob das auch für FWD_PM gilt oder nur für Chef Gruppe, Sysop oder die Aliasse der Quark) und der Empfänger der weitergeleiteten Nachricht in derselben Box ist, dann wird die Nachricht mit der ursprünglichen Empfängeradresse weitergeleitet. Das ist möglich weil bei der lokalen Speicherung die Nachricht im Postfach des Zielbenutzer abgespeichert wird, also keine Notwendigkeit besteht den Empfänger im Header zu überschreiben.


Besteht Hoffnung?

Für das MausNet? Wohl kaum ...
Davon mal abgesehen: Wollte man eine Header/Envelopetrennung alleine im MausTausch einbauen würde dies eine massive Änderung des Formats notwendig machen. Boxen benutzen die Absenderzeile bisher als Zieladresse für Fehlermeldungen (na gut, die MAUS macht es sich noch einfacher - sie überläßt einfach den Gates und über MausTausch angeschlossenen Boxen unter ihr die Generierung der Fehlermeldungen).
Benutzer bzw. Frontendprogramme benutzen den Inhalt der From-Zeile als Antwortadresse.
Eine der beiden Programmgruppen muß massiv verändert werden. MAUS und mausnet.exe nicht zu vergessen - in jedem Fall würde das reichlich viel Arbeit ... wobei noch die Frage wäre ob man nicht einfacher die Transportebene im MausNet auf RFC-Technik umstellt, und nur noch zum Benutzer hin MausTausch anbietet. Jedenfalls dürfte das mittelfristig weniger Arbeit sein als die notwendigen Änderungen in die jetzige Infrastruktur einzuhacken.
Natürlich kann man sich die Arbeit der Änderung an der Software machen. Allerdings kann man es dann gleich richtig machen, und die früher so hochgelobten und effektiv vorhandenen Vorteile der MausNettechnik, insbesondere die Geschwindigkeit, sind längst Geschichte.