Autor |
Beitrag |
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 20.05.08 11:22
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:
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 public 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).
Einloggen, um Attachments anzusehen!
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 20.05.08 18:55
Was ist daran jetzt klein?
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Di 20.05.08 18:57
Luckie hat folgendes geschrieben: | Was ist daran jetzt klein? |
das Formular 
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 21.05.08 00:53
ZeitGeist87 hat folgendes geschrieben: | Luckie 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:
Einloggen, um Attachments anzusehen!
|
|
Der nette Nachbar
      
Beiträge: 67
Win XP, Suse Linux 9.3
Delphi 7, Delphi 2007, Borland C++ Builder 6, Java Builder 7
|
Verfasst: 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 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 21.05.08 09:08
damals war ich noch kein fähiger progger  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.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Der nette Nachbar
      
Beiträge: 67
Win XP, Suse Linux 9.3
Delphi 7, Delphi 2007, Borland C++ Builder 6, Java Builder 7
|
Verfasst: 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 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 21.05.08 13:12
Der 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 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Der nette Nachbar
      
Beiträge: 67
Win XP, Suse Linux 9.3
Delphi 7, Delphi 2007, Borland C++ Builder 6, Java Builder 7
|
Verfasst: Mi 21.05.08 13:22
|
|
|