On consideration from the answers (since I completely forgot about confirmation e-mails) it seems to me like a suitable compromise for a low-friction solution would be to:
- Use regex to check that the e-mail address looks valid, and give a warning if it is more obscure but avoid rejecting outright.
- Use SMTP validation to ensure that the e-mail address is valid.
- If SMTP validation fails then -- and only then -- use a confirmation e-mail as a last resort. Confirmation e-mails seem to require too much interaction outside of your application for them to be considered low friction, but they are a perfect fallback.