home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
comm
/
Mail+News
/
UMS11
/
rexx
/
MailForwarder.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-09-11
|
5KB
|
189 lines
/*
*$VER: UMS MailForwarder 1.3 (11.09.95)
*
*Forward mails width UMS. You *must* read mailforwarder.doc
*to use this.
*
*Author: Stefan Sticht, sticht@edith.deg.sub.org, 2:2494/22.4@fidonet
*History: V1.0 03 Jan 94 Sticht first version
*History: V1.1 27 Jul 94 hG · use UMSInit.rexx and hgrexxsupport.library
*History: · template according LoginGuide
*History: · copies msg no longer, just changes some fields
*History: v1.2 25 Jan 95 hG adapted to UMS V11
*History: v1.3 11 Sep 95 cab replaced hgrexxsupport.library/MakeFlags() by
*History: UMSMakeFlags(), included kaib's UMSInit.rexx
*
*/
options results
options failat 20
/*** Startup ***/
call addlib('ums.library', 0, -210, 11)
call addlib('rexxdossupport.library', 0, -30, 1)
call UMSInitConsts()
ProgramName = "MailForwarder"
ReplyName = "Mail-Daemon"; ReplyPassword = "";
parse arg arguments
ArgsTemplate = "NAME,PASSWORD,SERVER/K"
args.name = ""
args.password = ""
args.server = ""
if strip(arguments) = '?' then do
call writech(STDOUT, ArgsTemplate': ')
arguments = readln(STDIN)
end; else nop
if ~ReadArgs(arguments,ArgsTemplate,"args.") then do
say Fault(RC,ProgramName)
exit 10
end; else nop
drop arguments
/*** Login ***/
/*
* login as user
*/
account = UMSLogin(args.name, args.password, args.server)
if account = 0 then do
say "unable to login."
exit 20
end
/*
* login as importer "mailforwarder", too
*/
faccount = UMSLogin(ReplyName, ReplyPassword, args.server)
IF faccount ~= 0 THEN DO
Empty_Flags = UMSMakeFlags()
FLAG_0 = UMSMakeFlags(0)
FLAG_1 = UMSMakeFlags(1)
FLAGS_01 = UMSMakeFlags(0,1)
Mask = UMSMakeFlags(UMSUSTAT_ViewAccess, UMSUSTAT_Old)
Match = UMSMakeFlags(UMSUSTAT_ViewAccess)
/*
* read our config vars for this user
*/
toaddr = UMSReadConfig(account, "mailforwarder.toaddr", Name, 0)
toname = UMSReadConfig(account, "mailforwarder.toname", Name, 0)
IF toname ~= "" THEN DO
/*
* select all new mails for this account
*
* set local flag 0 on all new messages
*/
CALL UMSSelectFlags(account, "L", FLAG_0, Empty_Flags,,, "U", Mask, Match)
/*
* set local flag 1 on all mails
*/
CALL UMSSelectField(account, "L", FLAG_1, Empty_Flags,,, UMSCODE_Group, "", TRUE)
/*
* main loop: read, convert and write all unread messages
*/
last = 0
msgs = 0
DO FOREVER
/*
* find next message with local flags 0 and 1 set
*/
last = UMSSearchFlags(account, "LOCAL", FLAGS_01, FLAGS_01, last)
IF last = 0 THEN LEAVE
/*
* read message
*/
DROP msg.
IF UMSReadMsgAll(account, last, msg.) THEN DO
IF UMSReadMsgInfo(account, last, msg.) THEN DO
/*
* convert message
*/
msg.UMSCODE_ToName = toname
IF toaddr ~= "" THEN msg.UMSCODE_ToAddr = toaddr
ELSE drop msg.UMSCODE_ToAddr
msg.hardlink = last
/*
* write message
*/
IF UMSWriteMsg(faccount, msg.) = 0 THEN CALL CheckErr(faccount)
ELSE msgs = msgs + 1
END
ELSE CALL CheckErr(account)
END
ELSE CALL CheckErr(account)
END /* DO FOREVER */
/*
* display a short report
*/
IF msgs > 0 THEN SAY "Forwarded" msgs "mail(s) to" toname || "."
ELSE SAY "Nothing to forward."
END
ELSE DO
SAY "No mailforwarder installed for this user!"
END
END
ELSE DO
SAY "Unable to login as user 'mailforwarder'!"
SAY "Check your configuration!"
END
/*** Final cleanup ***/
BREAK_C:
BREAK_D:
BREAK_E:
BREAK_F:
HALT:
RC = 0
ERROR:
IOERR:
SYNTAX:
IF RC ~= 0 THEN DO
SAY "Error:" rc ERRORTEXT(rc) "in line" sigl
END
/*** Logout ***/
IF faccount ~= 0 THEN DO
CALL UMSLogout(faccount)
faccount = 0
END
IF account ~= 0 THEN DO
CALL UMSLogout(account)
account = 0
END
EXIT
/*** Support ***/
CheckErr: PROCEDURE
PARSE ARG account
err = UMSErrNum(account)
IF err ~= 0 THEN DO
SAY "UMS Error #" || err || ": " || UMSErrTxt(account)
END
RETURN