/*******************************************/ /* */ /* RetR V 1.1 */ /* */ /* Sends an automatically generated */ /* Return receive Message to the sender */ /* */ /* For Support mail to : */ /* */ /* RetR-Support@amiga.prima.ruhr.de */ /* */ /*******************************************/ ; $VER: RetR V1.1 (16.01.1997) by Carsten Becker PARSE ARG user IF ~Open(config,'UULib:Config','R') THEN IF ~Open(config,'S:UUConfig','R') THEN DO Say 'The Config-File "UULib:Config" or "S:UUConfig" could not be opened !' Exit 10 END defuser = '*' domain = '*' host = '*' retrdir = '*' timezone = '*' sendmail = '*' DO WHILE ~Eof(config) line=ReadLn(config) line=Upper(line) IF Left(line,8,'*') = 'USERNAME' THEN DO defuser = Right(line,Length(line)-8) defuser = Strip(defuser) IF Left(defuser,1) = ':' THEN defuser = Right(defuser,Length(defuser)-1) defuser = Strip(defuser) defuser = Strip(defuser,'B','"') defuser = Strip(defuser) IF Length(defuser) = 0 THEN defuser = '*' END IF Left(line,10,'*') = 'DOMAINNAME' THEN DO domain = Right(line,Length(line)-10) domain = Strip(domain) IF Left(domain,1) = ':' THEN domain = Right(domain,Length(domain)-1) domain = Strip(domain) domain = Strip(domain,'B','"') domain = Strip(domain) IF Length(domain) = 0 THEN domain = '*' END IF Left(line,8,'*') = 'HOSTNAME' THEN DO host = Right(line,Length(line)-8) host = Strip(host) IF Left(host,1) = ':' THEN host = Right(host,Length(host)-1) host = Strip(host) host = Strip(host,'B','"') host = Strip(host) IF Length(host) = 0 THEN host = '*' END IF Left(line,8,'*') = 'TIMEZONE' THEN DO timezone = Right(line,Length(line)-8) timezone = Strip(timezone) IF Left(timezone,1) = ':' THEN timezone = Right(timezone,Length(timezone)-1) timezone = Strip(timezone) timezone = Strip(timezone,'B','"') timezone = Strip(timezone) IF Length(timezone) = 0 THEN timezone = '*' END IF Left(line,8,'*') = 'SENDMAIL' THEN DO sendmail = Right(line,Length(line)-8) sendmail = Strip(sendmail) IF Left(sendmail,1) = ':' THEN sendmail = Right(sendmail,Length(sendmail)-1) sendmail = Strip(sendmail) sendmail = Strip(sendmail,'B','"') sendmail = Strip(sendmail) IF Length(sendmail) = 0 THEN sendmail = '*' END IF Left(line,7,'*') = 'RETRDIR' THEN DO retrdir = Right(line,Length(line)-7) retrdir = Strip(retrdir) IF Left(retrdir,1) = ':' THEN retrdir = Right(retrdir,Length(retrdir)-1) retrdir = Strip(retrdir) retrdir = Strip(retrdir,'B','"') retrdir = Strip(retrdir) IF Length(retrdir) = 0 THEN retrdir = '*' END END Close(config) user = Strip(user) IF Length(user) = 0 THEN user = defuser IF host ~= '*' THEN domain = host IF retrdir = '*' THEN retrdir = 'AutoMail:' IF timezone = '*' THEN timezone = '+0100' IF sendmail = '*' THEN sendmail = 'UUCP:C/SendMail >NIL:' IF (Right(retrdir,1) ~= ':') & (Right(retrdir,1) ~= '/') THEN retrdir = retrdir + '/' IF user = '*' THEN DO Say 'You MUST define a user name, either by giving RetR the user name as a' Say 'parameter or by defining the "UserName" variable in "UULib:Config"' Say 'or in "S:UUConfig" !' Exit 10 END IF domain = '*' THEN DO Say 'You MUST define a domain name in "UULib:Config" or in "S:UUConfig" by' Say 'defining the "DomainName" or - even better - the "HostName" variable !' Exit 10 END tempdir = 'T:' true = 1 false = 0 msglen = 0 IF ~Open(msgfile,retrdir||'RetR.'||user||'.Msg','R') THEN DO Say 'A Messagefile "'||retrdir||'RetR.'||user||'.Msg" is required' Say 'to send Receipt Requests for User "'||user||'" !!!' Exit 10 END Close(msgfile) from = '*' /* Mail-Adr from From: Header */ rname = '*' /* RealName from From: Header */ to = '*' /* To: Header */ subject = '*' /* Subject: Header */ msgid = '*' /* Message-ID: Header */ return = '*' /* Return-Receipt-To: Header */ date = '*' /* Date: Header */ line = '*' DO WHILE (Length(line) ~= 0) & ~Eof(stdin) line=ReadLn(stdin) msglen = msglen + Length(line) + 1 IF Upper(Left(line,5,'*')) = 'FROM:' THEN DO fline = Right(line,Length(line)-5) fline = Strip(fline) fline = Translate(fline,'(','<') /* Switch '<>' to '()' */ fline = Translate(fline,')','>') stelle1 = Pos('"',fline,1) /* Switch '""' to '()' */ DO WHILE stelle1 ~= 0 stelle2 = Pos('"',fline,stelle1+1) IF stelle2 ~= 0 THEN DO fline = Left(fline,stelle1-1)||'('||SubStr(fline,stelle1+1,stelle2-stelle1-1)||')'||Right(fline,Length(fline)-stelle2) stelle1 = Pos('"',fline,1) END ELSE stelle1 = 0 END stelle1 = Pos('(',fline,1) IF stelle1 ~= 0 THEN DO stelle2 = Pos(')',fline,stelle1+1) IF stelle2 ~= 0 THEN DO str1 = SubStr(fline,stelle1+1,stelle2-stelle1-1) str2 = DelStr(fline,stelle1,stelle2-stelle1+1) str1 = Strip(str1) str2 = Strip(str2) bra = Left(str2,1,'*') ket = Right(str2,1,'*') IF (bra = '(') & (ket = ')') THEN str2 = SubStr(str2,2,Length(str2)-2) IF (bra = '<') & (ket = '>') THEN str2 = SubStr(str2,2,Length(str2)-2) IF (bra = '"') & (ket = '"') THEN str2 = SubStr(str2,2,Length(str2)-2) IF Pos('@',str1,1) = 0 THEN DO from = str2 rname = str1 END ELSE DO from = str1 rname = str2 END fline = '*' END END /* '(' and ')' checking */ IF (Length(rname) = 0) | (rname = '*') THEN rname = 'Unknown' END /* From: Header */ IF Upper(Left(line,3,'*')) = 'TO:' THEN DO tline = Right(line,Length(line)-3) tline = Strip(tline) DO WHILE Right(tline,1) = ',' nextline = ReadLn(stdin) msglen = msglen + Length(nextline) + 1 nextline = Strip(nextline) tline = tline||nextline END stelle = Pos(domain,tline,1) IF stelle = 0 THEN to = tline ELSE DO stelle2 = stelle+Length(domain)-1 stelle1 = 0 stelle = Pos(' ',tline,1) DO WHILE (stelle ~= 0) & (stelle < stelle2) stelle1 = stelle stelle = Pos(' ',tline,stelle1+1) END stelle1 = stelle1 + 1 tline = SubStr(tline,stelle1,stelle2-stelle1+1,' ') stelle = LastPos(',',tline) IF stelle ~= 0 THEN tline = Right(tline,Length(tline)-stelle) tline = Strip(tline) tline = Translate(tline,'(','<') tline = Translate(tline,')','>') tline = Strip(tline) tline = Strip(tline,'B','"') tline = Strip(tline) tline = Strip(tline,'B','(') tline = Strip(tline) tline = Strip(tline,'B',')') to = Strip(tline) END IF Length(to) = 0 THEN to = 'Unknown' END /* To: Header */ IF Upper(Left(line,8,'*')) = 'SUBJECT:' THEN DO sline = Right(line,Length(line)-8) sline = Strip(sline) IF Length(sline) = 0 THEN subject = '' ELSE subject = sline END /* Subject: Header */ IF Upper(Left(line,11,'*')) = 'MESSAGE-ID:' THEN DO mline = Right(line,Length(line)-11) mline = Strip(mline) mline = Strip(mline,'B','<') mline = Strip(mline) mline = Strip(mline,'B','>') msgid = Strip(mline) IF Length(msgid) = 0 THEN msgid = ' ' END /* Message-ID: Header */ IF Upper(Left(line,18,'*')) = 'RETURN-RECEIPT-TO:' THEN DO rline = Right(line,Length(line)-18) rline = Strip(rline) DO WHILE Right(rline,1) = ',' nextline = ReadLn(stdin) msglen = msglen + Length(nextline) + 1 nextline = Strip(nextline) rline = rline||nextline END stelle = Pos('@',rline,1) IF stelle = 0 THEN return = 'Empty' ELSE DO stelle2 = Pos(' ',rline,stelle) IF stelle2 = 0 THEN stelle2 = Length(rline) ELSE stelle2 = stelle2 - 1 stelle1 = 0 stelle = Pos(' ',rline,1) DO WHILE (stelle ~= 0) & (stelle < stelle2) stelle1 = stelle stelle = Pos(' ',rline,stelle1+1) END stelle1 = stelle1 + 1 rline = SubStr(rline,stelle1,stelle2-stelle1+1,' ') rline = Translate(rline,'(','<') rline = Translate(rline,')','>') rline = Strip(rline) rline = Strip(rline,'B','"') rline = Strip(rline) rline = Strip(rline,'B','(') rline = Strip(rline) rline = Strip(rline,'B',')') rline = Strip(rline) IF Length(rline) = 0 THEN return = 'Empty' ELSE return = rline END END /* Return-Receipt-To: Header */ IF Upper(Left(line,5,'*')) = 'DATE:' THEN DO dline = Right(line,Length(line)-5) dline = Strip(dline) IF Length(dline) = 0 THEN date = ' ' ELSE date = dline END /* Date: Header */ END /* Header durchsuchen */ DO WHILE ~Eof(stdin) dummy=ReadLn(stdin) msglen = msglen + Length(dummy) + 1 END msglen = msglen - 1 IF (return = 'Empty') & (from ~= '*') THEN return = from IF return ~= '*' THEN DO IF ~Open(logfile,retrdir||'RetR.'||user||'.Log','R') THEN DO Open(logfile,retrdir||'RetR.'||user||'.Log','W') Close(logfile) exists = false END ELSE DO exists = false DO WHILE ~Eof(logfile) dummy=ReadLn(logfile) IF Pos(Left(msgid,40,' '),dummy,1) ~= 0 THEN DO exists = true Leave END END Close(logfile) END IF ~exists THEN DO Open(tempfile,tempdir||'RetR.'||user||'.Tmp','W') Open(msgfile,retrdir||'RetR.'||user||'.Msg','R') WriteLn(tempfile,'X-Mailer: RetR V1.1 (16.01.1997) by Carsten Becker') DO WHILE ~Eof(msgfile) line=ReadLn(msgfile) DO WHILE (Upper(Left(line,9)) = 'X-MAILER:') & ~Eof(msgfile) line=ReadLn(msgfile) END DO WHILE Length(line) > 0 stelle = Pos('%',line) IF stelle = 0 THEN DO WriteCh(tempfile,line) line = '' END ELSE DO WriteCh(tempfile,Left(line,stelle-1)) line = Right(line,Length(line)-stelle) symb = Left(line,1) found = false IF symb = 'e' THEN DO WriteCh(tempfile,from) found = true END IF symb = 'r' THEN DO WriteCh(tempfile,rname) found = true END IF symb = 't' THEN DO WriteCh(tempfile,to) found = true END IF symb = 's' THEN DO WriteCh(tempfile,subject) found = true END IF symb = 'm' THEN DO WriteCh(tempfile,msgid) found = true END IF symb = 'R' THEN DO WriteCh(tempfile,return) found = true END IF symb = 'd' THEN DO WriteCh(tempfile,date) found = true END IF symb = 'D' THEN DO WriteCh(tempfile,Left(Date('W'),3)||', '||Date('N')||' '||Time('N')||' '||timezone) found = true END IF symb = 'l' THEN DO WriteCh(tempfile,msglen) found = true END IF symb = '%' THEN DO WriteCh(tempfile,'%') found = true END IF ~found THEN WriteCh(tempfile,'%'||symb) line = Right(line,Length(line)-1) END END WriteCh(tempfile,X2C('0a')) END /* Eof msgfile */ Close(msgfile) Close(tempfile) ADDRESS COMMAND sendmail||' <'||tempdir||'RetR.'||user||'.Tmp' logline = Date('E')||' '||Time('N') logline = logline||' '||Left(msgid,40,' ') logline = logline||' '||return||' ('||rname||')' Open(logfile,retrdir||'RetR.'||user||'.Log','A') DO WHILE ~Eof(logfile) dummy=ReadLn(logfile) END WriteLn(logfile,logline) Close(logfile) END /* Send Return Receipt */ END /* Return Receipt */ Exit 0