SMTP / POP3 Client, eMail Encoder & Decoder
Verfasst: 24.08.2010 11:56
Das Projekt wird in http://forums.purebasic.com/german/view ... =8&t=23313 fortgeführt.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Bei solch größeren Projekten ist ein Testprogramm wichtig, das möglichst bequem und schnell einen Überblick vermittelt ... denn es gibt auch noch so viele andere interessante Programme zum Testen und zum Selbstschreiben.cptdark hat geschrieben:Das ganze ist als Include-Dateien realisiert; funktioniert unter 32 und 64 Bit; im ANSI und Unicode-Modus und müsste auch unter Linux funktionieren (evtl kann das mal jmd testen - Danke). Getestet bisher nur mit Win7 PB 4.51 RC2 x64 ANSI/Unicode.
Sicherlich sind noch einige Fehler drin - aber grundsätzliches Abrufen/Versenden/Erstellen/Zerlegen funktioniert. (mit GMX getestet)
Code: Alles auswählen
Global *msg, mailtext.s, htmlmailtext.s, *part, file.s
Code: Alles auswählen
PrintN("Drücken Sie [Enter] zum Beenden.")
Input()
Es werden Systemaufrufe benutzt, aber dieser Teil muss noch überarbeitet werden. Das ist noch Stand von vor fast 2 Jahren. Den RFC2822 werd ich mir dann mal anschauen - Danke.Warum ist z.B. die Prozedur ____MSG_ParseRFC822DateTime() für Windows und Linux unterschiedlich? Das sollte doch unabhängig vom OS sein, und sich nur nach dem RFC richten.
Aufbau eines Mailanhanges in Base 64: soweit mir bekannt ist einheitliche Zeilenlänge. Also wird erst die Zeilenlänge festgestellt (kann man ja nicht unbedingt fest voraussetzen) und dann werden im Prinzip lediglich alle CRLF's entfernt.Deine Pozedur ____MSG_DecodeBase64() scheint mir auf den ersten Blick ziemlich umständlich -- ich verstehe im Moment nicht, was sie macht bevor sie dann PureBasics Base64Decoder() aufruft.
Ok. Testprogramme folgenBei solch größeren Projekten ist ein Testprogramm wichtig, das möglichst bequem und schnell einen Überblick vermittelt ... denn es gibt auch noch so viele andere interessante Programme zum Testen und zum Selbstschreiben.Die meisten Benutzer sehen im Gegensatz zu Dir das Programm "test.pb" zum ersten Mal. Gut wären daher kurze Hinweise darauf was genau man gerade testet (z.B. im Falle CompilerIf #TEST_MAILENCODE), und ganz am Anfang des Quelltextes Konstanten oder Variablen, um die betr. Account- und Maildaten einzutragen.
Musst Du nicht, das war jetzt eigentlich nur für meine Testzwecke (v.a. auch da all-in-one). Und als Global deklariert sind sie v.a. deshalb, weil ich grundsätzlich mit EnableExplicit kompiliere.Müsste ich diese globalen Variablen auch verwenden, wenn ich Deine Funktionen in einem Programm benutzen will? Es wäre schön, mit weniger globalen Variablen auszukommen.Code: Alles auswählen
Global *msg, mailtext.s, htmlmailtext.s, *part, file.s
Gute Idee. Ist mir nicht aufgefallen, weil ich das immer direkt aus der Konsole starte. Da bleibt das Fenster ja immer offen. Und zum Debuggen nehm ich dann ja Debug in Massen.Die Konsolenausgabe von "test.pb" lässt sich schlecht lesen, weil sie schnell scrollt und die Konsole dann wieder verschwindet. Um das zu verhindern, sollte am Ende von "test.pb" etwas stehen wieCode: Alles auswählen
PrintN("Drücken Sie [Enter] zum Beenden.") Input()
Wird gemacht, ich habe erstmal die öffentlichen Funktionsaufrufe dokumentiert, damit die erstmal erklärt sind. Die Interna folgen.Es wäre außerdem hilfreich, wenn der Quelltext ausführlicher kommentiert wäre.
Das mache ich auch. Aber ich deklariere Variablen wann immer möglich mit Declare oder Protected statt mit Global, das erleichtert die Pflege gerade von großen Programmen.cptdark hat geschrieben:Und als Global deklariert sind sie v.a. deshalb, weil ich grundsätzlich mit EnableExplicit kompiliere.
Ich habe etwas bei stackoverflow gefunden. Der Output ist offenbar direkt im passenden Format.cptdark hat geschrieben:Hinweis: Datumsfunktionen für Linux sind noch nicht vorhanden, diese kommen in Version 0.3
Ich suche da noch eine Funktion (Linux API ?) um die Zeitzone zu ermitteln. Vielleicht hat da jemand eine Idee?
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
Procedure.s SystemTimezone()
Protected p, ret$=""
p = RunProgram("date", "+%z", "", #PB_Program_Open | #PB_Program_Read)
If p
ret$ = ReadProgramString(p)
CloseProgram(p)
EndIf
ProcedureReturn ret$
EndProcedure
CompilerEndIf
Debug SystemTimezone()
Vielen Dank, habe das mal in die 0.2.1 übernommen, aber noch nicht getestet. Die Umkehrfunktion dazu fehlt ja auch noch.Nino hat geschrieben: Ich habe etwas bei stackoverflow gefunden. Der Output ist offenbar direkt im passenden Format....