SMTPMailService
This is a simple function to compose and send an email. This function does not support adding attachments to the email.
Uses Integrator Services: SMTPMAILSERVICE
* This forms allows you to format and send a simple email using the SMTP protocol.
* The following fields must be defined in your data dictionary to support this function:
* jsmemail char 250
* 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(9) height(24) left(0) messageposition(1) parent(#COM_OWNER) tabposition(9) tabstop(False) top(390) width(585)
define_com class(#JSMEMAIL.Visual) name(#toaddress) caption('To') displayposition(1) labeltype(Caption) left(8) marginleft(80) parent(#COM_OWNER) tabposition(1) top(8)
define_com class(#JSMEMAIL.Visual) name(#ccaddress) caption('CC') displayposition(2) labeltype(Caption) left(8) marginleft(80) parent(#COM_OWNER) tabposition(2) top(32)
define_com class(#JSMEMAIL.Visual) name(#Subject) caption('Subject') displayposition(3) labeltype(Caption) left(8) marginleft(80) parent(#COM_OWNER) tabposition(3) top(56)
define_com class(#JSMEMAIL.Visual) name(#fromaddress) caption('From Address') displayposition(8) labeltype(Caption) left(8) marginleft(80) parent(#COM_OWNER) tabposition(8) tabstop(False) top(80) visible(False) width(3)
define_com class(#JSMEMAIL.Visual) name(#fromname) caption('From Name') displayposition(4) labeltype(Caption) left(8) marginleft(80) parent(#COM_OWNER) tabposition(4) tabstop(False) top(104) visible(False) width(3)
define_com class(#PRIM_PHBN) name(#Send) caption('Send') displayposition(6) left(24) parent(#COM_OWNER) tabposition(6) top(360) width(100)
define_com class(#PRIM_PHBN) name(#Reset) caption('Reset') displayposition(7) left(136) parent(#COM_OWNER) tabposition(7) top(360) width(100)
define_com class(#PRIM_MEMO) name(#message) componentversion(1) currentline(1) displayposition(5) height(273) left(8) maximumlinelength(250) parent(#COM_OWNER) showselectionhilight(False) tabposition(5) top(80) width(553) wordwrap(True)
define_com class(#PRIM_MECL) name(#messageline) columnrole(Data) displayposition(1) parent(#message) source(#JSMEMAIL)
define field(#pos) type(*dec) length(3) decimals(0)
define field(#start) type(*dec) length(3) decimals(0)
define field(#filename) type(*char) length(255)
def_list name(#filelist) fields(#filename) type(*Working)
def_list name(#tolist) fields(#jsmemail) type(*Working)
def_list name(#cclist) fields(#jsmemail) type(*Working)
evtroutine handling(#com_owner.Initialize)
set com(#com_owner) caption(*component_desc)
#jsmhdle := *default
#fromaddress := [email protected]
#fromname := 'LANSA Product Centre'
* Start JSM Server on IBM i
use builtin(jsmx_open) with_args('ISERIES01:4570') to_get(#jsmsts #jsmmsg #jsmhdle)
* Start local JSM server
* use builtin(jsmx_open) with_args('localhost:4560') to_get(#jsmsts #jsmmsg #jsmhdle)
* execute subroutine(check) with_parms(#jsmsts #jsmmsg)
* Load the service
#jsmcmd := 'Service_Load Service(SMTPMailService) trace(*yes)'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )
endroutine
mthroutine name(SendEmail)
if (*Not #jsmhdle.isnull)
* from details (ideally these should be set up in your SMTPMailService.properties file)
#jsmcmd := 'set from(' + #fromaddress + ') from_name(' + #fromname + ')'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg)
#com_owner.check( #jsmsts #jsmmsg )
* Set the to address(es)
clr_list named(#tolist)
#start := 1
dountil (#pos = 0)
if (#toaddress.cursize > #start)
#pos := #toaddress.positionof( ';', #start )
else
#pos := 0
endif
if (#pos = 0)
#jsmemail := #toaddress.substring( #start )
else
#jsmemail := #toaddress.substring( #start, (#pos - #start) )
#start := #pos + 1
endif
if (#jsmemail *NE *blank)
add_entry to_list(#tolist)
endif
enduntil
use builtin(jsmx_command) with_args(#jsmhdle 'set to(*list) ') to_get(#jsmsts #jsmmsg #tolist)
#com_owner.check( #jsmsts #jsmmsg )
* Set the cc address(es)
clr_list named(#cclist)
#start := 1
dountil (#pos = 0)
if (#ccaddress.cursize > #start)
#pos := #ccaddress.positionof( ';', #start )
else
#pos := 0
endif
if (#pos = 0)
#jsmemail := #ccaddress.substring( #start )
else
#jsmemail := #ccaddress.substring( #start, (#pos - #start) )
#start := #pos + 1
endif
if (#jsmemail *NE *blank)
add_entry to_list(#cclist)
endif
enduntil
use builtin(jsmx_command) with_args(#jsmhdle 'set cc(*list)') to_get(#jsmsts #jsmmsg #cclist)
#com_owner.check( #jsmsts #jsmmsg )
* add attachments
clr_list named(#filelist)
#filename := order.xml
add_entry to_list(#filelist)
#filename := message01.txt
add_entry to_list(#filelist)
#filename := test-input/thankyou.pdf
add_entry to_list(#filelist)
* #jsmcmd := 'add attachment(*list) zip(orderstatus.zip)'
#jsmcmd := 'add attachment(*list)'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg #filelist)
#com_owner.check( #jsmsts #jsmmsg )
* Send mail
#jsmcmd := 'send subject(' + #subject + ')'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg #message)
#com_owner.check( #jsmsts #jsmmsg )
endif
endroutine
* send the email
evtroutine handling(#Send.Click)
#com_owner.SendEmail
endroutine
* reset the email variables
evtroutine handling(#Reset.Click)
clr_list named(#message)
#toaddress #ccaddress #subject := *blank
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