Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Checklistbox/Pop3 - Error Message ? (https://www.delphipraxis.net/40460-checklistbox-pop3-error-message.html)

c4st0rtr0y 16. Feb 2005 00:31


Checklistbox/Pop3 - Error Message ?
 
nabend,
also folgendes. schreib grad etwas an einem kleinem mail tool und habe folgendes prob. wenn ich meine mails abrufe (erstmal nur die header) und in eineChecklistbox schreiben möchte, bekomm ich jedesmal den fehler "ERR-Message Number out of range" und zusätzlich sind alle mails die einen Anhang beinhalten doppelt eingetragen. :/ weis nich mehr weiter hab scho div. sachen ausprobiert bzw hier geschaut aber nichts passendes gefunden.
Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var
i:integer;

begin
for i := 1 to pop1.MessageCount do
begin
pop1.RetrieveHeader(i, Message1);
checklistbox1.Items.Add(Message1.Subject);
Message1.Clear;

end;
end;
infos:
pop1 wäre die pop-kompo
message1 der parser
checklistbox1 = checklistbox
benutze eine kompo die der indy sehr ähnelt/CIS, an ders aber nicht liegt
delphi 7

ps: wäre es möglich das die checklistbox nur bestimmte mails anzeigt die z.b. das subject "News" enthalten bzw nen anhang besitzen?

thx 4 help + info

chris 16. Feb 2005 00:37

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

kann ich nicht soviel zu sagen, probier dochmal erstmal das, vllt zählen die cis komps ja anders:

Delphi-Quellcode:
for i := 0 to pop1.MessageCount - 1 do
Zitat:

ps: wäre es möglich das die checklistbox nur bestimmte mails anzeigt die z.b. das subject "News" [..]
sollte so klappen:
Delphi-Quellcode:
if Message1.Subject = 'News' then checklistbox1.Items.Add(Message1.Subject)
zum anhang kann ich dir nichts sagen weil ich nicht mit den komponenten arbeite.

c4st0rtr0y 16. Feb 2005 00:49

Re: Checklistbox/Pop3 - Error Message ?
 
thx,
also die fehlermessage kommt nicht mehr. allerdings wird die letzte mail nicht angezeigt und die mails mit anhang sind doppelt inner checklistbox :/

chris 16. Feb 2005 12:05

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

sind es die clever internet suite componenten? CIS oder ICS?

also das hier sollte eigentlich funktionieren:

Delphi-Quellcode:
for i := pop1.MessageCount - 1 down to 0 do
wieso nimmst du, wenn du D7 hast nicht einfach die indy?

c4st0rtr0y 16. Feb 2005 12:13

Re: Checklistbox/Pop3 - Error Message ?
 
ja genau die clever ... naja die indy kompo möchte soi garnicht auf mein gmail postfach zugreifen. das scheint wohl an indy zu liegen :/ würd auch sonst indy lieber nehmen da es viel mehr beispiele gibt da die kompos sich im code dann ja doch etwas unterscheiden. naja ich probier mal grad die sachen ;) thx

chris 16. Feb 2005 12:21

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

gmail .. naja ich denke dann liegt es an ssl, ohne das geht es nicht.


nochmal zu dem oben .. ich glaube ich weiss warum es nicht geht ..

mach es mal so:

MessageParser: TclMessageParser;

Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var i:integer;

begin
 for i := pop1.MessageCount -1 downto 0 do
  begin
   pop1.RetrieveHeader(i);
   checklistbox1.Items.Add(MessageParser.Subject)
  end
end;

c4st0rtr0y 16. Feb 2005 12:30

Re: Checklistbox/Pop3 - Error Message ?
 
hmm...ja bei den CIS iss halt SSL sehrschön integriert. also mit den verschiedenen beispielen da unten wie auch das aktuelle von dir (Chris) kommen die mails zwar wunderbar in die checkliste rein allerdings werden die mails die einen anhang besitzen und komischerweise nur die, doppelt eingetragen. ka woran das wohl liegen könnte. ich meine ist ja nicht so schlimm wenn man doppelte einfach rausfiltern könnte ?.


