mail() will not tell you if the message is undeliverable. The main reason for that is that it would be unable to do so synchronously anyway.
Just because a mail server doesn't accept a message right now doesn't mean it won't ever. That goes for DNS failures as well.
The mail function (the mail sending program it spawns anyway) queues the message anyway even if it won't be able to send it.
It's possible that some MTAs return a failure code if the address is so badly malformed that it couldn't possibly even be attempted to be delivered, but you should not rely on this behaviour.
Mark