home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 April / PCWorld_2004-04_cd.bin / software / temacd / remotany / RemotelyAnywhere.msi / Email.sma < prev    next >
Text File  |  2003-08-19  |  6KB  |  216 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //                                                                            //
  3. // RemotelyAnywhere Sample 'SMALL' Scripts                                    //
  4. //                                                                            //
  5. // RemotelyAnywhere provides a mechanism for scripting via a built-in         //
  6. // language. The language is called Small, and more information about         //
  7. // it can be found at http://compuphase.com/small.htm.                        //
  8. //                                                                            //
  9. // Before you use these sample scripts, you should tailor their               //
  10. // behavior to better suit your configuration and your needs.                 //
  11. //                                                                            //
  12. // This script will check if you have email. It can be run interactively (ie. //
  13. // from the Scripts menu, or can be called from a Monitoring Script.          //
  14. //                                                                            //
  15. // To make effective use of it, edit the variables at the beginning of the    //
  16. // 'main()' function.                                                         //
  17. //                                                                            //
  18. // While this script is of little to no use in its current form, it can be    //
  19. // easily modified to monitor a proprietary service that utilizes TCP/IP for  //
  20. // communication.                                                             //
  21. //                                                                            //
  22. // THIS SOFTWARE IS PROVIDED BY 3AM LABS LTD ``AS IS'' AND                    //
  23. // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE      //
  24. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE //
  25. // ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE    //
  26. // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL //
  27. // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS    //
  28. // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)      //
  29. // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT //
  30. // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  //
  31. // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF     //
  32. // SUCH DAMAGE.                                                               //
  33. //                                                                            //
  34. ////////////////////////////////////////////////////////////////////////////////
  35.  
  36. #include <ra>
  37.  
  38. //
  39. // Utility function
  40. //
  41. // Reads a line of text from a socket
  42. //
  43.  
  44. readline(sock, str[], len)
  45. {
  46.     new l=0, d[1], r, c;
  47.  
  48.     while (l<len-1) {
  49.         r=recv(sock, d, 1);
  50.         if (!r)
  51.             break;
  52.  
  53.         c=gb(d, 0);
  54.         str{l++}=c;
  55.  
  56.         if (c=='\n')
  57.             break;
  58.     }
  59.  
  60.     str{l}=0;
  61.     return l;
  62. }
  63.  
  64. //
  65. // Utility function
  66. //
  67. // Sends some data to the SMTP server and waits for a response
  68. //
  69.  
  70. sendcheck(sock, str[], buf[], len)
  71. {
  72.     new l=strlen(str);
  73.  
  74.     // Convert str to a "C-Style" string
  75.     strize(str);
  76.  
  77.     send(sock, str, l);
  78.     l=readline(sock, buf, len);
  79.  
  80.     return (l>0 && buf{0}=='+');
  81. }
  82.  
  83. //
  84. // The main program
  85. //
  86.  
  87. public main()
  88. {
  89.     //
  90.     // These variables define your POP3 server and your POP3 account
  91.     //
  92.         
  93.     new sock=socket("your.mail.server", 110);
  94.     new user[]="user _your account_\r\n", pass[]="pass _your password_\r\n";
  95.     
  96.     //
  97.     // The return value. We'll return this to the monitoring script. If
  98.     // it contains a non-zero value, the handler is executed.
  99.     //
  100.     
  101.     new ret=0;
  102.     
  103.     //
  104.     // Variables used in the script
  105.     //
  106.     
  107.     new r, outp, err=0, list[]="list\r\n", quit[]="quit\r\n";
  108.  
  109.     //
  110.     // Try to send HTML output. If it fails, we are being called from
  111.     // a monitoring script.
  112.     //
  113.     
  114.     outp = htmlBeginOutput("Check mail");
  115.  
  116.     //
  117.     // If no output is possible, do not bother
  118.     //
  119.     
  120.     if (outp)
  121.         htmlBeginDialog("Check mail messages");
  122.  
  123.     //
  124.     // If succesfully connected
  125.     //
  126.     
  127.     if (sock) {
  128.     
  129.         //
  130.         // A buffer of 256 integers
  131.         //
  132.         
  133.         new data[256];
  134.  
  135.         //
  136.         // Read the 'HELO' string from the POP3 server
  137.         //
  138.         
  139.         r=readline(sock, data, 1024);
  140.         
  141.         //
  142.         // If received the HELO string, we're on our way.
  143.         // First, always make sure that the first character is a
  144.         // '+' sign. This identifies a positive response from the 
  145.         // POP3 server,
  146.         //
  147.         // Then, attempt to log in and send the list command.
  148.         //
  149.         
  150.         if (r>0 && data{0}=='+' &&
  151.             sendcheck(sock, user, data, 1024) &&
  152.             sendcheck(sock, pass, data, 1024) &&
  153.             sendcheck(sock, list, data, 1024))
  154.         {
  155.             //
  156.             // Read through the list of messages, incrementing the count
  157.             // by one for each.
  158.             //
  159.             
  160.             while (readline(sock, data, 1024)>0 && data{0}!='.')
  161.                 ret++;
  162.                 
  163.         } else {
  164.             //
  165.             // If could not log in, report the error.
  166.             //
  167.  
  168.             if (outp)
  169.                 htmlError("Failed to authenticate");
  170.  
  171.             err=1;
  172.         }
  173.  
  174.         //
  175.         // Terminate the connection.
  176.         //
  177.         
  178.         sendcheck(sock, quit, data, 1024);
  179.         closesocket(sock);
  180.         
  181.     } else if (outp) {
  182.     
  183.         //
  184.         // If could not connect, report the error.
  185.         //
  186.         
  187.         htmlError("Failed to connect to your POP3 server");
  188.         err=1;
  189.     }
  190.  
  191.     if (outp) {
  192.         if (!err) {
  193.             //
  194.             // If running in interactive mode, report the findings.
  195.             //
  196.         
  197.             if (ret) {
  198.                 new msg[64];
  199.                 sprintf(msg, "You have %d messages in your mailbox", ret);
  200.                 htmlWrite(msg);
  201.             } else {
  202.                 htmlWrite("You have no messages in your mailbox");
  203.             }
  204.         }
  205.  
  206.         htmlEndDialog();
  207.         htmlEndOutput();
  208.     }
  209.  
  210.     //
  211.     // Return the number of messages in the inbox to the caller.
  212.     //
  213.     
  214.     return ret;
  215. }
  216.