Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- val maxInt = valOf(Int.maxInt);
- Control.Print.printDepth := 1000;
- Control.Print.printLength := 1000;
- Control.Print.stringDepth := 1000;
- exception userFail;
- exception passFail;
- fun stringToW8VS(text) = Word8VectorSlice.full(Byte.stringToBytes text);
- fun inetAddr (host, port) = let
- val raw_addr = (case NetHostDB.getByName host
- of NONE => raise Fail "Unknown host"
- | SOME ent => NetHostDB.addr ent)
- in
- INetSock.toAddr(raw_addr, port)
- end;
- fun connectToPort (host, port) = let
- val addr = inetAddr (host, port)
- val sock = INetSock.TCP.socket () : Socket.active INetSock.stream_sock
- in
- Socket.connect (sock, addr);
- sock
- end;
- fun socketWrite(sock, text) = Socket.sendVec(sock, stringToW8VS(text));
- fun socketRead(sock, size) = Byte.bytesToString(Socket.recvVec(sock, size));
- fun checker (a::b,x) = if a = #"\n" then x else checker(b,x+1);
- fun countToSpace(a::b,x) = if a = #" " then x else countToSpace(b,x+1);
- fun countToEnter(a::b,x) = if a = #"\n" then x else countToEnter(b,x+1);
- fun power (m, n) = if n <= 0 then 1 else (m * power(m, n-1));
- fun toInt([],x) = 0
- | toInt(a::b,x) = valOf(Int.fromString(Char.toString a))*power(10,x) + toInt(b,x+1);
- fun parser (#"\n") = true
- | parser (#"\r") = true
- | parser (x) = false;
- fun parseInt (#" ") = true
- | parseInt (x) = false;
- fun countMail(host,port,user,pass) =
- let
- val sock = connectToPort(host,port);
- in
- socketRead(sock,256);
- socketWrite(sock,"user "^user^"\r\n");
- if (String.compare(socketRead(sock,256),"+OK\r\n")<>EQUAL) then raise userFail else
- socketWrite(sock,"pass "^pass^"\r\n");
- if (String.compare(socketRead(sock,256),"+OK User successfully logged on.\r\n")<>EQUAL) then raise passFail else
- socketWrite(sock,"STAT\r\n");
- let
- val messages = socketRead(sock,100);
- val myInt = hd(tl(String.tokens parseInt messages))
- in
- toInt(rev(explode myInt),0)
- end
- end;
- fun readMail(host, port, user, pass, number) =
- let
- val sock = connectToPort(host,port)
- val nr = Int.toString(number);
- in
- socketRead(sock,256);
- socketWrite(sock,"USER "^user^"\r\n");
- if (String.compare(socketRead(sock,256),"+OK\r\n")<>EQUAL) then raise userFail else
- socketWrite(sock,"PASS "^pass^"\r\n");
- if (String.compare(socketRead(sock,256),"+OK User successfully logged on.\r\n")<>EQUAL) then raise passFail else
- socketWrite(sock,"RETR "^nr^"\r\n");
- socketRead(sock,10);
- let
- val message = socketRead(sock,maxInt);
- val list = List.drop(String.tokens parser message,17);
- in
- print("\r\n");
- print(String.concatWith "\r\n" list);
- print("\r\n")
- end
- end;
- (*readMail("exchange.jacobs-university.de",110,"myUsername","myPassword",);
- countMail("exchange.jacobs-university.de",110,"myUsername","myPassword");*)
Advertisement
Add Comment
Please, Sign In to add comment