Code: Select all
;===========================================================================
;-GLOBAL FLAGS / VARIABLES / STRUCTURES / ARRAYS
;===========================================================================
Global CRLF.s
CRLF = Chr(13) + Chr(10)
Structure ACOUNTDETAILS
POP3Server .s
UserName.s
Password.s
EndStructure
;===========================================================================
;-PROCEDURES
;===========================================================================
;Send a piece of mail data using a string
Procedure SendMailData(ConnectionID, Message.s)
Protected BytesSent.l
BytesSent = SendNetworkData(ConnectionID, @Message, Len(Message))
If BytesSent >= Len(Message)
Debug "SENT: [" + Str(BytesSent) + " bytes] : " + Left(Message, 100)
ProcedureReturn 1
Else
Debug "ERROR: Problem sending data, only " + Str(BytesSent) + " bytes sent"
ProcedureReturn 0
EndIf
EndProcedure
;Check the server responses
Procedure.s POP3Response(ConnectionID.l)
Protected POP3Response.s
Protected BytesRecieved.l
POP3Response = Space(9999)
BytesRecieved = ReceiveNetworkData(ConnectionID, @POP3Response, Len(POP3Response))
If BytesRecieved >= 3
Debug "RECV: [" + Str(BytesRecieved) + " bytes] : " + POP3Response
Else
Debug "ERROR: Problem receiving data, " + Str(BytesSent) + " bytes received"
EndIf
ProcedureReturn POP3Response
EndProcedure
;Get amount of mails pending
Procedure GetNumberOfEmails(*AccountDetails.ACOUNTDETAILS)
Protected ConnectionID.l
Protected RawServerMessage.s
Protected NumberOfEmails.l
Protected MailBoxStatus.s
If InitNetwork()
ConnectionID = OpenNetworkConnection(*AccountDetails\POP3Server, 110)
If ConnectionID <> 0
If Left(POP3Response(ConnectionID), 3) = "+OK"
SendMailData(ConnectionID, "USER " + *AccountDetails\UserName + CRLF)
If Left(POP3Response(ConnectionID), 3) = "+OK"
SendMailData(ConnectionID, "PASS " + *AccountDetails\Password + CRLF)
If Left(POP3Response(ConnectionID), 3) = "+OK"
SendMailData(ConnectionID, "STAT" + CRLF)
MailBoxStatus = POP3Response(ConnectionID)
NumberOfEmails = Val(Mid(MailBoxStatus, 4, FindString(MailBoxStatus, " ", 4)))
Debug "Number of mails waiting to be downloaded: " + Str(NumberOfEmails)
Debug ""
If NumberOfEmails > 0
;list email sizes
For x = 1 To NumberOfEmails
SendMailData(ConnectionID, "LIST " + Str(x) + CRLF)
POP3Response(ConnectionID)
Debug ""
Next x
EndIf
ProcedureReturn NumberOfEmails
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
MessageRequester("Error", "Connection could not be established with " + *AccountDetails\POP3Server, #PB_MessageRequester_Ok)
ProcedureReturn 0
EndIf
Else
MessageRequester("Error", "Network can not be initialised, check your Dial-up Networking settings", #PB_MessageRequester_Ok)
ProcedureReturn 0
EndIf
EndProcedure
;===========================================================================
;-TESTING
;===========================================================================
AccountDetails.ACOUNTDETAILS
AccountDetails\POP3Server = "your.pop3server.com"
AccountDetails\UserName = "YourUsername"
AccountDetails\Password = "YourPassword"
;Returns the number of emails in your pop3 account mailbox
Debug GetNumberOfEmails(@AccountDetails)
End

