POP3MailService Example

LANSA Integrator

POP3MailService Example

This function retrieves all the email messages from the mail server.  Details of each message are displayed to the user and, in addition, the body text and any attachments are saved to appropriate directories under the JSM server instance directory.

* Uses Integrator Services: POP3MailService

 

* This forms retrieves messages from a mail server and then deletes them from the mail server.

* The following fields must be defined in your data dictionary to support this function:
* jsmserver     alpha      20

* jsmpsswrd     alpha      10

* jsmuserid     alpha      10

* jsmfrom       alpha      150

* jsmemail      char       250

* jsmstring     string     1000

* jsmsts        alpha      20

* jsmmsg        alpha      255
* jsmhdle       char       500

* jsmcmd        alpha      4

 

* Beginning of RDML commands **********

function options(*DIRECT)
begin_com role(*EXTENDS #PRIM_FORM) clientheight(414) clientwidth(585) height(448) left(471) top(168) width(593)

define_com class(#PRIM_STBR) name(#STBR_1) displayposition(6) height(24) left(0) messageposition(1) parent(#COM_OWNER) tabposition(6) tabstop(False) top(390) width(585)

define_com class(#JSMSERVER.Visual) name(#jsmserver) caption('Server') displayposition(1) height(19) labeltype(Caption) left(184) marginleft(80) parent(#COM_OWNER) tabposition(1) top(8) usepicklist(False) width(170)
define_com class(#JSMUSERID.Visual) name(#jsmuser) caption('User') displayposition(2) labeltype(Caption) left(184) marginleft(80) parent(#COM_OWNER) tabposition(2) top(32) width(170)
define_com class(#JSMpsswrd.Visual) name(#jsmpassword) caption('Password') displayposition(3) labeltype(Caption) left(184) marginleft(80) parent(#COM_OWNER) tabposition(3) top(56) width(170)

define_com class(#PRIM_PHBN) name(#Get) caption('Get Messages') displayposition(4) left(24) parent(#COM_OWNER) tabposition(4) top(360) width(100)
define_com class(#PRIM_PHBN) name(#Reset) caption('Reset') displayposition(5) left(136) parent(#COM_OWNER) tabposition(5) top(360) width(100)

define_com class(#PRIM_LTVW) name(#message) componentversion(2) displayposition(7) fullrowselect(True) height(265) left(8) parent(#COM_OWNER) showsortarrow(True) tabposition(7) top(88) width(569)
define_com class(#PRIM_LVCL) name(#From) caption('From') captiontype(Caption) displayposition(1) parent(#message) source(#JSMFROM) width(30)
define_com class(#PRIM_LVCL) name(#subject) caption('Subject') captiontype(Caption) displayposition(2) parent(#message) source(#JSMEMAIL) width(30)
define_com class(#PRIM_LVCL) name(#received) caption('Message') captiontype(Caption) displayposition(3) parent(#message) source(#JSMSTRING) width(40) widthtype(Remainder)

def_list name(#fromlst) fields(#jsmfrom) type(*working)
def_list name(#textlst) fields(#jsmstring) type(*working)

evtroutine handling(#com_owner.Initialize)
set com(#com_owner) caption(*component_desc)

#jsmhdle := *default
#jsmserver := '99.99.99.99'
#jsmuser := 'user'
#jsmpassword := 'password'

* Start JSM Server on IBM i
* use builtin(jsmx_open) with_args('ISERIES01:9990') to_get(#jsmsts #jsmmsg #jsmhdle)

* Start local JSM server
use builtin(jsmx_open) with_args('localhost:9980') to_get(#jsmsts #jsmmsg #jsmhdle)
#com_owner.check( #jsmsts #jsmmsg )

* Load the service
#jsmcmd := 'Service_Load Service(POP3MailService) trace(*yes)'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

endroutine

mthroutine name(GetEmail)

if (*Not #jsmhdle.isnull)

clr_list named(#message)

* open the post office

#jsmcmd := 'open server(' + #jsmserver + ') user(' + #jsmuser + ') password(' + #jsmpassword + ')'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

* Get count of messages

use builtin(jsmx_command) with_args(#jsmhdle 'get object(*messagecount)') to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

message msgtxt(#jsmsts + ' : ' + #jsmmsg + ' messages in mail box')

* loop through all the messages
begin_loop

* Get message

use builtin(jsmx_command) with_args(#jsmhdle 'get object(*nextmessage)') to_get(#jsmsts #jsmmsg)

if (#jsmsts = NOMAIL)
leave
endif

* Get subject

use builtin(jsmx_command) with_args(#jsmhdle 'get object(*subject)') to_get(#jsmsts #jsmmsg)
#jsmemail := #jsmmsg

* Get from addresses

clr_list named(#fromlst)

use builtin(jsmx_command) with_args(#jsmhdle 'get object(*fromaddress)') to_get(#jsmsts #jsmmsg #fromlst)
#com_owner.check( #jsmsts #jsmmsg )

get_entry number(1) from_list(#fromlst)

* Read text

clr_list named(#textlst)

use builtin(jsmx_command) with_args(#jsmhdle 'read object(*text)') to_get(#jsmsts #jsmmsg #textlst)
#com_owner.check( #jsmsts #jsmmsg )

selectlist named(#textlst)
add_entry to_list(#message)
#jsmemail #jsmfrom := *blank
endselect

* save attachments
use builtin(jsmx_command) with_args(#jsmhdle 'save object(*attachments) dir(emailattch)') to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

* text
use builtin(jsmx_command) with_args(#jsmhdle 'save object(*text) file(body1.txt)  dir(emailbody) ') to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

* Delete message

use builtin(jsmx_command) with_args(#jsmhdle 'delete') to_get(#jsmsts #jsmmsg)

* Get next message

end_loop

* Close post office

use builtin(jsmx_command) with_args(#jsmhdle 'close') to_get(#jsmsts #jsmmsg #fromlst)
#com_owner.check( #jsmsts #jsmmsg )

endif

endroutine

* send the email

evtroutine handling(#Get.Click)

#com_owner.GetEmail

endroutine

* reset the email variables

evtroutine handling(#Reset.Click)

clr_list named(#message)

endroutine

* check the JSM return status

mthroutine name(check)
define_map for(*input) class(#jsmsts) name(#i_status)
define_map for(*input) class(#jsmmsg) name(#i_message)

message msgtxt(#i_status + ' : ' + #i_message)

endroutine

evtroutine handling(#com_owner.closing) options(*noclearmessages *noclearerrors)

* Unload service
use builtin(jsmx_command) with_args(#jsmhdle 'Service_Unload') to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )


* Close the thread
use builtin(jsmx_close) with_args(#jsmhdle) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )

endroutine

end_com