Code archives/Networking/Mailman
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This application will check if there's any new mails for you. Remove the systemtray functions if you don't have ggTray included to your BlitzPlus. | |||||
;Variables
w = 330
h = 120
Global Version$ = "1.0"
Global Command$ = Lower(CommandLine$())
Global Stream
Global Progress
Global ProgStep
Global MailCount
Global IntervalTimer = CreateTimer(1): PauseTimer IntervalTimer
;End of variables
Global MainWindow = CreateWindow("POP3 Mailman", ClientWidth(Desktop()) / 2 - w / 2, ClientHeight(Desktop()) / 2 - h / 2, w, h, Desktop(), 1)
AppTitle "POP3 Mailman " + Version$
If Instr(Command$, "/hide") HideGadget MainWindow
;Systemtray
ggTrayCreate(QueryObject(MainWindow, 1))
ggTraySetIconFromFile("Icon.ico")
ggTraySetToolTip("POP3 Mailman")
ggTrayShowIcon()
;End of systemtray
;Gadgets
CreateLabel("Server:", 5, 5, 50, 15, MainWindow)
Global ServerField = CreateTextField(5, 20, 100, 20, MainWindow)
CreateLabel("Port:", 110, 5, 50, 15, MainWindow)
Global PortField = CreateTextField(110, 20, 50, 20, MainWindow)
CreateLabel("Username:", 165, 5, 80, 15, MainWindow)
Global UserField = CreateTextField(165, 20, 80, 20, MainWindow)
CreateLabel("Password:", 250, 5, 70, 15, MainWindow)
Global PassField = CreateTextField(250, 20, 70, 20, MainWindow, 1)
CreateLabel("Interval (secs):", 5, 45, 100, 15, MainWindow)
Global IntervalField = CreateTextField(5, 60, 70, 20, MainWindow)
Global HideButton = CreateButton("Hide", ClientWidth(MainWindow) - 120, 60, 55, 20, MainWindow)
Global ProgButton = CreateButton("", ClientWidth(MainWindow) - 60, 60, 55, 20, MainWindow)
If Not FileType("data.dat")
SetGadgetText PortField, "110"
SetGadgetText IntervalField, "30"
Else
rf = ReadFile("data.dat")
If rf
MailCount = ReadInt(rf)
SetGadgetText ServerField, ReadString$(rf)
SetGadgetText PortField, ReadString$(rf)
SetGadgetText UserField, ReadString$(rf)
SetGadgetText PassField, Crypt$(ReadString$(rf))
SetGadgetText IntervalField, ReadString$(rf)
EndIf
CloseFile rf
EndIf
;End of gadgets
If Instr(Command$, "/connect") Progress = True
SetProgress(Progress)
Repeat
Events()
If Progress
If TimerTicks(IntervalTimer) => Int(TextFieldText(IntervalField))
ProgStep = ProgStep Mod 5
ProgStep = ProgStep + 1
Select ProgStep
Case 1
Connect(TextFieldText(ServerField), TextFieldText(PortField))
Case 2
Login(TextFieldText(UserField), TextFieldText(PassField))
Case 3
CountMails()
Case 4
Disconnect()
Case 5
ResetTimer IntervalTimer
End Select
EndIf
EndIf
Forever
Function Events()
Select WaitEvent(100)
Case $401
Select EventSource()
Case HideButton
HideGadget MainWindow
Case ProgButton
Progress = 1 - Progress
SetProgress(Progress)
End Select
Case $803
TheEnd()
End Select
If ggTrayPeekLeftDblClick()
ShowGadget MainWindow
EndIf
ggTrayClearEvents()
End Function
Function Connect(server$, port)
If Not Stream
Stream = OpenTCPStream(server$, port)
If Not Stream
SetProgress(0)
Notify "Unable to connect!"
Return 0
EndIf
WaitResponse()
EndIf
End Function
Function Login(username$, password$)
If Stream
WriteLine Stream, "USER " + username$
WaitResponse()
WriteLine Stream, "PASS " + password$
WaitResponse()
EndIf
End Function
Function CountMails()
If Stream
WriteLine Stream, "STAT"
txt$ = ReadLine$(Stream)
If Instr(txt$, "+OK")
txt$ = Right$(txt$, Len(txt$) - 4)
TempMailCount = Int(Mid$(txt, 0, Instr(txt$, " ") + 1))
If TempMailCount > MailCount
Notify "You have received an E-mail (" + (TempMailCount - MailCount) + ")!"
EndIf
MailCount = TempMailCount
EndIf
EndIf
End Function
Function Disconnect()
If Stream
If Not Eof(Stream)
WriteLine Stream, "QUIT"
WaitResponse()
EndIf
CloseTCPStream Stream
Stream = 0
EndIf
End Function
Function WaitResponse()
If Stream
If Not Eof(Stream)
While Not ReadAvail(Stream)
If Eof(Stream)
Notify "Server has closed the connection!"
Disconnect()
Return False
EndIf
Wend
txt$ = ReadLine$(Stream)
DebugLog txt$
If Left$(txt$, 3) = "+OK"
Return True
ElseIf Left$(txt$, 4) = "-ERR"
Notify "ERROR '" + txt$ + "'"
Return False
Else
Notify "UNKNOWN ERROR '" + txt$ + "'"
Return False
EndIf
EndIf
EndIf
End Function
Function SetProgress(pro)
Progress = pro
If Progress
SetGadgetText ProgButton, "Finish"
ResetTimer IntervalTimer
ResumeTimer IntervalTimer
DisableGadget ServerField
DisableGadget PortField
DisableGadget UserField
DisableGadget PassField
DisableGadget IntervalField
Else
SetGadgetText ProgButton, "Begin"
PauseTimer IntervalTimer
EnableGadget ServerField
EnableGadget PortField
EnableGadget UserField
EnableGadget PassField
EnableGadget IntervalField
EndIf
End Function
Function TheEnd()
wf = WriteFile("data.dat")
If wf
WriteInt wf, MailCount
WriteString wf, TextFieldText(ServerField)
WriteString wf, TextFieldText(PortField)
WriteString wf, TextFieldText(UserField)
WriteString wf, Crypt$(TextFieldText(PassField))
WriteString wf, TextFieldText(IntervalField)
EndIf
CloseFile wf
Disconnect()
ggTrayDestroy()
FreeGadget MainWindow
End
End Function
Function Crypt$(pass$)
For i = 1 To Len(pass$)
temppass$ = temppass$ + Chr$(255 - Asc(Mid$(pass$, i)))
Next
Return temppass$
End Function |
Comments
None.
Code Archives Forum