SMTP / POP3 Client, eMail Encoder & Decoder

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von cptdark »

Hallo...

so, habe jetzt alle bisherigen Funktionen ausser POP3 unter Linux (Ubuntu 10.04 x64) erfolgreich getestet. Die Datumskonvertierung unter Linux funktioniert nun auch, und die Windows-Version wurde verbessert.
Danke nochmal an Nino für den Tipp mit "date" - funktioniert prima.

Nachtrag: der selbe Fehler aus SMTP steckte auch in POP3 drin - ist jetzt behoben
Test mit der PB Final 4.51 erfolgreich (Win7 x64).
Zuletzt geändert von cptdark am 27.11.2012 22:51, insgesamt 1-mal geändert.
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von jpd »

Hallo cptdark,

erstmal vielen dank für diese hervorragende awemail 0.3.1 (include)
habe einige test gemacht und ich muss sagen beeindruckend.

da für POP 3 nur ein beispiel vorliegt habe ich diesen weiteren beispiel zusammengestellt.

anhand diesen kleinen beispiel werden folgende schritte ausgeführt:

anzeigen:
nummer der zu abzurufende mail auf den server
header ansehen
abholen:
mail abgeholt und in Datei (eml) gespeichert
mail auf den server gelöscht

natürlich werden dafür gültige anmelde informationen erwartet.

Ciao
jpd
P.S getestet wurde mit Win 7 und ubuntu 9 (32 bit) mit pop 3 Server Exchange und jana server

Code: Alles auswählen

EnableExplicit

CompilerSelect #PB_Compiler_OS 
  CompilerCase #PB_OS_Windows
    IncludePath "..\include\awpbtools"
  CompilerCase #PB_OS_Linux
    IncludePath "../include/awpbtools"
CompilerEndSelect

XIncludeFile "awpop3.pbi"
XIncludeFile "awmessage.pbi"

Global *pop, *msg, msgsrc.s, attcount.i, folder.s
Define nrmail ,x
NewList atts.i()

InitNetwork()     ;- für pop3 nötig
OpenConsole()

PrintN("AWPB-Tools POP3-Demo")
PrintN("")

Print("Allocation POP3 Object ... ")
*pop = AWPB_POP3_AllocatePOP3()
If *pop
  PrintN("success")
  Print("Allocations Message Object ... ")
  *msg= AWPB_MSG_AllocateMessage()
  If *msg
    PrintN("success")
    AWPB_POP3_SetServer(*pop, "server", 110)   ;- Set     Hier POP3-Server und Port eintragen
    AWPB_POP3_SetLogin(*pop, "user", "password")   ;- Set     Hier Loginnamen und Passwort eintragen
    Print("Connecting ... ")
    If AWPB_POP3_Connect(*pop)
      PrintN("success")
      nrmail=AWPB_POP3_STAT(*pop)
      PrintN("Retrieving Message : " +Str(nrmail))
      PrintN ("")
      For x=1 To nrmail
        PrintN(AWPB_POP3_TOP(*pop, x))
        msgsrc = AWPB_POP3_RETR(*pop, x)
        If msgsrc
          PrintN("success - Length: " + Str(Len(msgsrc)))
          PrintN("Parsing Message")
          *msg = AWPB_MSG_SetMailSource(*msg, msgsrc)
          If *msg
            If AWPB_MSG_SaveMailEML(*msg, "pop3message"+"_"+Str(x)+".eml")
              PrintN("Mail saved")
              If  AWPB_POP3_DELE(*pop, x)
                Debug "MSG :"+Str(x) +"deleted!"
                PrintN("MSG :"+Str(x) +"deleted!")
              Else
                Debug "no del"
              EndIf  
              Debug AWPB_POP3_GetServerResult(*pop)
            Else
              PrintN("mail not saved")
            EndIf     
          Else
            PrintN("SetMailSource failed")
          EndIf
        Else
          PrintN("Fehler beim Mailabruf")
          PrintN("Server replied: " + AWPB_POP3_GetServerResult(*pop))
        EndIf
      Next  
      AWPB_POP3_DisConnect(*pop)
    Else
      PrintN("failed")
      PrintN("Server replied: " + AWPB_POP3_GetServerResult(*pop))
    EndIf
    AWPB_MSG_FreeMessage(*msg)
  Else
    PrintN("failed")
  EndIf
  AWPB_POP3_FreePOP3(*pop)
Else
  PrintN("failed")
EndIf

PrintN("Press return to exit")
Input()

PB 5.10 Windows 7 x64
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von jpd »

Hi cptdark,
bei smtp

wenn username und password falsch sind wird ein 550 als rückgabewert gegeben
und der server trennt die verbindung 221

es scheint als ob die routine dies nicht abfängt und versuch immer wieder helo bzw. ehlo zu senden
folge der vorgang hängt.


änlisches habe ich bei pop3 festgestellt.

falls du log oder details benötigst dann sag mir bitte was du genau brauchst.

Grüsse
jpd
PB 5.10 Windows 7 x64
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von cptdark »

Hallo...

Danke erstmal für das Feedback.
Ich werde am Wochenende das Interface überarbeiten (so Richtung OOP). In dem Zuge werd ich auch gleich eine Log-Funktion einbauen, deren Output ich dann brauche.
Ich denke, wird gegen Sonntag abend soweit fertig sein.
Wegen dem Fehler bei falschem Login schaue ich mal ... Danke für den Hinweis.

mfg - cptdark
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von Nino »

