rexx-things/samples/oorexx/getmail-pop3.rexx
2025-03-12 20:50:48 +00:00

93 lines
3.2 KiB
Rexx

Call RxFuncAdd 'CURLLoadFuncs', 'rexxcurl','CurlLoadFuncs'
Call CURLLoadFuncs
-- change these as appropriate
url = 'pop3://user@mail.domain:110'
email = 'user@mail.domain'
Say 'Please enter password for' email':'
Parse Pull password
-- check if our version of Rexx/CURL support POP3
havepop3 = 0
protocols = ''
Do i = 1 to !REXXCURL.!PROTOCOLS.0
protocols = protocols !REXXCURL.!PROTOCOLS.i
If !REXXCURL.!PROTOCOLS.i = 'pop3' Then
Do
havepop3 = 1
Leave
End
End
-- check if our version of Rexx/CURL support pop3
If havepop3 = 0 Then
Do
Say 'You cannot run this demo program as your version of Rexx/CURL does not support POP3. Supported protocols are:' protocols
Exit 1
End
curl = CurlInit()
If curl \= '' Then
Do
msg = 'We are running' CurlVariable('VERSION')
Say Copies( '*', Length( msg ) )
Say msg
Say Copies( '*', Length( msg ) )
Say
Call CurlSetopt curl, 'VERBOSE', 0
If curlerror.intcode \= 0 Then Call Abort 'Error setting VERBOSE option', curl
Call CurlSetopt curl, 'URL', url
If curlerror.intcode \= 0 Then Call Abort 'Error setting URL option', curl
Call CurlSetopt curl, 'USERNAME', email
If curlerror.intcode \= 0 Then Call Abort 'Error setting USERNAME option', curl
Call CurlSetopt curl, 'PASSWORD', password
If curlerror.intcode \= 0 Then Call Abort 'Error setting PASSWORD option', curl
-- save the list of emails into a stem
Call CurlSetopt curl, 'OUTSTEM', 'mail.', '0D0A'x
If curlerror.intcode \= 0 Then Call Abort 'Error setting OUTSTEM option', curl
-- get em
Call CurlPerform curl
If curlerror.intcode \= 0 Then Call Abort 'Error getting source of' url, curl
Do i = 1 To 6 -- mail.0
Drop item.
in_header = 1
fn = 'mail.'i'.txt'
Call Stream fn, 'C', 'OPEN WRITE REPLACE'
Say
Say Copies( '*', 30 )
Call CurlSetopt curl, 'URL', url'/'i
If curlerror.intcode \= 0 Then Call Abort 'Error setting URL option', curl
Call CurlSetopt curl, 'OUTSTEM', 'item.', '0D0A'x
If curlerror.intcode \= 0 Then Call Abort 'Error setting OUTSTEM option', curl
-- get the contents of our email
Call CurlPerform curl
If curlerror.intcode \= 0 Then Call Abort 'Error getting source of' url, curl
Do j = 1 To item.0
-- first blank line is end of headers
If Strip( item.j ) = '' Then in_header = 0
-- save the line contents to our file
Call Lineout fn, item.j
-- for each line in the email message, check for special headers and display them
If in_header & ( Left( item.j, 5 ) = 'From:' | Left( item.j, 8 ) = 'Subject:' | Left( item.j, 5 ) = 'Date:' ) Then Say item.j
End
Call Stream fn, 'C', 'CLOSE'
End
/*
* Cleanup the connection
*/
Call CurlCLeanup curl
End
Call CurlDropFuncs 'UNLOAD'
Return 0
Abort: Procedure Expose curlerror.
Parse Arg msg, curl
Say msg
If curlerror.curlcode \= 0 Then Say 'cURL error:' curlerror.curlcode '-' curlerror.curlerrm
Else Say 'RexxCURL error:' curlerror.intcode '-' curlerror.interrm
Call CurlCLeanup curl
Call CurlDropFuncs 'UNLOAD'
Exit 1