Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idIMAP: Mail auf dem Server löschen (https://www.delphipraxis.net/102675-idimap-mail-auf-dem-server-loeschen.html)

Nju 2. Nov 2007 07:49


idIMAP: Mail auf dem Server löschen
 
Ich habe mal etwas mit der idIMAP-Komponente herumgespielt und kann auch wunderbar per IMAP auf meine Mailbox zugreifen (Es wird mit dem IMap-Server verbunden, die Anzahl der EMails abgefragt und dann von jeder EMail der Betreff in eine Liste hinzugefügt):

Delphi-Quellcode:
IdIMAP41.Host := IMapServer;
IdIMAP41.Username := Benutzername;
IdIMAP41.Password := Kennwort;
IdIMAP41.Connect(True);

IdIMAP41.SelectMailBox('inbox');
lbl_Anzahl.Caption := IntToStr(IdIMAP41.MailBox.TotalMsgs);
  for i := 1 to StrToInt(lbl_Anzahl.Caption) do begin
    IdIMAP41.RetrieveHeader(i, idMessage1);
    box_Mails.Items.Add(idMessage1.From.Text + ': ' + idMessage1.Subject + '[(id:' + IntToStr(i) + ')]');
  end;
So, Problem ist jetzt aber, dass ich keine EMail löschen kann.
Meine Vorgehensweise: Ich benutze die id, welche ich in der Liste mitabgespeichert habe (dies funktioniert, da ich auf diese Weise auch den Body einer Nachricht anzeigen lassen kann):

Delphi-Quellcode:
var
  LoeschID: array[0..0] of LongInt // Die Methode verlangt nach einem statischen Array
begin
  LoeschID := {ID aus der Listbox}
  IdIMAP41.DeleteMsgs(LoeschID);
end;
Was mache ich falsch?

Thomas Horstmann 2. Nov 2007 09:10

Re: idIMAP: Mail auf dem Server löschen
 
Hallo,

1. Mit "DeleteMsgs" wird nur das IMAP-Löschkennzeichen gesetzt. Wurden die Mails mit "IdIMAP41.ExpungeMailBox" endgültig gelöscht?

2. Gibt "DeleteMsgs" TRUE zurück?

3. Grundsätzlich: Nach unserer Erfahrung sollte man besser mit der UID arbeiten, die ist immer eindeutig (UIDDeleteMsgs...).

Viele Grüsse
Thomas

Nju 2. Nov 2007 09:20

Re: idIMAP: Mail auf dem Server löschen
 
Zitat:

Zitat von Thomas Horstmann
Hallo,

1. Mit "DeleteMsgs" wird nur das IMAP-Löschkennzeichen gesetzt. Wurden die Mails mit "IdIMAP41.ExpungeMailBox" endgültig gelöscht?

2. Gibt "DeleteMsgs" TRUE zurück?

3. Grundsätzlich: Nach unserer Erfahrung sollte man besser mit der UID arbeiten, die ist immer eindeutig (UIDDeleteMsgs...).

Viele Grüsse
Thomas

Vielen Dank für die Antwort, durch deine zwei ersten Punkte bin ich nun in der Lage zu löschen.

Zu 3. habe ich allerdings noch eine Frage:

Wie kann ich auf die UID zugreifen?

Wenn ich idMessage1.UID nehme erhalte ich einen leeren Sctring zurück, wenn ich allerdings idMessage1.MsgId nehme, erhalte ich einen String (eindeutig?) zurück. Sind diese beiden IDs identisch?

Thomas Horstmann 2. Nov 2007 11:20

Re: idIMAP: Mail auf dem Server löschen
 
Hallo,

1. Die ID ist ein fortlaufende Nummer, die nur für den aktuellen Aufruf gilt. So kann z.B. die ID=17 jetzt das Mail X und in einer Stunde das Mail Y sein (wegen Eingang, löschen, bearbeiten im Web-Interface usw.).

2. Die UID ist dagegen immer eindeutig und damit sicherer.

3. Mit der Funktion "GetUID" kann die UID aus der ID ermittelt werden. Ansonsten gibt es für fast alle ID-Funktionen ein Gegenstück mit UID (UIDDeleteMsgs, UIDRetrieveEnvelope usw.).

4. Allgemeine Anmerkung:
So schön und vielseitig Indy auch ist, es enthält leider viele Fehler, die man selber ausbügeln muss. Habe aber noch nichts besseres gefunden :-(

Viele
Grüsse


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz