Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IMAP schmiert bei 8993 Mails ab (https://www.delphipraxis.net/208547-imap-schmiert-bei-8993-mails-ab.html)

DelTurbo 13. Aug 2021 11:46


IMAP schmiert bei 8993 Mails ab
 
Hi,
ich habe ein Problem mit IMap. Ich möchte alle ungelesen Mails auf gelesen setzen. Leider finde ich nirgendwo wie ich das machen muss. Wie ich die UIDs von diesen Mails bekomme habe ich gefunden. Hier im Forum und im Netz. Ich hänge den Code mal hier dran.

Dann ist da noch ein Problem. Ich habe einen Mailserver wo 8993 Mails ungelesen sind. Wenn ich SetLength(SearchInfo, 1) setze dann schmiert er mit der Meldung 'Max line length exceeded.' ab. Setze ich SetLength(SearchInfo, 20000) dann läuft er zwar weiter aber ich bekomme keine ergebnisse. IMAPClient.MailBox.SearchResult ist leer.

Delphi-Quellcode:
procedure TestUnSeen(const UserName, Password,Host: string;var BodyTexts: TStringList);
var
  IMAPClient   :TIdIMAP4;
  SearchResult :TIdIMAP4SearchRecArray;
  OpenSSLHandler:TIdSSLIOHandlerSocketOpenSSL;
  SearchInfo   :TIdIMAP4SearchRecArray;
  msgID        :Integer;
  i            :Integer;

begin
    IMAPClient := TIdIMAP4.Create(nil);
    OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      OpenSSLHandler.SSLOptions.Method := sslvTLSv1_2;   // sslvSSLv3;
      IMAPClient.IOHandler:=OpenSSLHandler;
      IMAPClient.Host:=Host;
      IMAPClient.Port:=993;
      IMAPClient.UseTLS:=utUseImplicitTLS;
      IMAPClient.Username:=UserName;
      IMAPClient.Password:=Password;
      IMAPClient.Connect;
      if IMAPClient.SelectMailBox('INBOX') then begin
        SetLength(SearchInfo, 1);
        SearchInfo[0].SearchKey := skUnseen;
        IMAPClient.UIDSearchMailBox(SearchInfo);
        for i:=0 to High(IMAPClient.MailBox.SearchResult) do
        begin
          msgID := IMAPClient.MailBox.SearchResult[i];
          // Ich weiß nicht was ich hier machen muss....
        end;
      end;
    finally
      IMAPClient.Disconnect;
      OpenSSLHandler.Free;
      IMAPClient.Free;
    end;
end;
Nun zu meinen zwei Fragen. Wie setze ich die Mail auf gelesen? Warum klappt es nicht wenn 8993 Mails im Postfach sind (ungelesen).

Vielen dank im Voraus

DelTurbo 13. Aug 2021 12:14

AW: IMAP Mail auf gelesen setzen
 
Ups,
tut mir leid. Ich habe gemerkt das wenn man die Mail lädt die gelesen ist.

Delphi-Quellcode:
IMAPClient.UIDRetrieve(IntToStr(msgID),MsgObject);


Bleibt nur noch die Frage, warum schmiert der bei vielen Mails ab.

Union 13. Aug 2021 18:40

AW: IMAP schmiert bei 8993 Mails ab
 
Wo, wann und mit welcher Fehlermeldung erfolgt die Exception? Bei der wievielten Mail?

Klaus01 15. Aug 2021 05:23

AW: IMAP schmiert bei 8993 Mails ab
 
..wenn Du die for Schleife anders herum laufen Lassen würdest?
Grüsse
Klaus

Delphi.Narium 15. Aug 2021 10:54

AW: IMAP schmiert bei 8993 Mails ab
 
Hast Du Dir mal die IMAP-Demo unter https://github.com/IndySockets/Indy10Demos angeschaut?

Und dann mal die Beschreibung zur Fehlermeldung "Max line length exceeded" tidimap

Der Fehler hat nichts mit der Menge der Mails zu tun, sondern bezieht sich auf die Zeilenlänge einer einzelnen Mail.

Würde da mal zur Ursachenforschung innerhalb der For-Schleife noch 'ne Fehlerbehandlung einbauen, dann bestehen durchaus Aussichten, die fehlerverursachende Mail herauszufinden. Im schlimmsten Fall wird die fehlerverursachende Mail halt "einfach überlesen" ;-)

DelTurbo 16. Aug 2021 10:10

AW: IMAP schmiert bei 8993 Mails ab
 
Hi,
erstmal danke für die Antworten. Aber der Fehler passiert bei
Delphi-Quellcode:
IMAPClient.UIDSearchMailBox(SearchInfo);

Das heißt er kommt gar nicht zur Schleife.

Delphi-Quellcode:
High(IMAPClient.MailBox.SearchResult)

Selbst wenn das nicht passieren würde, wäre dieser Wert 0. Also selbst dann würde er die Schleife nicht durchlaufen. Setze ich SetLength(SearchInfo, 20000); dann kommt kein Fehler, aber der SearchResult wert bleibt 0.

Achso, Indy Version ist die 10.6.2.0

Delphi.Narium 16. Aug 2021 13:03

AW: IMAP schmiert bei 8993 Mails ab
 
Setze beim
Delphi-Quellcode:
OpenSSLHandler
den Wert für
Delphi-Quellcode:
MaxLineLength
bitte deutlich nach oben.
Delphi-Quellcode:
MaxLineAction
setzt Du bitte auf
Delphi-Quellcode:
maSplit
. Wird's damit besser?

DelTurbo 16. Aug 2021 13:16

AW: IMAP schmiert bei 8993 Mails ab
 
Hi, danke für den Tip. MaxLineLength habe ich nun auf 163840 (Original * 10) stehen. Und MaxLineAction auf masplit. Damit klappt es.

Vielen vielen dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 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