验证电子邮件的函数(支持国际化域名)
有没有什么Python函数可以验证电子邮件地址,并且能够识别国际化域名(IDN)呢?
比如说,像user@example.com这样的邮箱地址应该和user@zääz.de或者user@納豆.ac.jp一样被认为是正确的。
谢谢。
3 个回答
0
我觉得最好的方法是通过HTTP请求打开邮件服务器的端口,看看它是否有反应。
web = httplib.HTTPConnection(domain, 25, timeout=5)
web.connect()
然后检查一下这个端口是否真的打开了。
1
验证一个电子邮件地址其实挺难的,因为它的格式变化很多。最好的办法就是给输入的地址发一封测试邮件。
2
Django 从 1.2 版本开始支持国际化域名(IDN)的电子邮件验证。
你可以在这里查看验证的代码:http://code.djangoproject.com/svn/django/trunk/django/core/validators.py
参考资料:http://docs.djangoproject.com/en/1.2/ref/forms/fields/#emailfield
示例:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.core.validators import validate_email
>>> try: validate_email(u'user@example.com'); print "passed"
... except: print "failed"
...
passed
>>> try: validate_email(u'user@zääz.de'); print "passed"
... except: print "failed"
...
passed
>>> try: validate_email(u'user@納豆.ac.jp'); print "passed"
... except: print "failed"
...
passed
>>> try: validate_email(u'this-should-fail@@納豆.ac.jp'); print "passed"
... except: print "failed"
...
failed
在使用 Django 模块之前,你可能需要先定义一些环境设置,具体可以查看这里的文档:http://docs.djangoproject.com/en/dev/