Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Emails mit Lazarus und Synapse abrufen (https://www.delphipraxis.net/174144-emails-mit-lazarus-und-synapse-abrufen.html)

Privateer3000 6. Apr 2013 13:01

Emails mit Lazarus und Synapse abrufen
 
Hallo liebe Gemeinde :)
Ich benötige mal etwas Hilfe bei dem Abrufen von Emails.
Mittels Synapse und diesem Beispiel:
Ararat Pop3send
kann ich Emails abrufen.
Ziel ist es zu wissen wie viele Emails im Postfach liegen und die Betreffs auslesen.
Was ich nicht verstehe, wie ermittle ich die Anzahl und das auch nur von ungelesenen.

Hoffe ihr könnt mir etwas auf die Sprünge helfen.
Grüße

creed steiger 6. Apr 2013 13:37

AW: Emails mit Lazarus und Synapse abrufen
 
steht doch in der Doku

http://de.wikipedia.org/wiki/Post_Of...ocol#Kommandos

http://synapse.ararat.cz/doc/help/po...TPOP3Send.html

http://www.ietf.org/rfc/rfc1939.txt

gelesen/ungelesen gibt es bei Pop meines Wissens nicht,das wird nur von den Clients/Webmailer nachträglich angeflanscht.(afaik)

Privateer3000 6. Apr 2013 14:23

AW: Emails mit Lazarus und Synapse abrufen
 
Vielen Dank,
die Anzahl liest es nun korrekt aus.
Da ich keine Funktion gefunden habe die den Betreff gezielt
ausgibt muss das aus dem FullResult geholt werden.
Oder gibt es doch einen Trick?

Grüße
und Dank!

creed steiger 6. Apr 2013 14:40

AW: Emails mit Lazarus und Synapse abrufen
 
top?

Privateer3000 6. Apr 2013 15:07

AW: Emails mit Lazarus und Synapse abrufen
 
Das habe ich probiert.
Aber damit wird nicht gezielt eine Zeile herausgesucht.
Bei mir zeigt es trotzdem alle Zeilen an.
Delphi-Quellcode:
pop.AuthType:=POP3AuthAll;
    pop.login;
    pop.stat;
    msgc:=pop.StatCount;
    pop.list(0);
    pop.Retr(1);
    pop.Top(1,2);
    memo1.lines.Assign(pop.FullResult);
    msgcount.Caption:=IntToStr(msgc);

Privateer3000 8. Apr 2013 09:16

AW: Emails mit Lazarus und Synapse abrufen
 
Im Moment hab ich das so gelöst:
Delphi-Quellcode:
pop.AuthType:=POP3AuthAll;
    pop.login;
    pop.stat;
    msgc:=pop.StatCount;
    pop.list(0);
    pop.Retr(1);
    //pop.Top(1,0);
    //memo1.lines.Assign(pop.FullResult);
    //msgid:=findmsg(pop.FullResult,'Subject:');
    msgtext.Caption:=pop.FullResult.Strings[19];
    msgcount.Caption:=IntToStr(msgc);
    //pop.Dele(1);
    pop.logout;
Im Index 19 befindet sich bei meinen Testmails das Subject.
Kann man sich darauf verlassen oder ändern sich die Header, je nach Provider?

Das auskommentierte 'findmsg' ist eine Funktion die in der Stinglist
den String 'Subject:' finden soll und den Index zurückliefert.
Funktioniert aber irgendwie nicht...

Delphi-Quellcode:
function findmsg(const AStrings: TStrings; const AText: String;
  CaseFlag: Boolean=False): Integer;
var
  I, C: Integer;
begin
  Result := AStrings.IndexOf(AText);
  if CaseFlag then
  begin
    C := Result;
    Result:=-1;
    for I:=C to AStrings.Count-1 do
      if AText=AStrings[I] then
      begin
        Result:=I;
        Break;
      end;
  end;
end;
Dann hätte ich auf jeden Fall den richtigen Index.
Kann mir jemand einen Tipp geben?
Grüße

DeddyH 8. Apr 2013 09:25

AW: Emails mit Lazarus und Synapse abrufen
 
Bist Du sicher, dass da nur "Subject:" in der Zeile steht? Oder ist es eher so, dass sie mit "Subject:" beginnt? Im letzteren Fall passen die Vergleiche nicht (IIRC prüft IndexOf auf Gleichheit, weiter unten tust Du es selbst auch).

Privateer3000 8. Apr 2013 10:23

AW: Emails mit Lazarus und Synapse abrufen
 
Danke DeddyH
daran hatte ich nicht gedacht.
also müsste ein Platzhalter dafür sorgen das die Zeile gefunden wird?!

Grüße und Danke!

DeddyH 8. Apr 2013 10:29

AW: Emails mit Lazarus und Synapse abrufen
 
Ich würde es ungefähr so versuchen (ungetestet):
Delphi-Quellcode:
function findmsg(const AStrings: TStrings; const AText: String;
  CaseFlag: Boolean=False): Integer;
var
  i: integer;
begin
  Result := -1;
  for i := 0 to AStrings.Count - 1 do
    if (not CaseFlag and AnsiStartsText(AText, AStrings[i]))
      or AnsiStartsStr(AText, AStrings[i]) then
      begin
        Result := i;
        break;
      end;
end;
Die AnsiStartsXXX-Funktionen sind in Delphi in der Unit StrUtils zu finden, ob es in Lazarus Entsprechungen gibt, weiß ich leider nicht.

Sir Rufo 8. Apr 2013 11:07

AW: Emails mit Lazarus und Synapse abrufen
 
Gibt es einen Grund, warum du nicht TMimeMess benutzt?
Da kannst du dir den ganzen Zirkus sparen.

(Gesamten) Header holen
Bei TMimeMess in Lines packen
TMimeMess.DecodeMessage


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Seite 1 von 2  1 2      

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