procedure TForm1.ffnen1Click(Sender: TObject);
var
i:integer;
begin
pop1.Server := labelededit1.Text;
pop1.Port := StrToInt(labelededit2.text);
pop1.UserName := labelededit3.Text;
pop1.Password := maskedit1.Text;
pop1.TimeOut := 20000;
pop1.UseSSL := true ;
pop1.Open;
//for i := 0 to pop1.MessageCount -1 do
//for i := pop1.MessageCount - 1 to 0 do
begin
for i := pop1.MessageCount -1 downto 0 do
begin
pop1.RetrieveHeader(i);
checklistbox1.Items.Add(Message1.Subject);
end;
end;
end;
//begin
//pop1.RetrieveHeader(i, Message1);
//if Message1.Subject = 'News vom 16.02.05' then checklistbox1.Items.Add(Message1.Subject);
//checklistbox1.Items.Add(Message1.Subject);
//Message1.Clear;
//end;
[/delphi]

chris 16. Feb 2005 12:45

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

du kannst das einfügen doppelter einträge im voraus verhindern.

z.b. hiermit:

Delphi-Quellcode:
if checklistbox1.Items.IndexOf(Message1.Subject) = -1 then checklistbox1.Items.Add(Message1.Subject);
ob das so im sinne des erfinders ist sei mal dahingestellt.


probier das mal, ich hab mich gerade mal etwas schlau gemacht:

Delphi-Quellcode:
checklistbox1.Items.AddObject(Message1.Subject, Pointer(i));

c4st0rtr0y 16. Feb 2005 12:51

Re: Checklistbox/Pop3 - Error Message ?
 
hm....funzt leider beides nüschte :( hat evtl. die checklistbox nen hauweg ? weil irgendwas stimmt da ja wohl net kann ja net sein das da allet doppelt kommt was nen anhang hat...

chris 16. Feb 2005 12:58

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

wa??

Delphi-Quellcode:
if checklistbox1.Items.IndexOf(Message1.Subject) = -1 then checklistbox1.Items.AddObject(Message1.Subject, Pointer(1))
MUSS klappen!

c4st0rtr0y 16. Feb 2005 13:03

Re: Checklistbox/Pop3 - Error Message ?
 
ahhhh genau ;) damit gehts prima thx!!!
dann blieb nur noch die frage wie ich die mails filtern kann (wie ich vorhin ja scho beschrieben hatte) das würde wohl gehen mit dem
Delphi-Quellcode:
if Message1.Subject = 'News' then checklistbox1.Items.Add(Message1.Subject)
allerdings hat ja die mail nur die

anfangsbustaben News dann kommt nen datum und ggf noch uhrzeit usw. kann man da mit wildcards arbeiten spriche

Delphi-Quellcode:
if Message1.Subject = 'News*' then checklistbox1.Items.Add(Message1.Subject)
hm...klapt jedenfalls nicht bei mir wenn ich da sso eingebe

chris 16. Feb 2005 13:08

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

na super, dann haben wir es ja fast :)

dann noch den rest:

Delphi-Quellcode:
if copy(Message1.Subject, 0, 4) = 'News' then

um das zu komplettieren:

Delphi-Quellcode:
if (checklistbox1.Items.IndexOf(Message1.Subject) = -1) AND (copy(Message1.Subject, 0, 4) = 'News') then checklistbox1.Items.AddObject(Message1.Subject, Pointer(1))

c4st0rtr0y 16. Feb 2005 13:21

Re: Checklistbox/Pop3 - Error Message ?
 
das funzelt ja wunderbar!!
if copy(Message1.Subject, 0, 4) = 'News' then <-- ich nehme mal an die 0, 4 bedeutet quasi jede mail die die anfangsbustaben 0-4aus 'text' enthält....könnte also auch 'News:' nehmen und anstatt der 4 ne 5 reinsetzen oder? ;)
hab ich ja doch was gelernt hehe.

