Entwickler-Ecke

Open Source Projekte - Der kleinste Mail-Checker der Welt


Xion - Di 20.05.08 11:22
Titel: Der kleinste Mail-Checker der Welt
Hi,

hier ein winzig kleines Projekt, dass ich schon vor langem mal gemacht habe.

Aufgabe:
Startet man das Programm, gibt es die Mails im Posteingang an.

Dateistruktur:
Das Programm besteht aus 3 Dateien:
MailChecker.exe
MC-Dates.txt Datei für Accountzugänge
MC-Spam.txt Datei für Spam-Filter

alle Dateien müssen im gleichen Ordner liegen


MC-Dates.txt
1:
2:
3:
4:
5:
6:
7:
8:
9:
pop3.web.de    //Host
110              //Port
Max_Mustermann   //UserName
MyPassword       //Password
pop3.web.de      //Host
110              //Port
Arno_Nymous      //UserName
ArnosPasswort   //Password
[...]



MC-Spam.txt
1:
2:
3:
web.de informiert //web.de Spam
web.de hilft //
[...]



Spam-Filter:
Der SpamFilter meldet, falls ein in "MC-Spam.txt" angegebener Text gefunden wurde. Es folgt eine Nachfrage, ob diese Mail gelöscht werden soll.

Source-Code:

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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdPOP3, IdMessage,
  StdCtrls;

type
  TForm1 = class(TForm)
    NMPOP3: TIdPOP3;
    IdMessage1: TIdMessage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type TEmail=record
  Host,Port,UserName,Password: String;
end;

var
  Form1: TForm1;
  EMail: array of TEmail;
  Spam: array of String;


implementation

{$R *.dfm}


