Neu vorgestellt, Programmierung

Delivery Status Notification (DSN)

Wie bereits im Artikel E-Mail mit verschlüsselter Übertragung beschrieben wurde, unterstützt CONZEPT 16 ab der Version 5.7.03 den Versand von verschlüsselten E-Mails. Als weitere Neuerung können in CONZEPT 16 ab dieser Version “Delivery Status Notification“-Kommandos verwendet werden.


Unter Delivery Status Notification (DSN) versteht man eine E-Mail des Mailservers, welche an den Absender adressiert ist und diesen über den Verlauf der Zustellung unterrichtet. DSNs werden nicht nur ausgelöst, wenn eine E-Mail endgültig nicht zugestellt werden konnte (Permanent Failure), sondern auch, wenn diese vorübergehend nicht zugestellt werden kann (Persistent Transit Failure) oder erfolgreich zugestellt wurde (Success). Allerdings unterstützen nicht alle Mailserver DSNs.

Innerhalb von CONZEPT 16 werden mit dem Befehl MailData() der Nachrichtenkopf, der Nachrichteninhalt und die Anhänge gesetzt. Der Nachrichtenkopf muss mindestens den Absender und einen Empfänger der Nachricht enthalten. Bei diesen Absender- und Empfängeradressen können die “Delivery Status Notification”-Kommandos verwendet werden. Diese sind nach RFC (Request for Comments) 3461 definiert und werden als String übergeben.

DSN-Kommandos bei Absender

Bei der Funktion MailData() mit der Option _SmtpFrom kann das DSN-Kommando RET oder ENVID übergeben werden. RET legt fest, wie viel von der originalen Nachricht wieder zurück gesendet wird. Es besteht die Option den kompletten Text (FULL) oder nur den Kopf der Nachricht (HDRS) zurück zu senden.
Bei ENVID handelt es sich um eine eindeutige Kennung, welche vom Verfasser frei gewählt werden kann. Diese hilft bei der Identifikation der E-Mail.

DSN-Kommandos bei Empfängern

Über die Funktion MailData() mit der Option _SmtpTo, _SmtpCC oder _SmtpBCC kann die Bedingung für die Benachrichtigung definiert werden. Das DSN-Kommando NOTIFY ist das eigentliche Herz der DSN. Es sagt dem Server unter welchen Umständen er eine DSN-Nachricht versenden soll. Folgende Parameter können übergeben werden:

  • SUCCESS
    Versendet eine DSN, wenn die Nachricht erfolgreich zugestellt werden konnte.
  • FAILURE
    Versendet eine DSN, wenn die Nachricht nicht zugestellt werden konnte.
  • DELAY
    Versendet eine DSN, wenn sich die Zustellung verzögert hat.
  • NEVER
    Wird angegeben, wenn kein DSN-Versand erwünscht ist.Die ersten drei Parameter können beliebig miteinander kombiniert werden. Der letzte Parameter muss für sich allein stehen.

Achtung!
Eine positive Rückmeldung “NOTIFY=SUCCESS” belegt nur, dass die E-Mail den Verantwortungsbereich des Empfängers erreicht hat. Da eine positive DSN lediglich die erfolgreiche Platzierung der E-Mail auf dem Mailserver des Empfängers bestätigt, kann aus ihrem Erhalt nicht geschlossen werden, dass die betroffene E-Mail den Empfänger erreicht bzw. von diesem wahrgenommen wird.
DSN-Kommando ORCPT: Hier wird die E-Mail-Adresse des originalen Absenders angegeben. Das ermöglicht zu ermitteln von welcher Adresse die E-Mail ursprünglich versandt wurde, wenn diese weitergeleitet wurde. Vor der E-Mail Adresse muss ein Adress-Typ angegeben werden.
Die DSN-Kommandos können für jeden Empfänger einzeln zugewiesen werden. Dies hat den Vorteil, dass individuell entschieden werden kann, unter welchen Umständen eine DSN-Nachricht versendet werden soll. Zum besseren Verständnis ein kleines Beispiel:

{
   // E-Mail öffnen
   tMail # MailOpen(_MailSMTP, aHostName, aHostPort, 0, aUserName, aUserPass);

   // E-Mail geöffnet
   if (tMail > 0)
   {
      ErrSet(_ErrOK);
      try
      {
         // Absender einstellen
         tMail->MailData(_SmtpFrom, aFromAddr, aFromName, 'RET=HDRS ENVID=QQ1234');
         // Empfänger einstellen
         tMail->MailData(_SmtpTo, aToAddr, aToName, 'NOTIFY=SUCCESS ORCPT=rfc822;support@vectorsoft.de');
         // Sichtbare Kopie einstellen
         tMail->MailData(_SmtpCC, aCCAdress, aCCName, 'NOTIFY=SUCCESS,FAILURE');
         // Betreff einstellen
         tMail->MailData(_SmtpSubject, aSubject);
         // Text einstellen
         tMail->MailData(_MailBuffer | _MimeTE_8B, CnvAI(aTextPlain, _FmtInternal));
      }
      // Fehler ermitteln
      tErr # ErrGet();
      // Kein Fehler aufgetreten
      if (tErr = _ErrOK)
      {
         // E-Mail senden und schließen
         tErr # tMail->MailClose(_SmtpSendNow);
      }
      // Fehler aufgetreten
      else
      {
         // E-Mail verwerfen
         tMail->MailClose(_SmtpDiscard);
      }
   }
   ...
}
Update:

Wie bereits im Artikel CONZEPT 16-Version 5.6.06 beschrieben wurde kann innerhalb von CONZEPT 16 eine Empfangsbestätigung angefordert werden. Dies geschieht bei MailData() mit dem Parameter _SmtpNotifyTo. Im Header der E-Mail wird der Eintrag “Disposition-Notification-To” gesetzt.

5 Kommentare

5 Kommentare “Delivery Status Notification (DSN)”

  1. Das ist eine gute Erweiterung, die wir auch gut gebrauchen können.

    Eine substantielle inhaltliche Rückmeldung, ob alles funktioniert usw., kann ich natürlich erst geben, nachdem ich die Gelegenheit hatte, die Erweiterung zu testen.

Kommentar abgeben