home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / kabki622.zip / kkcc.cmd < prev    next >
OS/2 REXX Batch file  |  1997-01-19  |  7KB  |  284 lines

  1. /* kkcc.cmd âüü[âïÄ⌐ô«ô]æùâvâìâOâëâÇ */
  2.  
  3. '@echo off'
  4. mprog  = 'c:\mail\kkmail2a.cmd c:\mail'  /* KKMAILé╠ïNô«âRâ}âôâhâëâCâô */
  5. inbox  = 'c:\mail\kkmail.inc'           /* Ä≤ÉMêΩùùé╠âtâ@âCâïû╝ */
  6. maildir= 'c:\mail\folder\inbox'         /* inboxé╠âfâBâîâNâgâè */
  7. mquedir= 'c:\mail\folder\mqueue'        /* mqueueé╠âfâBâîâNâgâè */
  8. keyword= '['                            /* CCæ╬Å█é╠âLü[âÅü[âh
  9.                                            Subjecté╔é▒é╠ò╢ÄÜé¬è▄é▄éΩé─éóéΘéαé╠
  10.                                            é╛é»é≡CCé╔é╖éΘüB */
  11. SendTo = 'takayuki@usui-3chi@imasy.or.jp' /* CCɵâAâhâîâXé≡ïLôⁿé╖éΘ */
  12.  
  13.  
  14. no.0   = 0
  15.  
  16. Main:
  17.   '@del ' || inbox                      /* Ä≤ÉMâtâ@âCâïû╝êΩùùé≡ìφÅ£ */
  18.   '@call ' || mprog                     /* KKMailé≡ïNô«é╡é─âüü[âïé≡Ä≤ÉM */
  19.  
  20.   call CheckSubject                     /* Subjecté╠â`âFâbâNé≡é╖éΘ */
  21.   if no2.0 > 0 then                     /* ô]æùæ╬Å█é╠âüü[âïé¬éáéΘé⌐ */
  22.     call BCC                            /* BCCìUîé */
  23.   exit
  24.  
  25. /* ô₧Æàâüü[âïé╠âTâuâWâFâNâgé≡èmöFé╖éΘ */
  26. CheckSubject:
  27.   i = 0
  28.   do forever
  29.     if lines(inbox) = 0 then leave
  30.     buf    = linein(inbox)
  31.     repstr = left(buf, 4)         /* Boxö╘ìåéτé╡é½é╘é╘é±é╠é╞âèé╛é╡ */
  32.     if verify(repstr, " 0123456789") = 0 then do
  33.       if length(buf) < 27 then
  34.         ttlstr = ""
  35.       else
  36.         ttlstr = right(buf, length(buf) - 20) /* Titleéτé╡é½òöò¬é╠é╞âèé╛é╡27? */
  37.       /* ö¡î╛âüü[âïé╚éτô]æùé╖éΘé╠é┼âoâbâtâ@é╔ö╘ìåé≡Æ~éªéΘ */
  38.       if pos(keyword, translate(ttlstr)) > 0 then do
  39.          i = i + 1
  40.          no2.i = GetReplyNo(repstr)
  41.       end
  42.     end
  43.   end
  44.   no2.0 = i
  45.   call stream inbox, 'c', 'close'
  46.   if i > 0 then say 'Found ' || i || ' messages'
  47.   return
  48.  
  49. /* É│èmé╚âèâvâëâCö╘ìåé≡ĵéΦÅoé╖ */
  50. GetReplyNo:
  51.   arg str
  52.   str2 = str
  53.   po   = lastpos(' ', str)
  54.   if po > 0 then do
  55.      str2 = right(str, length(str) - po)
  56.   end
  57.   return strip(str2)
  58.  
  59.  
  60. /* Ä└ì█é╠âüü[âïé≡âìü[âhé╖éΘ */
  61. OpenMail:
  62.   arg mailno
  63.   mailf = maildir || '\' || mailno
  64.   j = 0
  65.   do forever
  66.     if lines(mailf) = 0 then leave
  67.     j = j + 1
  68.     mail.j = linein(mailf)
  69.   end
  70.   call stream mailf, 'c', 'close'
  71.   mail.0 = j
  72.   return
  73.  
  74. /* âLü[âÅü[âhéµéΦâüü[âïâoâbâtâ@é≡ÆTé╖ */
  75. SearchMail:
  76.   arg searchkey
  77.   do j = 1 to mail.j
  78.     if pos(searchkey, translate(mail.j)) > 0 then do
  79.       return mail.j
  80.     end
  81.   end
  82.   return ""
  83.  
  84.  
  85. /* ô]æùö╘ìåâoâbâtâ@é⌐éτô]æùâüâbâZü[âWé≡ì∞éΦÅoé╖üB */
  86. ForwardMail:
  87.   say 'Make Forward Mail'
  88.   do j = 1 to no.0
  89.     call ReadMail no.j
  90.     call MakeSendAdr
  91.     call MakeNewMail
  92.     call SaveMail
  93.   end
  94.   say 'Send Forward Mail'
  95.   '@call ' || mprog
  96.   say 'Delete Recived Mails'
  97.   do j = 1 to no.0
  98.     f = maildir || '\' || no.j
  99.     '@del ' || f
  100.   end
  101.   return
  102.  
  103. /* ô]æùö╘ìåâoâbâtâ@é⌐éτBCCâüâbâZü[âWé≡ì∞éΦÅoé╖üB */
  104. BCC:
  105.   say 'Make BCC Mail'
  106.   do j = 1 to no2.0
  107.     call ReadMail no2.j
  108.     call MakeBCCMail
  109.     call SaveMail
  110.   end
  111.   say 'Send BCC Mail'
  112.   '@call ' || mprog
  113.   return
  114.  
  115. /* âüü[âïô╟é▌é╛é╖ */
  116. ReadMail:
  117.   parse arg n
  118.   MailSubj = ""
  119.   MailSubj2= ""
  120.   MailFrom = ""
  121.   flgHdr   = 0
  122.   flgBody  = 0
  123.   MailBody.1 = 'To: '
  124.   MailBody.2 = 'Fcc: '
  125.   MailBody.3 = 'From: '
  126.   MailBody.4 = 'Reply-To: '
  127.   MailBody.5 = 'Subject: '
  128.   MailBody.6 = 'X-Mailer: anonymous'
  129.   MailBody.7 = ''
  130.   i = 7
  131.   f = maildir || '\' || n
  132.   do forever
  133.     if lines(f) = 0 then leave
  134.     buf = linein(f)
  135.  
  136.     /* Subjecté╠ò╥ÅW */
  137.     if length(buf) > 9 & translate(left(buf, 9)) = 'SUBJECT: ' then do
  138.       MailSubj = strip(right(buf, length(buf) - 9))
  139.       p = pos('KSML@', translate(MailSubj))
  140.       if p > 0 then do
  141.         MailSubj2 = right(MailSubj, length(MailSubj) - (p + 5 - 1))
  142.         if pos('RE', translate(left(MailSubj, 2))) > 0 then
  143.            MailSubj = 'Re: ' || MailSubj2
  144.       end
  145.     end
  146.     /* Fromé╠ĵô╛ */
  147.     if length(buf) > 6 & translate(left(buf, 6)) = 'FROM: ' then do
  148.       MailFrom = strip(right(buf, length(buf) - 6))
  149.     end
  150.  
  151.     if length(buf) > 4 & translate(left(buf, 4)) = 'TO: ' then do
  152.       flgHdr = 1
  153.     end
  154.  
  155.     if flgHdr = 1 & length(strip(buf)) = 0 then do
  156.       flgBody = 1
  157.     end
  158.     if flgBody = 1 then do
  159.       i = i + 1
  160.       MailBody.i = buf
  161.     end    
  162.   end
  163.   MailBody.0 = i
  164.   call stream f, 'c', 'close'
  165.   return
  166.  
  167. /* ô]æùɵâAâhâîâXé╠ì∞ɼ */
  168. MakeSendAdr:
  169.   SendTo = ''
  170.   if MailSubj2 \= '' then do
  171.     do forever
  172.       if lines(SendAdr) = 0 then leave
  173.       buf = linein(SendAdr)
  174.       if length(buf) > 1 then do
  175.         if length(to) > 0 then  SendTo = SendTo || ','
  176.         SendTo = SendTo || buf
  177.       end
  178.     end
  179.     call stream SendAdr, 'c', 'close'
  180.   end
  181.   else
  182.     SendTo = 'GBC01001@niftyserve.or.jp'
  183.   return
  184.  
  185. /* âüü[âïé╠î`ɼ */
  186. MakeBCCMail:
  187.   do i = 1 to MailBody.0
  188.     if translate(MailBody.i) = 'TO: ' then do
  189.       MailBody.i = 'Bcc: ' || SendTo
  190.     end
  191.     if translate(MailBody.i) = 'FCC: ' then do
  192.       MailBody.i = 'Fcc: outbox'
  193.     end
  194.     if translate(left(MailBody.i, 6)) = 'FROM: ' then do
  195.       MailBody.i = 'From: ' || MailFrom
  196.     end
  197.     if translate(MailBody.i) = 'SUBJECT: ' then do
  198.         MailBody.i = 'Subject: ' || MailSubj
  199.     end
  200.   end
  201.   return
  202.  
  203. /* âüü[âïé╠î`ɼ */
  204. MakeNewMail:
  205.   do i = 1 to MailBody.0
  206.     if translate(MailBody.i) = 'TO: ' then do
  207.       MailBody.i = 'To: ' || SendTo
  208.     end
  209.     if translate(MailBody.i) = 'FCC: ' then do
  210.       if MailSubj2 \= '' then 
  211.         MailBody.i = 'Fcc: ' || 'KSML'
  212.       else
  213.         MailBody.i = 'Fcc: ' || 'forw'
  214.     end
  215.     if translate(left(MailBody.i, 6)) = 'FROM: ' then do
  216.       MailBody.i = 'From: ' || MailFrom
  217.     end
  218.     if translate(MailBody.i) = 'REPLY-TO: ' then do
  219.       MailBody.i = 'Reply-To: ku@sysken.or.jp'
  220.     end
  221.     if translate(MailBody.i) = 'SUBJECT: ' then do
  222.       if MailSubj2 \= '' then do
  223.         MsgCnt = GetCnt()
  224.         MailBody.i = 'Subject: KSML@#' || MsgCnt || ' ' || MailSubj2
  225.         call PutCnt MsgCnt + 1
  226.       end
  227.       else do
  228.         MailBody.i = 'Subject: FWD ' || MailSubj
  229.       end
  230.     end
  231.   end
  232.   return
  233.  
  234. GetCnt:
  235.   n = linein(sendcnt, 1)
  236.   call stream sendcnt, 'c', 'close'
  237.   return n
  238.  
  239. PutCnt:
  240.   arg n
  241.   call lineout sendcnt, n, 1
  242.   call stream sendcnt, 'c', 'close'
  243.   return
  244.  
  245. /* Mailé≡èiö[é╖éΘ */
  246. SaveMail:
  247.   MailNo = GetNumberPms()
  248.   call PutNumberPms MailNo + 1
  249.   f = mquedir || '\' || MailNo
  250.   do i = 1 to MailBody.0
  251.     call lineout f, MailBody.i
  252.   end
  253.   call stream f, 'c', 'close'
  254.   return
  255.  
  256. /* Äƒé╠âüü[âïö╘ìåé≡ô╟é▌é╛é╖ */
  257. GetNumberPms:
  258.    fname = mquedir || '\number.pms'
  259.    rb = stream(fname, "c", "OPEN READ")
  260.    if rb = "READY:" then do
  261.       n = linein( fname, 1 )
  262.       call stream fname, "c", "CLOSE"
  263.    end
  264.    else do
  265.       n = -1
  266.    end
  267.    return n
  268.  
  269. /* Äƒé╠âüü[âïö╘ìåé≡ïLÿ^é╖éΘ */
  270. PutNumberPms:
  271.    parse arg n
  272.    fname = mquedir || '\number.pms'
  273.    rb = stream(fname, "c", "OPEN WRITE")
  274.    if rb = "READY:" then do
  275.       call lineout fname,n,1
  276.       call lineout fname
  277.       call stream fname,"c","CLOSE"
  278.    end
  279.    else do
  280.       say "âëâXâgâüü[âïNoâtâ@âCâï("||fname||")é¬ì∞ɼé┼é½é▄é╣é±"
  281.       return 0
  282.    end
  283.    return 1
  284.