Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Probleme mit einem Spammmfilter
Bethsoftfan - So 06.04.08 15:04
Titel: Probleme mit einem Spammmfilter
Wir haben mal wieder eine Frage :P
Wir schreiben an einem Spammfilter, aber der scheint Fehler zu beinhalten. . .
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| procedure TFrmMain.BtMaillisteClick (Sender: TObject); begin if (zZustand = cBereit) then Pop3Client.Socket.SendText ('LIST' + Chr(13) + Chr(10)) else MemStatus.Lines.Add ('Status: Client nicht bereit'); end; procedure TFrmMain.BtHolenClick (Sender: TObject); var i,j,k : integer; s,x : string; begin if (zZustand = cBereit) then begin if IdPop31.CheckMessages > 0 then begin Pop3Client.Socket.SendText ('RETR'); For i := 1 to IDPop31.CheckMessages do begin IDMessage1.Clear; IDpop31.Retrieve(i,IDMessage1);
s := '*popo*'; For j := 0 to length(s) do begin For k := 0 to length(s) do begin x := Copy(s,0, i-1) +uppercase(Copy(s, i, j))+ Copy(s,i+1,length(s)); if Pos(x, IdMessage1.Subject) > 0 then begin Listview2.Items.Add.Caption := IdMessage1.Subject; Listview2.Items[i-1-Listview1.Items.Count].SubItems.Add(IDMessage1.From.Address); Listview2.Items[i-1-Listview1.Items.Count].SubItems.Add(DateToStr(IDMessage1.Date)); end else begin Listview1.Items.Add.Caption := IdMessage1.Subject; Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(DateToStr(IDMessage1.Date)); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IDMessage1.From.Address); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IntToStr(IDpop31.RetrieveMsgSize(i) div 1024)+'kb'); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IdMessage1.MsgId); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IdMessage1.Body.Text); end; end; end; end; end; end; end; |
Hier haben wir 2 Probleme :
1) Die Spamms erscheinen in dem ListView für die normalen Mails
und
2) Jede der Emails werden so oft da gestellt, wie die Schleife durch läuft, also ziemlich lange :cry:
Danke für Hilfe!
Bethsoftfan - Do 10.04.08 18:01
sry, muss pushen!
Wir habens immer noch nicht! :cry:
Christian S. - Fr 11.04.08 11:49
Titel: Re: Probleme mit einem Spammmfilter
Hallo!
Hier erstmal der Quelltext in lesbarer Form, also richtig formatiert ;-)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| procedure TFrmMain.BtMaillisteClick (Sender: TObject); begin if (zZustand = cBereit) then Pop3Client.Socket.SendText ('LIST' + Chr(13) + Chr(10)) else MemStatus.Lines.Add ('Status: Client nicht bereit'); end; procedure TFrmMain.BtHolenClick (Sender: TObject); var i,j,k : integer; s,x : string; begin if (zZustand = cBereit) then begin if IdPop31.CheckMessages > 0 then begin Pop3Client.Socket.SendText ('RETR'); For i := 1 to IDPop31.CheckMessages do begin IDMessage1.Clear; IDpop31.Retrieve(i,IDMessage1);
s := '*popo*'; For j := 0 to length(s) do begin For k := 0 to length(s) do begin x := Copy(s,0, i-1) +uppercase(Copy(s, i, j))+ Copy(s,i+1,length(s)); if Pos(x, IdMessage1.Subject) > 0 then begin Listview2.Items.Add.Caption := IdMessage1.Subject; Listview2.Items[i-1-Listview1.Items.Count].SubItems.Add(IDMessage1.From.Address); Listview2.Items[i-1-Listview1.Items.Count].SubItems.Add(DateToStr(IDMessage1.Date)); end else begin Listview1.Items.Add.Caption := IdMessage1.Subject; Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(DateToStr(IDMessage1.Date)); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IDMessage1.From.Address); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IntToStr(IDpop31.RetrieveMsgSize(i) div 1024)+'kb'); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IdMessage1.MsgId); Listview1.Items[i-1-Listview2.Items.Count].SubItems.Add(IdMessage1.Body.Text); end; end; end; end; end; end; end; |
Nun zu Eurem Problem: Wenn ich das richtig sehe, sind die j- und die k-Schleife dazu da, jede Kombination aus Groß- und Kleinschriebung zu erkennen. Das Problem dabei ist, wenn im Betreff steht "PoPo", dann wird die Mail bei "popo" nicht als Spam erkannt und in die normalen Mails eingefügt, genauso bei "pOPO", "Popo", etc.
Ihr könnt aber viel einfacher vorgehen. Die Schleifen könnt Ihr Euch sparen, wenn Ihr es so macht:
Delphi-Quelltext
1: 2: 3: 4:
| lowerSubject := lowercase(IdMessage1.Subject); lowerX := lowercase(x); if Pos(lowerX, lowerSubject) > 0 then |
Ihr prüft also, ob ein vollständiges kleines Wort im vollständig kleinen Betreff steht. Damit sind die j- und die k-Schleife hinfällig. Für komplizierte Prüfungen solltet Ihr Euch mal
TREGEXP ansehen.
Grüße
Christian :-)
Bethsoftfan - Sa 12.04.08 19:01
Ok, danke es funzt!
Achja, und happy birthday!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!