vieleicht noch zuletzt, da ich die mails ja nun inner checkbox habe würde ich gerne (davon ausgegangen das die mails alle nen anhang haben -> pdf bzw doc) würd ich gerne die markierten mailanhänge in einen vorher definierten ordner speichern (z.b. C:\Morgenpost) ist das auch möglich? dann wärs aber alles fertig *g

chris 16. Feb 2005 13:44

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

Zitat:

if copy(Message1.Subject, 0, 4) = 'News' then <-- ich nehme mal an die 0, 4 bedeutet quasi jede mail die die anfangsbustaben 0-4aus 'text' enthält....könnte also auch 'News:' nehmen und anstatt der 4 ne 5 reinsetzen oder?
hab ich ja doch was gelernt hehe.
jupp, siehe OH: copy()

Zitat:

vieleicht noch zuletzt, da ich die mails ja nun inner checkbox habe würde ich gerne (davon ausgegangen das die mails alle nen anhang haben -> pdf bzw doc) würd ich gerne die markierten mailanhänge in einen vorher definierten ordner speichern (z.b. C:\Morgenpost) ist das auch möglich? dann wärs aber alles fertig *g
ja das ist möglich, klar

sollte in etwa so gehen (ungetestet):

Delphi-Quellcode:
procedure TForm1.clMessageParser1GetBodyStream(Sender: TObject;
   ABody: TclMessageBody; const AFileName: String; var AStream: TStream;
   var Handled: Boolean);
var att_path: string;
begin
   att_path := 'c:\morgenpost';
   forcedirectories(att_path);
   AStream := TFileStream.Create(att_path +'\'+ afilename, fmCreate)
end;
guck doch einfach mal hier nach:

http://www.clevercomponents.com/prod...suitehowto.asp

c4st0rtr0y 16. Feb 2005 13:54

Re: Checklistbox/Pop3 - Error Message ?
 
danke für die info ;)
leider versteh ich das nicht so gaaanz...also ich wollte das in nen klickereignis packen angenommen ich ruf meine news ab und klick inner checklist die beiden neusten an und klick dann auf "Download" quasi. dann sollte er die ja in den morgenpost-ordner speichern, allerdings nur das jeweilige attachment.

Delphi-Quellcode:
procedure TForm1.clMessage1GetBodyStream(Sender: TObject;
   ABody: TclMessageBody; const AFileName: String; var AStream: TStream;
   var Handled: Boolean);

var att_path: string;

begin
   att_path := 'c:\morgenpost';
   forcedirectories(att_path);
   AStream := TFileStream.Create(att_path +'\'+ afilename, fmCreate);
end;
so hab ich das in des ereignis des MessageParsers übernommen. kann ich das dann über nen buttonklick aufrufen inklusive übergabe der markierten mails damit er nicht alle läd oder?

chris 16. Feb 2005 14:19

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

erstmal musst du dir die gecheckten mails besorgen, du hast ja bis jetzt nur die header

das würde dann so aussehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  with CheckListBox1 do
  begin
    if Items.Count = 0 then Exit;
    for i := 0 to Items.Count - 1 do if Checked[i] then pop1.retrieve(i)
  end
end;
nun hast du aber ein problem, da du nicht weisst ob i auch der messagenummer auf dem server entspricht.
du hast ja die doppelten einträge nicht in die checkbox übernommen.

du solltest die message nummer (TForm1.ffnen1Click -> i) zwischenspeichern, um hinterher auch zu wissen welche message du abholen willst.

außerdem weißt du nicht ob schon neue mails im postfach liegen die du noch nicht in der checklistbox hast.

c4st0rtr0y 16. Feb 2005 14:28

Re: Checklistbox/Pop3 - Error Message ?
 
ah jetzt wird mir das klar....hmm....gibt da nicht evtl. ne möglichkeit bzw ne nummer/name whatever um jede mail genaustens zu identifizieren ? also weis nicht hab was von wegen uidl oder so? gelesen gehabt. hmmm.....

chris 16. Feb 2005 14:35

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

am besten du lädst dir das mal hier runna und guckst es dir an:

clevercomponents MailClient demo

ich kann dir da leider nicht so gut helfen weil ich nicht mit cis arbeite.

c4st0rtr0y 16. Feb 2005 14:38

Re: Checklistbox/Pop3 - Error Message ?
 
oki ;) danke schonmal für die ganze hilfe. das beispiel schau ich mir dann mal an hoffe da findet sich was inner source. vieleicht hat ja noch jemand nen tippchen wie das mit dem message identifizieren vonstattengeht damit man auch die richtige bekommt. dankö, thx, gracie

