POP3MailServiceの例
このファンクションは、メール・サーバーからすべてのメール・メッセージを取得します。各メッセージの詳細がユーザーに表示され、さらに本文と添付ファイルがJSMサーバー・インスタンス・ディレクトリの適切なディレクトリに保存されます。
* 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