Hallo!
cptdark hat geschrieben:Ich werde am Wochenende das Interface überarbeiten (so Richtung OOP).
Das fände ich schade. :(
Ich benutze PB nämlich unter anderem gerade deshalb, weil es nicht objektorientiert ist.

Grüße, Nino
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von cptdark »

Ich dachte mir das so:

bisher: (z.b., ist jetzt nur aus dem kopf)

Code: Alles auswählen

*msg = AWPB_MSG_Alloc()
AWPB_MSG_SetSubject(*msg, "...")
AWPB_MSG_Free(*msg)
würde zu

Code: Alles auswählen

*msg.AWPB_Message = CreateObject_AWPB_Message()
*msg\SetSubject("...")
*msg\Destroy()
fändest Du das schlimm? wenn ja, könnte ich ja beide Interfaces beibehalten bzw den OOP-Teil als Erweiterung (weil ich brauche das so)
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von cptdark »

jpd hat geschrieben:wenn username und password falsch sind wird ein 550 als rückgabewert gegeben
und der server trennt die verbindung 221

es scheint als ob die routine dies nicht abfängt und versuch immer wieder helo bzw. ehlo zu senden
folge der vorgang hängt.

änlisches habe ich bei pop3 festgestellt.

falls du log oder details benötigst dann sag mir bitte was du genau brauchst.
sollte jetzt gefixt sein

Ich habe erstmal das Debug beim senden und entfernen gesetzt. Bei Fehlern bräuchte ich bitte diese Debuggerausgabe (anonymisiert, also ohne Passwort/Login, reicht aus. es geht um den gesendeten befehl und die serverantwort). (am besten als PN) Test bei mir mit GMX hat funktioniert.
Zuletzt geändert von cptdark am 27.11.2012 22:51, insgesamt 1-mal geändert.
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von Nino »

Hallo!
cptdark hat geschrieben:Ich dachte mir das so:

bisher: (z.b., ist jetzt nur aus dem kopf)

Code: Alles auswählen

*msg = AWPB_MSG_Alloc()
AWPB_MSG_SetSubject(*msg, "...")
AWPB_MSG_Free(*msg)
würde zu

Code: Alles auswählen

*msg.AWPB_Message = CreateObject_AWPB_Message()
*msg\SetSubject("...")
*msg\Destroy()
fändest Du das schlimm? wenn ja, könnte ich ja beide Interfaces beibehalten bzw den OOP-Teil als Erweiterung (weil ich brauche das so)
"Schlimm" ist relativ ...
Oben sieht das jetzt so aus, als wenn das nur minimale Unterschiede sind. Aber es ändert sich natürlich nicht nur die Syntax der Aufrufe, sondern auch die Implementation der betr. Befehle. Ich will den Code ja nicht nur benutzen, sondern auch verstehen und ggf. ändern oder erweitern (zumindest für mich privat -- weiß jetzt aus dem Kopf nicht, unter welcher Lizenz der Code steht). Und wie gesagt, ich verspüre nicht die geringste Lust oder gar Notwendigkeit, mich mit OOP zu beschäftigen.
Ich möchte aber nicht, dass Du Dir deshalb zusätzliche Arbeit machst. Wenn Du es objektorientiert brauchst, dann ist die Sache klar. Und ich habe ja in jedem Fall die momentane Nicht-OPP-Version. :-)

Grüße, Nino
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von jpd »

Hi cptdark,

erste test mit jana server zeigen das dein fix greift!

werde am montag dann auch mit exchange testen aber es wird nicht umbedingt notwendig sein.

habe eine frage zu AWPB_SMTP_Connect procedure

nach erfolgreiche verbindung zum server sendest du ehlo, falls ehlo nicht erfolgreich wird helo nacgeschickt.
res = ____SMTPEhlo(*smtp, Hostname()) ; EHLO senden, falls nicht erfolgreich, das Anmelden mit
If Not res : res = ____SMTPHelo(*smtp, Hostname()) : EndIf ; HELO erneut versuchen


gibt es heute server die kein ehlo können?

Und wenn ich explizit helo verwenden möchte wie mache ich dass?

Danke
jpd
PB 5.10 Windows 7 x64
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: SMTP / POP3 Client, eMail Encoder & Decoder

Beitrag von cptdark »

jpd hat geschrieben:ibt es heute server die kein ehlo können?
Ich weiss es nicht, da man es aber auch nicht ausschliessen kann, sollte das Programm drauf vorbereitet sein. Vielleicht möchte ja auch mal jemand einen eigenen coden :mrgreen:
jpd hat geschrieben:Und wenn ich explizit helo verwenden möchte wie mache ich dass?
Bis jetzt geht das nicht, aber da der Wunsch besteht, werde ich es einbauen. Kommt dann ein optionaler Parameter bei Connect dazu - ähnlich der Loginmethode.
Nino hat geschrieben:Oben sieht das jetzt so aus, als wenn das nur minimale Unterschiede sind. Aber es ändert sich natürlich nicht nur die Syntax der Aufrufe, sondern auch die Implementation der betr. Befehle. Ich will den Code ja nicht nur benutzen, sondern auch verstehen und ggf. ändern oder erweitern (zumindest für mich privat -- weiß jetzt aus dem Kopf nicht, unter welcher Lizenz der Code steht). Und wie gesagt, ich verspüre nicht die geringste Lust oder gar Notwendigkeit, mich mit OOP zu beschäftigen.
Intern gibt es gar nicht soviele Änderungen, da ein Zeiger auf das Messageobjekt eh immer übergeben werden muss. Es kommt halt noch ein Interface und eine DataSection dazu. (und die Internen Aufrufe bekommen sozusagen den Pfäfix

Code: Alles auswählen

*this\*vt\
)

mfg
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
Antworten