![]() |
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:
infos:
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; 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 |
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:
Delphi-Quellcode:
zum anhang kann ich dir nichts sagen weil ich nicht mit den komponenten arbeite.
if Message1.Subject = 'News' then checklistbox1.Items.Add(Message1.Subject)
|
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 :/ |
Re: Checklistbox/Pop3 - Error Message ?
hi,
sind es die clever internet suite componenten? CIS oder ICS? also das hier sollte eigentlich funktionieren:
Delphi-Quellcode:
wieso nimmst du, wenn du D7 hast nicht einfach die indy?
for i := pop1.MessageCount - 1 down to 0 do
|
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
|
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; |
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] |
Re: Checklistbox/Pop3 - Error Message ?
hi,
du kannst das einfügen doppelter einträge im voraus verhindern. z.b. hiermit:
Delphi-Quellcode:
ob das so im sinne des erfinders ist sei mal dahingestellt.
if checklistbox1.Items.IndexOf(Message1.Subject) = -1 then checklistbox1.Items.Add(Message1.Subject);
probier das mal, ich hab mich gerade mal etwas schlau gemacht:
Delphi-Quellcode:
checklistbox1.Items.AddObject(Message1.Subject, Pointer(i));
|
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...
|
Re: Checklistbox/Pop3 - Error Message ?
hi,
wa??
Delphi-Quellcode:
MUSS klappen!
if checklistbox1.Items.IndexOf(Message1.Subject) = -1 then checklistbox1.Items.AddObject(Message1.Subject, Pointer(1))
|
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:
allerdings hat ja die mail nur die
if Message1.Subject = 'News' then checklistbox1.Items.Add(Message1.Subject)
anfangsbustaben News dann kommt nen datum und ggf noch uhrzeit usw. kann man da mit wildcards arbeiten spriche
Delphi-Quellcode:
hm...klapt jedenfalls nicht bei mir wenn ich da sso eingebe
if Message1.Subject = 'News*' then checklistbox1.Items.Add(Message1.Subject)
|
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))
|
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 |
Re: Checklistbox/Pop3 - Error Message ?
hi,
Zitat:
Zitat:
sollte in etwa so gehen (ungetestet):
Delphi-Quellcode:
guck doch einfach mal hier nach:
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; ![]() |
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:
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?
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; |
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:
nun hast du aber ein problem, da du nicht weisst ob i auch der messagenummer auf dem server entspricht.
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; 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. |
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.....
|
Re: Checklistbox/Pop3 - Error Message ?
hi,
am besten du lädst dir das mal hier runna und guckst es dir an: ![]() ich kann dir da leider nicht so gut helfen weil ich nicht mit cis arbeite. |
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
|
Re: Checklistbox/Pop3 - Error Message ?
hi,
na das zwischenspeichern und auslesen sollte ja mit ner stringlist kein problem sein vereinfacht:
Delphi-Quellcode:
denke daran das du bei for .. to add benutzt und bei for .. downto insert, sonst stimmt die
str.add(inttostr(i)) //schreiben der messagenummer bei TForm1.ffnen1Click
strtoint(str.strings[i]) //lesen der messagenummer bei TButton2Click reihenfolge nicht |
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:
hm....
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; strtoint(str.strings[i]) //lesen der messagenummer bei TButton2Click
Delphi-Quellcode:
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....?)
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; |
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; |
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