* It fails to deal with the case where there is no MX record for the domain (fall back to A record)
* It fails to sort the MX records, potentially falling foul to tarpits
* It fails to connect to each A record lookup of the MX host on failures
* It fails to deal with transient failures (such as 4xx responses)
That was just from a quick scan.
Connecting to MX servers in a web environment (especially one using blocking I/O like Django) is generally a really bad idea. Many MX servers use delays and slow responses to combat spammers, and you're passing those slow responses on to your users.
Just check it looks vaguely like an email (the regexp fein posted is good enough most of the time) and send a confirmation email - it's the right thing to do.