Einzelnen Beitrag anzeigen

Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#1

Geänderte Parameterliste in TIdIMAP4Server

  Alt 22. Sep 2014, 10:20
Hallo zusammen,

ich habe schon lange nichts mehr mit den INDY-Kompontenten gemacht, möchte nun aber in einem Projekt die Möglichkeit schaffen, dass sich ein User mit seinem E-Mail-Client über IMAP auf den Server verbindet und seine Nachrichten sehen/abrufen kann.
Dazu habe ich mit die TIdIMAP4Server-Komponente angeschaut.
Das Problem befindet sich in der Methode "DefMechListMailBox" des Servers. In der aktuellen Implementierung mit Delphi XE7 und auch XE6 ist dort folgender Prototyp definiert:

function TForm2.IdIMAP4Server1DefMechListMailBox(ALoginName, AMailBoxName:string; AMailBoxNamens, AMailBoxFlags:TStrings):boolean;

Soweit so gut, nun soll über diese Methode ja die Liste der aktuellen IMAP-Ordner, bzw. Mailboxes zurückgeliefert werden.

In dem Indy-Demo, was allerdings schon von ich glaube 2004 ist, ist diese Methode implementiert als Ableitung aus der Indy-IMAP-Klasse mit


function TIdIMAP4ServerDemo.ListMailBox(ALoginName, AMailBoxName:string; var AMailBoxNamens: TStringList; var AMailBoxFlags:TStringList):boolean;

Damit macht das ganze noch Sinn, denn in dieser Variante kann man in der Methode der StringList "AMailBoxNames" die Namen der Mailboxen einfügen, und sie wird zurück gegeben, da der Parameter durch var referenziert wird.

Ich habe dann auch in der Implementierung in der IMAP4Server-Klasse geschaut. Dort ist es eigentlich auch "richtig".
Es wird beim Aufruf dieser Methode vorher eine leere StringList erstellt. Diese wird als Parameter an diese Methode übergeben, und anschließen wird dessen Inhalt (der eigentlich in der der Methode befüllt werden soll) IMAP-konform an den Client geschickt.
Aber dadurch, dass das Schlüsselwort "var" in der Indy-Methode fehlt, wird dieser Parameter nicht referenziert und sein Inhalt nicht verändert.

Hat irgendjemand das gleiche Problem? Oder hat sich damit schonmal beschäftigt? Ich habe nun seit gestern Nachmittag gesucht und probiert, aber keinen Ansatz gefunden.

Einzige Möglichkeit wäre für mich, die Sourcen von der Indy-Komponente wieder zu ändern, sodass der Parameter referenziert wird. Aber das nur als letzte Möglichkeit. Ich frage mich, wie sonst die Ergebnisse zurückgeliefert werden sollen und suche nach dem Grund, warum die Parameter-Liste geändert wurde.

Oder habe ich bei der Entwicklung der INDY-Komponenten in den letzten Jahren was verschlafen.

Bin für jeden Ansatz dankbar.

Viele Grüße
Christian
Christian Rüsken
  Mit Zitat antworten Zitat