chris 16. Feb 2005 14:54

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

na das zwischenspeichern und auslesen sollte ja mit ner stringlist kein problem sein

vereinfacht:

Delphi-Quellcode:
 str.add(inttostr(i)) //schreiben der messagenummer bei TForm1.ffnen1Click
 strtoint(str.strings[i]) //lesen der messagenummer bei TButton2Click
denke daran das du bei for .. to add benutzt und bei for .. downto insert, sonst stimmt die
reihenfolge nicht

c4st0rtr0y 16. Feb 2005 16:59

Re: Checklistbox/Pop3 - Error Message ?
 
uhm...wo pack ich das denn genau dazwischen?
str.add(inttostr(i)) //schreiben der messagenummer bei TForm1.ffnen1Click

Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
....etc.
begin
for i := pop1.MessageCount -1 downto 0 do
  begin

   pop1.RetrieveHeader(i);
   if (checklistbox1.Items.IndexOf(Message1.Subject) = -1) AND (copy(Message1.Subject, 0, 4) = 'NEWS') then    
   checklistbox1.Items.AddObject(Message1.Subject, Pointer(1));

end;
end;
end;
hm....
strtoint(str.strings[i]) //lesen der messagenummer bei TButton2Click

Delphi-Quellcode:
procedure TForm1.BitBtn2Click(Sender: TObject);
var i: integer;
begin
  with CheckListBox1 do
  begin
    if Items.Count = 0 then Exit;
    for i := 0 to Items.Count - 1 do if Checked[i] then pop1.retrieve(i);
  end;
end;
for .. to add benutzt und bei for .. downto insert <-- zwischen z.b. for i := pop1.MessageCount -1 downto 0 do ? da klappt des irgendwie net, muss ich vorher auch definieren (var str....?)

chris 16. Feb 2005 17:16

Re: Checklistbox/Pop3 - Error Message ?
 
hi,

*g* ok

z.b.

Delphi-Quellcode:
public
var str: TStringlist;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  str := TStringlist.Create
end;
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  str.Free
end;

Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var I: integer;
begin
  try
    str.Clear;
    for I := pop1.MessageCount - 1 downto 0 do
      begin
        pop1.RetrieveHeader(I);
        if (checklistbox1.Items.IndexOf(Message1.Subject) = -1) and (Copy(Message1.Subject, 0, 4) = 'NEWS') then
          begin
            checklistbox1.Items.AddObject(Message1.Subject, Pointer(1));
            str.Insert(0, IntToStr(I));
          end
      end
  except
  end
end;
Delphi-Quellcode:
procedure TForm1.BitBtn2Click(Sender: TObject);
var I: integer;
begin
  try
    with checklistbox1 do
      begin
        if Items.Count = 0 then Exit;
        for I := 0 to Items.Count - 1 do
          if checked[I] then pop1.retrieve(StrToInt(str.Strings[I]))
      end
  except
  end
end;

c4st0rtr0y 16. Feb 2005 17:37

Re: Checklistbox/Pop3 - Error Message ?
 
besten dank! da kann ich mir jetzt schön die Form dekorieren und noch ein paar sachen einfügen ;) und vor allem das verstehen lernen. danke nochmal!
mfg


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