home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / slip-cm.zip / SPMail.CMD < prev    next >
OS/2 REXX Batch file  |  1994-04-07  |  6KB  |  216 lines

  1. /******************************************************************/
  2. /* Send pending (offline-composed) mail                           */
  3. /******************************************************************/
  4.  
  5. trace OFF
  6.  
  7.    address CMD
  8.  
  9.    parse upper arg option .
  10.  
  11.    signal on HALT name CLEANUP
  12.    signal on SYNTAX name CLEANUP
  13.    signal on FAILURE name CLEANUP
  14.  
  15. /******************************************************************/
  16. /*                                                                */
  17. /******************************************************************/
  18.  
  19.    call initialize option
  20.  
  21.    do until (G._fatal == 1) | (G._interval <= 0)
  22.      if (lines(G._old_list) <> 0) then do
  23.        do while lines(G._old_list) & (G._fatal <> 1)
  24.          command = linein(G._old_list)
  25.  
  26.          file = mail_file(command)
  27.          to = recipient(command)
  28.          subject = get_subject(file)
  29.  
  30.          emit(time() 'Sending message file: ' file)
  31.      emit('        ' 'First recipient:      ' to)
  32.          emit('        ' 'Subject:              ' subject)
  33.  
  34.          error = send_message(command, file)
  35.  
  36.          if (error <> 0) then
  37.            call problem command, error
  38.        end /* while */
  39.  
  40.        call swap_lists
  41.      end /* if */
  42.  
  43.      if (G._interval > 0) then    
  44.        call syssleep G._interval
  45.    end /* while */
  46.  
  47. /******************************************************************/
  48. /*                                                                */
  49. /******************************************************************/
  50.    
  51. cleanup: 
  52.  
  53.   if (RC <> 0) & (RC <> 'RC') then
  54.     emit(Time() '*** Error' RC 'at line' SIGL)
  55.  
  56. exit (RC)
  57.  
  58. /******************************************************************/
  59. /*                                                                */
  60. /******************************************************************/
  61.  
  62. get_subject: procedure expose G.
  63.  
  64.    parse arg file
  65.  
  66.    subject = ""
  67.    
  68.    do while lines(file) & (subject == "") & (line <> "")
  69.      line = linein(file)
  70.      parse var line tag ":" value
  71.  
  72.      if (translate(tag) == "SUBJECT") then
  73.        subject = value
  74.    end /* while */
  75.  
  76.    result = stream(file, 'COMMAND', 'CLOSE')
  77.  
  78. return strip(subject)
  79.  
  80. /******************************************************************/
  81. /*                                                                */
  82. /******************************************************************/
  83.  
  84. mail_file: procedure expose G.
  85.  
  86.   parse arg . "-af" mail_file .
  87.  
  88. return strip(mail_file)
  89.  
  90. /******************************************************************/
  91. /*                                                                */
  92. /******************************************************************/
  93.  
  94. recipient: procedure expose G.
  95.  
  96.   parse arg . "-f" sender recipient .
  97.  
  98. return strip(recipient)
  99.  
  100. /******************************************************************/
  101. /*                                                                */
  102. /******************************************************************/
  103.  
  104. initialize: procedure expose G.
  105.  
  106.   parse arg option
  107.  
  108.   call rxfuncadd sysfiledelete, rexxutil, sysfiledelete
  109.   call rxfuncadd syssleep, rexxutil, syssleep
  110.  
  111.   G. = ""
  112.  
  113.   G._fatal = 0
  114.  
  115.   if datatype(option, numeric) then
  116.     G._interval = option
  117.   else
  118.     G._interval = 0
  119.  
  120.   G._server = value('SLIP.POP_SERVER',, 'OS2ENVIRONMENT')
  121.   G._user = value('SLIP.USERNAME',, 'OS2ENVIRONMENT')
  122.   G._password = value('SLIP.PASSWORD',, 'OS2ENVIRONMENT')
  123.   G._work = value('TMP',, 'OS2ENVIRONMENT')
  124.  
  125.   G._old_list = (G._work || '\' || 'pending_mail')
  126.   G._new_list = (G._work || '\' || 'pending_mail.temporary')
  127.  
  128.   call sysfiledelete G._new_list
  129.  
  130. return
  131.  
  132. /******************************************************************/
  133. /*                                                                */
  134. /******************************************************************/
  135.  
  136. emit: procedure expose G.
  137.  
  138.   parse arg text
  139.  
  140.   result = lineout(, text)
  141.  
  142. return "@"
  143.  
  144. /******************************************************************/
  145. /*                                                                */
  146. /******************************************************************/
  147.  
  148. swap_lists: procedure expose G.
  149.  
  150.   result = stream(G._old_list, 'COMMAND', 'CLOSE')
  151.   result = stream(G._new_list, 'COMMAND', 'CLOSE')
  152.  
  153.   if (G._fatal == 1) then do
  154.     call sysfiledelete G._new_list
  155.  
  156.     emit(Time() '*** Fatal error--Message list and files retained ***')
  157.   end /* if */
  158.  
  159.   else do
  160.     call sysfiledelete G._old_list
  161.  
  162.    '@rename' G._new_list filespec(name, G._old_list)
  163.  
  164.     if (RC <> 0) & lines(G._new_list) then do
  165.       emit(Time() '*** Fatal error--Can not rename new message list ***')
  166.  
  167.       G._fatal = 1              
  168.     end /* if */
  169.  
  170.     else do
  171.       do while (G._sent <> "") 
  172.         parse var G._sent file "15"x G._sent
  173.        
  174.         file = strip(file)
  175.         result = stream(file, 'COMMAND', 'CLOSE')
  176.  
  177.         call sysfiledelete file
  178.  
  179.         emit(time() 'deleted message file' '"'file'", RC='result)
  180.       end /* while */
  181.     end /* else */
  182.   end /* else */      
  183.  
  184. return
  185.  
  186. /******************************************************************/
  187. /*                                                                */
  188. /******************************************************************/
  189.  
  190. problem: procedure expose G.
  191.  
  192.   parse arg command, error
  193.  
  194.   emit('        ' '*** MTA error:        ' error '***')
  195.  
  196.   if (lineout(G._new_list, command) <> 0) then
  197.     G._fatal = 1
  198.  
  199. return
  200.  
  201. /******************************************************************/
  202. /*                                                                */
  203. /******************************************************************/
  204.  
  205. send_message: procedure expose G.
  206.  
  207.   parse arg command, file
  208.  
  209.   address CMD ('@lampop' '-s' G._server G._user G._password "<" file)
  210.   error = RC
  211.  
  212.   if (error == 0) then
  213.     G._sent = (file "15"x G._sent)
  214.  
  215. return (error)
  216.