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