-validate_mx resolver domain = do
- result <- lookupMX resolver domain
- case result of
- Nothing -> return False
- _ -> return True
+validate_mx resolver domain
+ | domain `elem` common_domains = return True
+ | otherwise = do
+ result <- lookupMX resolver domain
+ case result of
+ Nothing -> return False
+ _ -> return True
+
+-- | Split an address into local/domain parts.
+parts :: Address -> (BSU.ByteString, BSU.ByteString)
+parts address = bytestring_split address '@'
+
+-- | Check that the lengths of the local/domain parts are within spec.
+validate_length :: Address -> Bool
+validate_length address =
+ (BSU.length localpart <= 64) && (BSU.length domain <= 255)
+ where
+ (localpart, domain) = parts address