home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / rxpop123.zip / GetPOP.cmd < prev    next >
OS/2 REXX Batch file  |  1997-12-13  |  8KB  |  279 lines

  1. /*------------------------------------------------------------------
  2.  * getpop.cmd :
  3.  *------------------------------------------------------------------
  4.  * 08-09-92 rnr.cmd published originally by Patrick J. Mueller
  5.  * 24-01-95 adapted as chkpop.cmd by Christoph Lechleitner
  6.  * 15-06-96 fixed for more RFC-compatibility by C. Lechleitner
  7.  * 15-06-96 adapted to getpop.cmd by Christoph Lechleitner
  8.  *------------------------------------------------------------------*/
  9.  
  10. trace off
  11.  
  12. parse arg server user password newmailfilemask
  13.  
  14. if (server = "") | (user='') | (password='') | (newmailfilemask='') then
  15.    do
  16.    say "Expecting a pop server name, a user, a password and a Filemask as parameters."
  17.    exit 1
  18.    end
  19. say ' '
  20.  
  21.  
  22. /*------------------------------------------------------------------
  23.  * initialize socket function package
  24.  *------------------------------------------------------------------*/
  25. parse source os .
  26.  
  27. call RxFuncAdd 'SysTempFileName', 'RexxUtil', 'SysTempFileName'
  28. if (os = "OS/2") then
  29.    do
  30.    if RxFuncQuery("SockLoadFuncs") then
  31.       do
  32.       rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
  33.       rc = SockLoadFuncs()
  34.       rc = RxFuncAdd("SysTempFileName","RexxUtil","SysTempFileName")
  35.       end
  36.    end
  37.  
  38. if (os = "AIX/6000") then
  39.    do
  40.    rc = SysAddFuncPkg("rxsock.dll")
  41.    end
  42.  
  43. /*------------------------------------------------------------------
  44.  * get address of server
  45.  *------------------------------------------------------------------*/
  46. rc = SockGetHostByName(server,"host.!")
  47. if (rc = 0) then
  48.    do
  49.    say "Unable to resolve server name" server
  50.    exit
  51.    end
  52.  
  53. server = host.!addr
  54.  
  55. /*------------------------------------------------------------------
  56.  * open socket
  57.  *------------------------------------------------------------------*/
  58. sock = SockSocket("AF_INET","SOCK_STREAM","IPPROTO_TCP")
  59. if (sock = -1) then
  60.    do
  61.    say "Error opening socket:" errno
  62.    exit
  63.    end
  64.  
  65. /*------------------------------------------------------------------
  66.  * connect socket
  67.  *------------------------------------------------------------------*/
  68. server.!family = "AF_INET"
  69. server.!port   = 110
  70. server.!addr   = server
  71.  
  72. rc = SockConnect(sock,"server.!")
  73. if (rc = -1) then
  74.    Error(sock,rc,"Error connecting to popserver :" errno)
  75.  
  76.    trc = GetResponse(sock)
  77.  
  78.    trc = SendMessage(sock,'USER 'user)
  79.    trc = GetResponse(sock)
  80.    parse var line.1 status rest
  81.    if status <> '+OK' then
  82.      do
  83.        say ' Error: User' user 'unknown on' server '.'
  84.        qrc = SendMessage(sock,'QUIT')
  85.        qrc = SockSoclose(sock)
  86.        exit
  87.      end
  88.  
  89.    trc = SendMessage(sock,'PASS 'password)
  90.    trc = GetResponse(sock)
  91.    parse var line.1 status rest
  92.    if status <> '+OK' then
  93.      do
  94.        say ' Error: Password wrong for' user ' on 'server'.'
  95.        qrc = SendMessage(sock,'QUIT')
  96.        qrc = SockSoclose(sock)
  97.        exit
  98.      end
  99.    else
  100.      do 
  101.        trc = SendMessage(sock,'LIST')
  102.        trc = GetResponse(sock)
  103.        messages = 0
  104.        parse var line.1 status rest
  105.        if status = '+OK' then 
  106.          do 
  107.            msginfo = GetResponseLine(sock)
  108.            do while msginfo <> '.'
  109.              messages = messages + 1
  110.              msginfo = GetResponseLine(sock)
  111.            end
  112.          end /* do */
  113.        if messages = 0 
  114.          then say ' There is no message waiting for you.'
  115.          else
  116.            do 
  117.              say ' There are' messages 'messages waiting for you.'
  118.              trc = SendMessage(sock,'LIST')
  119.              trc = GetResponse(sock)
  120.              do 
  121.                msginfo = GetResponseLine(sock)
  122.                do while msginfo <> '.'
  123.                  parse var msginfo number size
  124.                  say ' Message' number 'has' size 'bytes.'
  125.                  msginfo = GetResponseLine(sock)
  126.                end
  127.              end /* do */
  128.              /* Get Mails */
  129.              do i = 1 to messages
  130.                say ' Getting Message' i
  131.                trc = SendMessage(sock,'RETR ' i)
  132.                trc = GetResponse(sock)
  133.                parse var line.1 status rest
  134.                newMailFile = SysTempFileName(newmailfilemask)
  135.                if newmailfile = '' then newmailfile = newmailfilemask
  136.                oneline = GetResponseLine(sock)
  137.                do while oneline <> '.'
  138.                  call lineout newMailFile, oneline
  139.                  oneline = GetResponseLine(sock)
  140.                end
  141.                call lineout newMailFile
  142.                trc = SendMessage(sock,'DELE ' i)
  143.                trc = GetResponse(sock)
  144.                parse var line.1 status rest
  145.                say ' Got and deleted Message' i
  146.              end  
  147.            end
  148.      end
  149.  
  150.    trc = SendMessage(sock,'QUIT')
  151.    trc = GetResponse(sock)
  152.  
  153. /*------------------------------------------------------------------
  154.  * quittin' time!
  155.  *------------------------------------------------------------------*/
  156. /* rc = SendMessage(sock,"quit") */
  157. rc = SockSoclose(sock)
  158. exit
  159.  
  160.  
  161. /*------------------------------------------------------------------
  162.  * help
  163.  *------------------------------------------------------------------*/
  164. Help: procedure
  165.    say "commands:"
  166.    say
  167.    say "quit    - to quit"
  168.    say "group   - to change to a particular group"
  169.    say "article - to see an article"
  170.    say
  171.    return ""
  172.  
  173. /*------------------------------------------------------------------
  174.  * get a response from the server
  175.  *------------------------------------------------------------------*/
  176. GetResponse:     procedure expose !. line.
  177.    sock = arg(1)
  178.  
  179.    moreids = "100 215 220 221 222 223 230 231"
  180.  
  181.    line.0 = 1
  182.    line.1 = GetResponseLine(sock)
  183.  
  184.    parse var line.1 rid .
  185.  
  186.    if (wordpos(rid,moreids) = 0) then
  187.       return ""
  188.  
  189.    say ' getting further lines '
  190.  
  191.    do forever
  192.       o = line.0 + 1
  193.  
  194.       line.o = GetResponseLine(sock)
  195.  
  196.       if (line.o = ".") then
  197.          return ""
  198.  
  199.       line.0 = o
  200.    end
  201.  
  202.    return ""
  203.  
  204. /*------------------------------------------------------------------
  205.  * get a line from the server
  206.  *------------------------------------------------------------------*/
  207. GetResponseLine: procedure expose !.
  208.    sock = arg(1)
  209.  
  210.    crlf = d2c(13) || d2c(10)
  211.  
  212.    if (symbol('!.buff') = "LIT") then
  213.       !.buff = ""
  214.  
  215.    do while (pos(crlf,!.buff) = 0)
  216.       rc = SockRecv(sock,"data",8000)
  217.       !.buff = !.buff || data
  218.    end
  219.  
  220.    /* say ' got data "' data '"' */
  221.    /* say ' buff = "' !.buff '"' */
  222.  
  223.  
  224.    p = pos(crlf,!.buff)
  225.  
  226.    line = substr(!.buff,1,p-1)
  227.    !.buff = substr(!.buff,p+2)
  228.  
  229.    return line
  230.  
  231. /*------------------------------------------------------------------
  232.  * send a string to the server
  233.  *------------------------------------------------------------------*/
  234. SendMessage:     procedure expose !.
  235.    sock = arg(1)
  236.    data = arg(2) || d2c(13) || d2c(10)
  237.  
  238.    /* say 'Sending "'data'" to server.' */
  239.    len = length(data)
  240.    do while (len > 0)
  241.  
  242.       len = SockSend(sock,data);
  243.       /* say 'Returncode: ' len   */
  244.       /* say 'Errorcode:  ' errno */
  245.       /*
  246.       if (errno <> 0) then
  247.          Error(-1,rc,"Error sending data to server.")
  248.       */
  249.       if (len <= 0) then
  250.          Error(sock,100,"Server closed the connection.")
  251.       
  252.       data = substr(data,len+1)
  253.       len  = length(data)
  254.    end
  255.  
  256.    return i
  257.  
  258. /*------------------------------------------------------------------
  259.  * halting ...
  260.  *------------------------------------------------------------------*/
  261. Halting:
  262.    Error(sock,1,"error on line" sigl)
  263.  
  264. /*------------------------------------------------------------------
  265.  * exit with a message and return code
  266.  *------------------------------------------------------------------*/
  267. Error: procedure
  268.    sock = arg(1)
  269.    retc = arg(2)
  270.    msg  = arg(3)
  271.  
  272.    if (sock <> -1) then
  273.       rc = SockSoClose(sock)
  274.  
  275.    say msg
  276.  
  277.    exit retc
  278.  
  279.