Autor Beitrag
Bethsoftfan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Win XP, Linux OpenSuSE 10.3 mit Compiz Fusion :cool:
Delphi 2007 Prof. Delphi 5
BeitragVerfasst: So 06.04.08 15:04 
Wir haben mal wieder eine Frage :P

Wir schreiben an einem Spammfilter, aber der scheint Fehler zu beinhalten. . .

ausblenden volle Höhe 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  {Fehlerbehandlung ... }
      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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Win XP, Linux OpenSuSE 10.3 mit Compiz Fusion :cool:
Delphi 2007 Prof. Delphi 5
BeitragVerfasst: Do 10.04.08 18:01 
sry, muss pushen!

Wir habens immer noch nicht! :cry:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 11.04.08 11:49 
Hallo!

Hier erstmal der Quelltext in lesbarer Form, also richtig formatiert ;-)
ausblenden volle Höhe 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  {Fehlerbehandlung ... }
      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:
ausblenden 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 Suche in der Entwickler-Ecke TREGEXP ansehen.

Grüße
Christian :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bethsoftfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Win XP, Linux OpenSuSE 10.3 mit Compiz Fusion :cool:
Delphi 2007 Prof. Delphi 5
BeitragVerfasst: Sa 12.04.08 19:01 
Ok, danke es funzt!

Achja, und happy birthday!