home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / comm / Mail+News / UMS11 / rexx / MailForwarder.rexx < prev    next >
OS/2 REXX Batch file  |  1995-09-11  |  5KB  |  189 lines

  1. /*
  2. *$VER: UMS MailForwarder 1.3 (11.09.95)
  3. *
  4. *Forward mails width UMS. You *must* read mailforwarder.doc
  5. *to use this.
  6. *
  7. *Author:  Stefan Sticht, sticht@edith.deg.sub.org, 2:2494/22.4@fidonet
  8. *History: V1.0 03 Jan 94 Sticht   first version
  9. *History: V1.1 27 Jul 94 hG       · use UMSInit.rexx and hgrexxsupport.library
  10. *History:                         · template according LoginGuide
  11. *History:                         · copies msg no longer, just changes some fields
  12. *History: v1.2 25 Jan 95 hG       adapted to UMS V11
  13. *History: v1.3 11 Sep 95 cab      replaced hgrexxsupport.library/MakeFlags() by
  14. *History:                         UMSMakeFlags(), included kaib's UMSInit.rexx
  15. *
  16. */
  17.  
  18. options results
  19. options failat 20
  20.  
  21. /*** Startup ***/
  22.  
  23. call addlib('ums.library', 0, -210, 11)
  24. call addlib('rexxdossupport.library', 0, -30, 1)
  25.  
  26. call UMSInitConsts()
  27.  
  28. ProgramName = "MailForwarder"
  29. ReplyName = "Mail-Daemon"; ReplyPassword = "";
  30.  
  31. parse arg arguments
  32. ArgsTemplate = "NAME,PASSWORD,SERVER/K"
  33. args.name = ""
  34. args.password = ""
  35. args.server = ""
  36.  
  37. if strip(arguments) = '?' then do
  38.   call writech(STDOUT, ArgsTemplate': ')
  39.   arguments = readln(STDIN)
  40. end; else nop
  41. if ~ReadArgs(arguments,ArgsTemplate,"args.") then do
  42.   say Fault(RC,ProgramName)
  43.   exit 10
  44. end; else nop
  45.  
  46. drop arguments
  47.  
  48.  
  49. /*** Login ***/
  50.  
  51. /*
  52.  *  login as user
  53.  */
  54. account = UMSLogin(args.name, args.password, args.server)
  55. if account = 0 then do
  56.   say "unable to login."
  57.   exit 20
  58. end
  59.  
  60. /*
  61.  *  login as importer "mailforwarder", too
  62.  */
  63. faccount = UMSLogin(ReplyName, ReplyPassword, args.server)
  64. IF faccount ~= 0 THEN DO
  65.  
  66.   Empty_Flags = UMSMakeFlags()
  67.   FLAG_0 = UMSMakeFlags(0)
  68.   FLAG_1 = UMSMakeFlags(1)
  69.   FLAGS_01 = UMSMakeFlags(0,1)
  70.   Mask =  UMSMakeFlags(UMSUSTAT_ViewAccess, UMSUSTAT_Old)
  71.   Match = UMSMakeFlags(UMSUSTAT_ViewAccess)
  72.  
  73.     /*
  74.      *  read our config vars for this user
  75.      */
  76.     toaddr = UMSReadConfig(account, "mailforwarder.toaddr", Name, 0)
  77.     toname = UMSReadConfig(account, "mailforwarder.toname", Name, 0)
  78.  
  79.     IF toname ~= "" THEN DO
  80.  
  81.         /*
  82.          *  select all new mails for this account
  83.          *
  84.          *  set local flag 0 on all new messages
  85.          */
  86.         CALL UMSSelectFlags(account, "L", FLAG_0, Empty_Flags,,, "U", Mask, Match)
  87.         /*
  88.          *  set local flag 1 on all mails
  89.          */
  90.         CALL UMSSelectField(account, "L", FLAG_1, Empty_Flags,,, UMSCODE_Group, "", TRUE)
  91.  
  92.         /*
  93.          *  main loop: read, convert and write all unread messages
  94.          */
  95.         last = 0
  96.         msgs = 0
  97.         DO FOREVER
  98.             /*
  99.              *  find next message with local flags 0 and 1 set
  100.              */
  101.             last = UMSSearchFlags(account, "LOCAL", FLAGS_01, FLAGS_01, last)
  102.             IF last = 0 THEN LEAVE
  103.             /*
  104.              *  read message
  105.              */
  106.             DROP msg.
  107.             IF UMSReadMsgAll(account, last, msg.) THEN DO
  108.                 IF UMSReadMsgInfo(account, last, msg.) THEN DO
  109.                     /*
  110.                      *  convert message
  111.                      */
  112.                     msg.UMSCODE_ToName = toname
  113.                     IF toaddr ~= "" THEN msg.UMSCODE_ToAddr = toaddr
  114.                     ELSE drop msg.UMSCODE_ToAddr
  115.  
  116.                     msg.hardlink = last
  117.  
  118.                     /*
  119.                      *  write message
  120.                      */
  121.                     IF UMSWriteMsg(faccount, msg.) = 0 THEN CALL CheckErr(faccount)
  122.                     ELSE msgs = msgs + 1
  123.                     END
  124.  
  125.                 ELSE CALL CheckErr(account)
  126.                 END
  127.  
  128.             ELSE CALL CheckErr(account)
  129.             END /* DO FOREVER */
  130.  
  131.         /*
  132.          *  display a short report
  133.          */
  134.         IF msgs > 0 THEN SAY "Forwarded" msgs "mail(s) to" toname || "."
  135.         ELSE SAY "Nothing to forward."
  136.         END
  137.  
  138.     ELSE DO
  139.         SAY "No mailforwarder installed for this user!"
  140.         END
  141.     END
  142. ELSE DO
  143.     SAY "Unable to login as user 'mailforwarder'!"
  144.     SAY "Check your configuration!"
  145.     END
  146.  
  147. /*** Final cleanup ***/
  148.  
  149. BREAK_C:
  150. BREAK_D:
  151. BREAK_E:
  152. BREAK_F:
  153. HALT:
  154.  
  155. RC = 0
  156.  
  157. ERROR:
  158. IOERR:
  159. SYNTAX:
  160.  
  161. IF RC ~= 0 THEN DO
  162.     SAY "Error:" rc ERRORTEXT(rc) "in line" sigl
  163.     END
  164.  
  165. /*** Logout ***/
  166.  
  167. IF faccount ~= 0 THEN DO
  168.     CALL UMSLogout(faccount)
  169.     faccount = 0
  170.     END
  171.  
  172. IF account ~= 0 THEN DO
  173.     CALL UMSLogout(account)
  174.     account = 0
  175.     END
  176.  
  177. EXIT
  178.  
  179. /*** Support ***/
  180.  
  181. CheckErr: PROCEDURE
  182.     PARSE ARG account
  183.     err = UMSErrNum(account)
  184.     IF err ~= 0 THEN DO
  185.         SAY "UMS Error #" || err || ": " || UMSErrTxt(account)
  186.     END
  187.     RETURN
  188.  
  189.