module Network.Email.Check where
import Data.ByteString (ByteString)
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import Foreign.C
import Foreign.C.Types
import Text.Email.Validate (validate,domainPart,EmailAddress)
foreign import ccall "check-mx.h check_mx" checkMx
:: CString -> IO CInt
check :: ByteString -> IO (Either String EmailAddress)
check email = do
case validate email of
Left e -> return $ Left $ show e
Right e -> do exists <- S.useAsCString (domainPart e) checkMx
if exists /= 0
then return $ Right e
else return $ Left $ "no MX record exists for domain "
++ S8.unpack (domainPart e)