home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 19 / AACD19.BIN / AACD / Programming / rxmui / examples / applications / SendMsgFun.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  2001-01-29  |  3.8 KB  |  133 lines

  1. /* SendMsgFun 1.1 (11.11.2000) */
  2.  
  3. signal on halt
  4. signal on break_c
  5. signal on syntax
  6. signal on error
  7.  
  8. SafeStart:
  9.   global.keyword=word(arg(1),1)
  10.   global.this=x2d(pragma("ID"))
  11.   "MACRO" global.keyword global.this
  12.   global.haltok=1
  13.   if global.halted=1 then exit
  14.  
  15. call start()
  16. call SafeQuit()
  17. /* never reached  */
  18. /**************************************************************************/
  19. start: procedure expose global.
  20.     parm.8.value="+0100"
  21.  
  22.     /*            0    1      2      3          4          5       6    7         8           */
  23.     if ~ReadArgs("ID/A,TYPE/N,HOST/A,HOSTPORT/A,REALNAME/A,EMAIL/A,TO/A,SUBJECT/A,TEXT/A/K/F") then
  24.         call call err(DosString(IoErr()))
  25.  
  26.     global.key=parm.0.value
  27.  
  28.     global.eol="D0A"x
  29.  
  30.     call info("Opening connection...")
  31.     global.sock = OpenConnection("tcp",parm.3.value,parm.2.value)
  32.     if global.sock<0 then do
  33.         select
  34.             when sock=-2 then call err("Host <"parm.2.value"> not found")
  35.             otherwise call err("Can't connect to <"parm.2.value":"parm.3.value"> ("errorstring()")")
  36.         end
  37.     end
  38.  
  39.     if GetSockName(global.sock,"LOCALE")<0 then call err("Not enogh memory")
  40.     thisHost=locale.addraddr
  41.  
  42.     call info("Entering...")
  43.     call rec
  44.  
  45.     call info("Sending message...")
  46.  
  47.     msg=,
  48.     "Message-ID: <smtp"time(s)"@"thisHost">" || global.eol ||,
  49.     "From:" parm.4.value "<"parm.5.value">" || global.eol ||,
  50.     "Subject:" parm.7.value || global.eol || ,
  51.     "Date:" GMTInetDate() || global.eol
  52.  
  53.     if parm.1.value then do
  54.  
  55.         call sen "POST"
  56.         call rec
  57.  
  58.         msg=msg || ,
  59.         "Newsgroups:" parm.6.value || global.eol ||,
  60.         "X-Newsposter: sendmsg/1.0" global.eol
  61.     end
  62.     else do
  63.         call sen "MAIL FROM: <"parm.5.value">"
  64.         call rec
  65.  
  66.         call sen "RCPT TO: <"parm.6.value">"
  67.         call rec
  68.  
  69.         call sen "DATA"
  70.         call rec
  71.  
  72.         msg=msg ||,
  73.         "To: <"parm.6.value">" || global.eol ||,
  74.         "X-Mailer: sendmsg/1.0"
  75.     end
  76.  
  77.     call sen msg
  78.  
  79.     call sen parm.8.value
  80.  
  81.     call sen global.eol || "."
  82.     call rec
  83.  
  84.     call sen "QUIT"
  85.     call rec
  86.  
  87.     call info("Done.")
  88.  
  89.     "EOM" global.key
  90.     exit
  91. /***********************************************************************/
  92. sen: procedure expose global.
  93. parse arg string
  94.     string=string || global.eol
  95.     if send(global.sock,string)~=length(string) then call err("Send error" ErrorString())
  96.     return
  97. /***********************************************************************/
  98. rec: procedure expose global.
  99.     if recv(global.sock,"BUF",256)<0 then call err("Recv error" ErrorString())
  100.     parse var BUF code rest (global.eol)
  101.     if code>=400 then call err("Error from server: ("code")"rest)
  102.     return
  103. /***********************************************************************/
  104. GMTInetDate: procedure expose global.
  105.     m.1="Jan";m.2="Feb";m.3="Mar";m.4="Apr";m.5="May";m.6="Jun";m.7="Jul";m.8="Aug";m.9="Sep";m.10="Oct";m.11="Nov";m.12="Dec"
  106.     call GetDate("D","GMT")
  107.     parse value(FormatDate("D","%d %m %Y %H:%M:%S")) with i j rest
  108.     j=j%1
  109.     return i m.j || rest
  110. /***************************************************************************/
  111. info: procedure expose global.
  112. parse arg msg
  113.     "INFO" global.key msg
  114.     return
  115. /***********************************************************************/
  116. err: procedure expose global.
  117. parse arg msg,err
  118.     "ERR" global.key msg
  119.     exit
  120. /***********************************************************************/
  121. break_c:
  122.     call err "User break detected"
  123. /***********************************************************************/
  124. halt:
  125.     call err "Global halt detected"
  126. /***********************************************************************/
  127. syntax:
  128.     call err "Syntax error" rc sigl
  129. /***********************************************************************/
  130. error:
  131.     call err "Error" rc sigl
  132. /***********************************************************************/
  133.