Skip to content

Instantly share code, notes, and snippets.

@m1dnight
Created January 11, 2016 13:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save m1dnight/09a5b5161f6c9d4986cb to your computer and use it in GitHub Desktop.
Save m1dnight/09a5b5161f6c9d4986cb to your computer and use it in GitHub Desktop.
Minimal POP3 client in Haskell
module Main where
import Network.Socket hiding (send, sendTo, recv, recvFrom)
import Network.Socket.ByteString (send, recv)
import qualified Data.ByteString.Char8 as B8
main :: IO()
main = client' 110
client' :: Int -> IO ()
client' = client "mail.gandi.net"
client :: String -> Int -> IO ()
client host port = withSocketsDo $ do
addrInfo <- getAddrInfo Nothing (Just host) (Just $ show port)
print addrInfo
let serverAddr = head addrInfo
sock <- socket (addrFamily serverAddr) Stream defaultProtocol
connect sock (addrAddress serverAddr)
msgSender sock
sClose sock
recv' sock = do rMsg <- recv sock 100000000
putStrLn $ "IN : " ++ (B8.unpack rMsg)
return rMsg
send' sock m = do putStrLn $ "OUT: " ++ m
send sock $ (B8.append (B8.pack m) (B8.pack "\n"))
msgSender :: Socket -> IO ()
msgSender sock = do
recv' sock
send' sock "USER admin@call-cc.be"
recv' sock
send' sock "PASS bleep"
recv' sock
send' sock "stat"
recv' sock
send' sock "list"
recv' sock
send' sock "retr 1"
recv' sock
return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment