在 django 中向新的***域 (TLD) 发送电子邮件

Posted

技术标签:

【中文标题】在 django 中向新的***域 (TLD) 发送电子邮件【英文标题】:Emailing to new top-level domains (TLDs) in django 【发布时间】:2015-07-03 12:16:30 【问题描述】:

我需要支持像 joe@netherworld.enterprises(新批准的 TLD 之一)这样的电子邮件地址。我的django版本是1.4.5,python是2.7

我的模型如下所示:

class Invitation(models.Model):
    email = models.EmailField(max_length=60, blank=False)

问题是验证器“EmailField”拒绝“企业”,我认为是因为它太长了,并且不以 .com 或类似名称结尾。 (.enterprises 现在是有效的***域。)

如何告诉验证器接受该域? (最好是其他人喜欢它。)

谢谢!

【问题讨论】:

【参考方案1】:

我建议您将 EmailField 子类化,并将其 default_validators 集合替换为也支持新*** TLD 的自定义验证器。

默认验证器是django.core.validators.validate_email,它又指向EmailValidator 的一个实例,显然您也必须对其进行子类化,并提供该子类的一个实例作为您的default_validators 属性中的唯一项EmailField 子类。

您可能想看看 EmailValidator 的较新实现,它不仅支持长度为 2 到 63 个字符的 TLD,还支持 whitelist 参数,允许您在自定义有效域列表中注入.

或者,当然,如果您更喜欢升级到更新的 Django 版本。我不确定何时添加了对更长 TLD 的支持,但我相信您可以通过查看发布日志或浏览源代码来弄清楚这一点。

【讨论】:

以上是关于在 django 中向新的***域 (TLD) 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

想要向新用户显示欢迎页面,并在 Flutter Firebase 中向登录用户显示主屏幕

查找 TLD 下的所有域

正则表达式从域字符串中获取 SLD + TLD

nginx 和一个域的两个证书(EV nad 通配符)

ajax主域和子域之间的跨域问题

最佳实践:301 将 HTTP 重定向到 HTTPS(标准域)