ungureanuvladvictor

Untitled

Apr 24th, 2013
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. val maxInt = valOf(Int.maxInt);
  2.  
  3. Control.Print.printDepth := 1000;
  4. Control.Print.printLength := 1000;
  5. Control.Print.stringDepth := 1000;
  6.  
  7. exception userFail;
  8. exception passFail;
  9.  
  10. fun stringToW8VS(text) = Word8VectorSlice.full(Byte.stringToBytes text);
  11.  
  12. fun inetAddr (host, port) = let
  13. val raw_addr = (case NetHostDB.getByName host
  14. of NONE => raise Fail "Unknown host"
  15. | SOME ent => NetHostDB.addr ent)
  16. in
  17. INetSock.toAddr(raw_addr, port)
  18. end;
  19.  
  20. fun connectToPort (host, port) = let
  21. val addr = inetAddr (host, port)
  22. val sock = INetSock.TCP.socket () : Socket.active INetSock.stream_sock
  23. in
  24. Socket.connect (sock, addr);
  25. sock
  26. end;
  27.  
  28. fun socketWrite(sock, text) = Socket.sendVec(sock, stringToW8VS(text));
  29. fun socketRead(sock, size) = Byte.bytesToString(Socket.recvVec(sock, size));
  30.  
  31. fun checker (a::b,x) = if a = #"\n" then x else checker(b,x+1);
  32. fun countToSpace(a::b,x) = if a = #" " then x else countToSpace(b,x+1);
  33. fun countToEnter(a::b,x) = if a = #"\n" then x else countToEnter(b,x+1);
  34. fun power (m, n) = if n <= 0 then 1 else (m * power(m, n-1));
  35. fun toInt([],x) = 0
  36. | toInt(a::b,x) = valOf(Int.fromString(Char.toString a))*power(10,x) + toInt(b,x+1);
  37. fun parser (#"\n") = true
  38. | parser (#"\r") = true
  39. | parser (x) = false;
  40.  
  41. fun parseInt (#" ") = true
  42. | parseInt (x) = false;
  43.  
  44. fun countMail(host,port,user,pass) =
  45. let
  46. val sock = connectToPort(host,port);
  47. in
  48. socketRead(sock,256);
  49. socketWrite(sock,"user "^user^"\r\n");
  50. if (String.compare(socketRead(sock,256),"+OK\r\n")<>EQUAL) then raise userFail else
  51. socketWrite(sock,"pass "^pass^"\r\n");
  52. if (String.compare(socketRead(sock,256),"+OK User successfully logged on.\r\n")<>EQUAL) then raise passFail else
  53. socketWrite(sock,"STAT\r\n");
  54. let
  55. val messages = socketRead(sock,100);
  56. val myInt = hd(tl(String.tokens parseInt messages))
  57. in
  58. toInt(rev(explode myInt),0)
  59. end
  60. end;
  61.  
  62. fun readMail(host, port, user, pass, number) =
  63. let
  64. val sock = connectToPort(host,port)
  65. val nr = Int.toString(number);
  66. in
  67. socketRead(sock,256);
  68. socketWrite(sock,"USER "^user^"\r\n");
  69. if (String.compare(socketRead(sock,256),"+OK\r\n")<>EQUAL) then raise userFail else
  70. socketWrite(sock,"PASS "^pass^"\r\n");
  71. if (String.compare(socketRead(sock,256),"+OK User successfully logged on.\r\n")<>EQUAL) then raise passFail else
  72. socketWrite(sock,"RETR "^nr^"\r\n");
  73. socketRead(sock,10);
  74. let
  75. val message = socketRead(sock,maxInt);
  76. val list = List.drop(String.tokens parser message,17);
  77. in
  78. print("\r\n");
  79. print(String.concatWith "\r\n" list);
  80. print("\r\n")
  81. end
  82. end;
  83.  
  84. (*readMail("exchange.jacobs-university.de",110,"myUsername","myPassword",);
  85. countMail("exchange.jacobs-university.de",110,"myUsername","myPassword");*)
Advertisement
Add Comment
Please, Sign In to add comment