验证电子邮件的函数(支持国际化域名)

0 投票
3 回答
613 浏览
提问于 2025-04-16 04:39

有没有什么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/

撰写回答