function ExtractPath (Path:String) : String;
begin
Result:='';
while Length(Path)>0 do
  begin
    Result:=Result+Copy(Path,1,Pos('\',Path));
      if Pos('\',Path)=0 then
        Path:='';

    Delete(Path,1,Pos('\',Path));
  end;
end;

procedure LoadDates;
var TextFile: Text;  S: string;  A: integer;
begin
 Assign(TextFile,ExtractPath(Application.ExeName)+'MC-Dates.txt');
 Reset(TextFile);
 A:=0;
 while not EoF(TextFile) do
   begin
     SetLength(EMail,A+1);
     ReadLn(TextFile,S);
     EMail[A].Host:=Trim( Copy( S, 1,Pos('//',S)-1 ) );
     ReadLn(TextFile,S);
     EMail[A].Port:=Trim( Copy( S, 1,Pos('//',S)-1 ) );
     ReadLn(TextFile,S);
     EMail[A].UserName:=Trim( Copy( S, 1,Pos('//',S)-1 ) );
     ReadLn(TextFile,S);
     EMail[A].Password:=Trim( Copy( S, 1,Pos('//',S)-1 ) );    
     A:=A+1;
   end;
 Close(TextFile);

 Assign(TextFile,ExtractPath(Application.ExeName)+'MC-Spam.txt');
 Reset(TextFile);
 A:=0;
 while not EoF(TextFile) do
   begin
     SetLength(Spam,A+1);
     ReadLn(TextFile,S);
     Spam[A]:=Trim( Copy( S, 1,Pos('//',S)-1 ) );
     A:=A+1;
   end;
 Close(TextFile);
end;


procedure TForm1.FormCreate(Sender: TObject);
var countMails: integer; Deleted: boolean;  A,B,C: integer;  S,OutPut: string;
begin
try

 OutPut:='';
 Application.ShowMainForm:=False;
 if FileExists(ExtractPath(Application.ExeName)+'MC-Dates.txt'then
  begin
   LoadDates;
   for A:=0 to Length(EMail)-1 do
    begin
     S:='';
     NMPOP3.Host := EMail[A].Host;
     NMPOP3.Port := strtoint(EMail[A].Port);
     NMPOP3.UserName := EMail[A].UserName;
     NMPOP3.Password := EMail[A].Password;
     NMPOP3.Connect;                 
     countMails := NMPOP3.CheckMessages;
     for B:= 1 to countMails do
      begin      
       Deleted:=False;
       NMPOP3.RetrieveHeader(B, Form1.IdMessage1);
       for C:= 0 to Length(Spam)-1 do
        if Pos(Spam[C],ansilowercase(Form1.IdMessage1.From.Text))>0 then
          if MessageDlg('Spam ('+Form1.IdMessage1.Subject+' von '+Form1.IdMessage1.From.Text+') löschen?',mtInformation,[mbYes,mbNo],0)=mrYes then
           begin
            NMPOP3.Delete(B);
            Deleted:=True;
           end;

       if Deleted=False then

        S:=S+' -'+IdMessage1.Subject+' ('+Form1.IdMessage1.From.Text+')'+#13;
      end;

     countMails := NMPOP3.CheckMessages;
     OutPut:=OutPut+EMail[A].UserName+': '+inttostr(NMPOP3.CheckMessages)+#13;
     OutPut:=OutPut+S;

     NMPOP3.DisConnect;
     end
   end
 else
  ShowMessage('Datei nicht gefunden: MC-Dates.txt');

 if Trim(OutPut)<>'' then
  ShowMessage(OutPut);
except
 ShowMessage('Es ist ein Fehler bei der Verbindung aufgetreten. Überprüfen Sie Ihre Angaben!');
end;


 Application.Terminate;
end;

end.


Anmerkung:
Da die Daten im Klartext vorliegen, ist dieses Programm nicht sonderlich sicher. Ich weiß, es wäre überhaupt kein Problem, das zu verschlüsseln, aber ich hab atm keine Zeit und für mich persönlich ist das auch ziemlich uninteressant. Aber da es open Source ist, könnt ihr gerne etwas am Code rumbauen. Diese Version im 1.Post ist jedoch die offizielle von mir. Für andere bin ich nicht verantwortlich.

Das Programm ist schon seit Jahren im Einsatz und funktioniert einwandfrei (Win 2k und Win XP).


Delete - Di 20.05.08 18:55

Was ist daran jetzt klein?


ZeitGeist87 - Di 20.05.08 18:57

user profile iconLuckie hat folgendes geschrieben:
Was ist daran jetzt klein?


das Formular ;-)


Delete - Mi 21.05.08 00:53

user profile iconZeitGeist87 hat folgendes geschrieben:
user profile iconLuckie hat folgendes geschrieben:
Was ist daran jetzt klein?


das Formular ;-)


Ha,ha. Das Formular ist bei mir RIESIG (höher als die Bildschirmhöhe !!!), weil es ALLE Emails anzeigt - nicht nur die ungelesenen, wie ich es erwartet hätte...
Wie kann man das filtern?

Eine UTF-Konvertierung wäre auch nicht schlecht!

So sollte es sein:


Der nette Nachbar - Mi 21.05.08 08:58

Eigentlich ist das DIng gerade mal hingeklatscht, kaum irgentwelche Absicherung oder sonst was.
Völlig anfällig auf Fehler, kaum was stimmt nicht schon klappt es nicht. Keine Fehlermeldungen, von Korrekturen schon gar nicht zu sprechen.
Also ne Arbeit von etwa ner halben Stunde für einen fähigen Progger


Xion - Mi 21.05.08 09:08

damals war ich noch kein fähiger progger :lol: ich versteh garnicht was ihr alle macht, bei mir gehts prima...ok, ich verwende parallel Thunderbird, der löscht ja die Mails aufm Server, wenn ich sie abrufe. Früher hab ich immer die Mails gelöscht oder sie ins Archiv geschoben.


Der nette Nachbar - Mi 21.05.08 11:26

Also wenn ich mir dein Programm so anschaue, hat es eine gewisse Ähnlichkeit mit Microsoft, im Hause klappt alles, draussen nur Fehlermeldungen und Abstürze.
Bewerbe dich mal bei MS, die werden dich sich mit offenen Armen empfangen und gleich ein Chef Entwickler Gehalt anbieten. xD


Xion - Mi 21.05.08 13:12

user profile iconDer nette Nachbar hat folgendes geschrieben:

Bewerbe dich mal bei MS, die werden dich sich mit offenen Armen empfangen und gleich ein Chef Entwickler Gehalt anbieten. xD

boah wie fies :evil:


Der nette Nachbar - Mi 21.05.08 13:22

user profile iconDer nette Nachbar hat folgendes geschrieben:
user profile iconXion hat folgendes geschrieben:
user profile iconDer nette Nachbar hat folgendes geschrieben:

Bewerbe dich mal bei MS, die werden dich sich mit offenen Armen empfangen und gleich ein Chef Entwickler Gehalt anbieten. xD

boah wie fies :evil:

Nimm es nicht so schwer...jeder fängt mal klein an xD