Konnektivität erhöhen

CONZEPT 16 bietet bereits eine Vielzahl an Schnittstellen um Ihrer Applikation den Dialog mit anderer Software zu ermöglichen. Sollten Sie dennoch einmal eine Schnittstelle vermissen, haben Sie häufig die Möglichkeit sie mit den Bordmitteln von CONZEPT 16 zu realisieren.

Am Beispiel des Post Office Protcol (POP), zum Abfragen und Abholen von E-Mails bei einem E-Mail-Server, stelle ich hier die Implementierung eines einfachen Protokolls vor.


Das POP ist – wie die meisten Internet-Protokolle – ein Text-orientiertes Protokoll. Dies bedeutet, die ausgetauschten Informationen sind größtenteils Menschen-lesbar. Es basiert auf dem TCP/IP-Protokoll für das CONZEPT 16 die Socket-Funktionen nativ bereitstellt. Aufbauend auf diesen Funktionen lässt sich dieses Protkoll mit geringem Aufwand realisieren.

Das Protokoll

Das Protokoll spezifiziert eine Reihe von Kommandos, die vom Client an den Server übertragen und von diesem beantwortet werden.

Zum Abfragen und Abholen von Nachrichten sind unter anderem folgende Kommandos verfügbar:

  • USER <username>
    Wählt den Benutzer zur Anmeldung.
  • PASS <password>
    Übergibt das Passwort zur Anmeldung.
  • STAT
    Liefert den Status des E-Mail-Kontos, das heißt die Anzahl der darin enthaltenen Nachrichten und deren Größe.
  • RETR <message-no>
    Holt eine Nachricht ab ohne sie zu löschen.
  • TOP <message-no> <body-lines>
    Wie RETR, jedoch werden nur die angegebene Anzahl Zeilen übertragen. Wird nicht von jedem Server unterstützt.
  • DELE <message-no>
    Löscht eine Nachricht.
  • QUIT
    Beendet die Sitzung.

Der Server kann auf ein Kommando mit zwei verschiedenen Resultaten antworten:

  • +OK [<response>]
    Das Kommando wurde erfolgreich durchgeführt. Bei einigen Kommandos wird auch eine Antwort übertragen.
  • -ERR [<error-text>]
    Bei der Durchführung des Kommandos ist ein Fehler aufgetreten. Ein Fehlertext kann ebenfalls vom Server übertragen werden.

Die Implementierung

In diesem Beispiel ist das Protokoll in einer Prozedur – nach dem Prinzip der Modularen Programmierung – implementiert. Die Prozedur können Sie am Ende des Artikels herunterladen. Das Modul verfügt über folgende Schnittstellenfunktionen:

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Verbindung herstellen und anmelden                             +
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub POP.Init
(
  aHost                 : alpha;        // Server
  aPort                 : word;         // Port (Standardport: 110)
  aUser                 : alpha;        // Benutzer
  aPass                 : alpha;        // Passwort
  opt aTextLog          : handle;       // Protokolltext
)
: int;                                  // Fehler
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Abmelden und Verbindung trennen                                +
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub POP.Term();
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Status und Nachrichten abfragen                                +
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub POP.Check
(
  var vCount            : int;          // Anzahl Nachrichten
  var vSize             : int;          // Größe aller Nachrichten
  opt aCteNodeMsgs      : handle;       // Liste aller Nachrichten
)
: int;                                  // Fehler

Die Verwendung

Mit der Funktion POP.Init() wird das Modul initialisiert, eine Verbindung zum E-Mail-Server hergestellt und die Anmeldung an einem E-Mail-Konto durchgeführt. Anschließend kann mit der Funktion POP.Check() die Anzahl der Nachrichten, deren Größe und deren Kopfinformationen – wie Betreff, Abwesender und Empfänger – ermittelt werden. Die Funktion POP.Term() führt schließlich die Abmeldung und den Verbindungsabbau durch:

// Verbindung herstellen und anmelden
tErr # POP.Init('myServer', 110, 'myUser', 'myPassword');
if (tErr = _ErrOK)
{
  tCteNodeMsgs # CteOpen(_CteNode, _CteChildList);
  // Status und Nachrichten abfragen
  tErr # POP.Check(var tCount, var tSize, tCteNodeMsgs);
  // Abmelden und Verbindung trennen
  POP.Term();
  if (tErr = _ErrOK and tCount > 0)
  {
    for   tCteNodeMsg # tCteNodeMsgs->CteRead(
            _CteChildList | _CteFirst);
    loop  tCteNodeMsg # tCteNodeMsgs->CteRead(
            _CteChildList | _CteNext, tCteNodeMsg);
    while (tCteNodeMsg > 0)
    {
      // Betreff ermitteln
      tCteNodeMsgHeader # tCteNodeMsg->CteRead(
        _CteAttribTree | _CteCmpE, 0, 'Subject');
      if (tCteNodeMsgHeader > 0)
        tStrSubject # tCteNodeMsgHeader->spValueAlpha;
      // Absender ermitteln
      tCteNodeMsgHeader # tCteNodeMsg->CteRead(
        _CteAttribTree | _CteCmpE, 0, 'From');
      if (tCteNodeMsgHeader > 0)
        tStrFrom # tCteNodeMsgHeader->spValueAlpha;
      // ...
    }
  }
  tCteNodeMsgs->CteClear(true);
  tCteNodeMsgs->CteClose();
}

Die Kommunikation

Die dabei entstandene Kommunikation könnte zum Beispiel so aussehen:

Begrüßung empfangen
  < +OK Server ready <123456789@myServer>
Benutzer senden
  > USER myUser
  < +OK myUser try a password
Passwort senden
  > PASS myPassword
  < +OK mailbox ready
Status abfragen
  > STAT
  < +OK 1 4654
Nachricht abfragen
  > TOP 1 0
  < +OK
    Received: from myComputer; Mon, 14 May 2012 15:14:18 +0200
    Message-ID: <0102030405060708090A0B0C0D0E0F@myServer>
    From: "Emil A. D. Resse" <>
    To: <>
    Subject: Hallo vectorsoft-Team
    Date: Mon, 14 May 2012 16:14:18 +0200
    Importance: normal
    Priority: normal
    .
Abmelden
  > QUIT

Fazit

Mit der Socket-Schnittstelle haben Sie die Möglichkeit die Konnektivität Ihrer Anwendung zu erhöhen. Durch die Implementierung TCP/IP-basierter Protokolle können Sie Schnittstellen einfach nachrüsten, falls CONZEPT 16 dieses nicht von Haus aus mitbringt. Neben dem Post Office Protocol, ist beispielsweise auch eine Implementierung des darauf aufbauenden Internet Message Access Protocol (IMAP) denkbar.

Download

Zum downloaden hier klicken SysPOP.prc (18.23 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

2 Antworten

  1. Ja, wenn die Schnittstelle nicht hinreichend dokumentiert ist oder Inkompatibilitäten zwischen verschiedenen Versionen bestehen ist das ein Problem. Da hilft wohl nur die Abfrage/Überprüfung der Version und detailliertes Testen der Implementierung.

  2. Die Herausforderung bei solchen Schnittstellen sind die (natürlich nicht dokumentierten) Eigenwilligkeiten (z.B. bei Outlook "Eigenschaft ungültig") und Versionssprünge

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner