ChefPOP (Emailprogramm)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

ChefPOP (Emailprogramm)

Beitrag von pvmichael »

Hallo!

ich habe, um die Funktion der POP3 Library zu verstehen ein kleines Programm geschrieben, welches sich auf einem POP3 Server einloggt und dann die Emails anzeigt. Mehr als anzeigen kann es noch nicht, evtl. wird es auch nicht mehr können, da ich momentan zu wenig Zeit habe da weiter dran zu schrauben. Ich möchte dennoch den Source hier aus zwei Gründen veröffentlichen:

1) Gibts sicherlich in meinem Code etwas zu verbessern
2) Hilft der Code vielleicht jemand anderem bei der Verwendung der POP3 Library

Ok, hier nun der Code

ChefPOP.pb

Code: Alles auswählen

Global inTransaction, *buffer, Connected
inTransaction = 0 
Connected = 0

IncludeFile "Common.pb"
Open_Window_0()
Open_Window_1()
HideWindow(#Window_1,1)
POP3_Init()

Procedure FillEmailList();
  POP3_Connect(GetGadgetText(#POP3Server), 110)
  POP3_Logon(GetGadgetText(#Username), GetGadgetText(#Password))
  Connected = 1
  nMessages = POP3_GetMsgCount() 
  Debug nMessages  
  
  HideWindow(#Window_1,0)
  SetGadgetState(#ProgressBar_0, 0)
  For i = 0 To nMessages
    POP3_ParseMsgHeader( i )
    from$ = POP3_HeaderFrom() 
    date$ = POP3_HeaderDate() 
    subject$ = POP3_HeaderSubject() 
    size = POP3_GetMsgSize(i)
    AddGadgetItem(#ListIcon_0, -1, Str(i)+Chr(10)+date$+Chr(10)+from$+Chr(10)+subject$+Chr(10)+Str(size))
    If i = 0 
      RemoveGadgetItem(#ListIcon_0, 0)
    EndIf
    x.f = 100/nMessages*i
    Debug x
    SetGadgetState(#ProgressBar_0, x)
    While WindowEvent(): Wend
  Next
  HideWindow(#Window_1,1)
  
EndProcedure

Procedure messageCallBack(msg, param1, param2)
  Select msg
    Case #POP3MSG_DOWNLOADCOMPLETE
      Nachricht$ = PeekS(*buffer)
      SetGadgetText(#Editor_0, Nachricht$)
      FreeMemory(*buffer)
      HideWindow(#Window_1,1)
      inTransaction = 0
    Case #POP3MSG_ERROR
      Debug "Fehler"
    Case #POP3MSG_DOWNLOADPROGRESS
      HideWindow(#Window_1,0)
      Debug "still downloading..."
      SetGadgetState(#ProgressBar_0, param1)
  EndSelect
EndProcedure


Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    
    ;Debug "WindowID: " + Str(EventWindowID())
    
    GadgetID = EventGadgetID()
    
    If GadgetID = #ListIcon_0
      
        If Connected = 1
        msgsize = POP3_GetMsgSize(GetGadgetState(#ListIcon_0)+1)
        If msgsize = 0 
          msgsize = 1
        EndIf
        *buffer = AllocateMemory(msgsize)
        If inTransaction = 0
          If POP3_BufferMsgBody(GetGadgetState(#ListIcon_0)+1, *buffer, @messageCallBack() )
            inTransaction = 1
          EndIf
        EndIf
      EndIf
    
    ElseIf GadgetID = #Editor_0
      Debug "GadgetID: #Editor_0"
      
    ElseIf GadgetID = #Button_0
      Debug "GadgetID: #Button_0"
      DisableGadget(#Button_0,1)
      FillEmailList()
      DisableGadget(#Button_0,0)
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

If Connected = 1
  POP3_Logoff() 
EndIf

End
und Common.pb

Code: Alles auswählen

; PureBasic Visual Designer v3.90 build 1360


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
  #POP3Server
  #Username
  #Password
  #ListIcon_0
  #Editor_0
  #ProgressBar_0
  #Button_0
  #Frame3D_0
  #Frame3D_3
  #Frame3D_4
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 226, 58, 642, 650,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "ChefPOP")
    If CreateGadgetList(WindowID())
      
      ;-
      StringGadget(#Username, 200, 30, 150, 20, "")
      StringGadget(#Password, 380, 30, 150, 20, "", #PB_String_Password) 
      StringGadget(#POP3Server, 20, 30, 150, 20, "", #PB_String_LowerCase)
      
      ListIconGadget(#ListIcon_0, 10, 70, 620, 120, "No", 50, #PB_ListIcon_CheckBoxes|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
      AddGadgetColumn(#ListIcon_0, 1, "Date/Time", 100)
      AddGadgetColumn(#ListIcon_0, 2, "Sender", 100)
      AddGadgetColumn(#ListIcon_0, 3, "Subject", 300)
      AddGadgetColumn(#ListIcon_0, 4, "Size", 100)
      EditorGadget(#Editor_0, 10, 220, 620, 390)
      ProgressBarGadget(#ProgressBar_0, 0, 0, 230, 70, 0, 100, #PB_ProgressBar_Smooth)
      
      ButtonGadget(#Button_0, 550, 10, 80, 50, "Connect")
      Frame3DGadget(#Frame3D_0, 10, 10, 170, 50, "POP3 Server")
      Frame3DGadget(#Frame3D_3, 190, 10, 170, 50, "Username")
      Frame3DGadget(#Frame3D_4, 370, 10, 170, 50, "Password")
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 376, 346, 226, 72,  #PB_Window_BorderLess | #PB_Window_WindowCentered | #PB_Window_TitleBar, "Progress")
    If CreateGadgetList(WindowID())
      ProgressBarGadget(#ProgressBar_0, 0, 0, 230, 70, 0, 100, #PB_ProgressBar_Smooth)
      
    EndIf
  EndIf
EndProcedure
Zum kompilieren wird die POP3 Library benötigt.

Grüsse

Michael