首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在django/python中检查电子邮件的有效性

在django/python中检查电子邮件的有效性
EN

Stack Overflow用户
提问于 2010-07-10 11:21:15
回答 5查看 99.3K关注 0票数 92

我已经写了一个函数,用于添加电子邮件到时事通讯基础。直到我添加了检查已发送电子邮件的有效性,它才能完美地工作。现在,每次我都会收到“错误的电子邮件”。有人能看到这里有什么错误吗?使用的正则表达式为:

\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b,它是100%有效的(http://gskinner.com/RegExr/),但我可能用错了,或者它可能是一些逻辑错误:

代码语言:javascript
复制
def newsletter_add(request):
    if request.method == "POST":   
        try:
            e = NewsletterEmails.objects.get(email = request.POST['email'])
            message = _(u"Email is already added.")
            type = "error"
        except NewsletterEmails.DoesNotExist:
            if validateEmail(request.POST['email']):
                try:
                    e = NewsletterEmails(email = request.POST['email'])
                except DoesNotExist:
                    pass
                message = _(u"Email added.")
                type = "success"
                e.save()
            else:
                message = _(u"Wrong email")
                type = "error"

import re

def validateEmail(email):
    if len(email) > 6:
        if re.match('\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b', email) != None:
            return 1
    return 0
EN

回答 5

Stack Overflow用户

发布于 2013-10-07 18:29:56

代码语言:javascript
复制
from django.core.exceptions import ValidationError
from django.core.validators import validate_email

value = "foo.bar@baz.qux"

try:
    validate_email(value)
except ValidationError as e:
    print("bad email, details:", e)
else:
    print("good email")
票数 176
EN

Stack Overflow用户

发布于 2010-07-10 11:27:03

尼克,不,请不要试图自己验证电子邮件地址。这是人们永远不会做对的事情之一。

既然你已经在使用Django,那么最安全的选择就是利用它的电子邮件表单验证功能。根据docs

代码语言:javascript
复制
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
u'foo@example.com'
>>> f.clean(u'foo@example.com')
u'foo@example.com'
>>> f.clean('invalid e-mail address')
...
ValidationError: [u'Enter a valid e-mail address.']
票数 54
EN

Stack Overflow用户

发布于 2010-07-10 11:45:47

你弄错了,但这是一个你无论如何都不能完成的任务。只有一种方法可以知道RFC 2822地址是否有效,那就是向它发送邮件并获得响应。做其他任何事情都不会改善你的数据的信息内容,即使是一小部分。

您还可以忽略人为因素和接受属性,因为当您将我的地址提供给validateEmail时,

代码语言:javascript
复制
me+valid@mydomain.example.net

你告诉我我搞错了,我就跟你的申请说再见。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3217682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档