Delphi-PRAXiS

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

Privateer3000 9. Apr 2013 16:54

AW: Emails mit Lazarus und Synapse abrufen
 
Zitat:

Zitat von DeddyH (Beitrag 1210511)
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.

Vielen Dank Deddy, diese Methode funktioniert und ist auch im Lazarus enthalten.
Danke!

Privateer3000 9. Apr 2013 16:59

AW: Emails mit Lazarus und Synapse abrufen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1210518)
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

Das sieht in der Tat interessant aus.
Allerdings blicke ich da nicht durch,
so viele Methoden, mit so wenig Beschreibung.
Hast du nen Tipp für mich?

Danke und Grüße

Sir Rufo 9. Apr 2013 17:15

AW: Emails mit Lazarus und Synapse abrufen
 
Zitat:

Zitat von Privateer3000 (Beitrag 1210850)
Zitat:

Zitat von Sir Rufo (Beitrag 1210518)
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

Das sieht in der Tat interessant aus.
Allerdings blicke ich da nicht durch,
so viele Methoden, mit so wenig Beschreibung.
Hast du nen Tipp für mich?

Danke und Grüße

Bei den Quellen die ich benutze ist die Doku im Quelltext und auf der Website ist auch eine Klassenreferenz.
Und Demos gibt es auch noch da.

Was vermisst du?

Privateer3000 9. Apr 2013 19:41

AW: Emails mit Lazarus und Synapse abrufen
 
Hallo
ich kann deinen Gedanken nicht folgen.
Zitat:

(Gesamten) Header holen
Bei TMimeMess in Lines packen
TMimeMess.DecodeMessage
Da ich mit solchen Dinges nie zu tun hatte.
Gesamten Header holen - ok
TMimemess in lines packen - also in TStrings auch ok
DecodesMessage - in was und was mache ich damit?
Ich möchte nur die Subject Zeile auslesen (ohne "Subject:")
Was passiert mittels DecodeMessage?
Zitat:

Decode message from Lines to MessagePart. Massage headers are parsed into Header object.
Danke für deine Hilfe
Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

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