如何跟踪或至少检测到无效的电子邮件地址

时间:2012-10-22 06:34:57

标签: java php ruby django email

我正在使用django。我只是想知道是否有可能检查一封电子邮件是否正确,以便它肯定会被发送(99.99%)?如果用户输入了klsdfksdajkfdn@skjdnf.com这样的电子邮件,则从技术上讲它是有效的电子邮件,但确实不存在。我可以检测到这样的电子邮件吗?

4 个答案:

答案 0 :(得分:2)

我认为实现这一目标的唯一方法是提供一种机制,向您发送电子邮件的用户收到要求确认的链接。就像你在许多网站订阅中一样。通过此,用户确认它是一封有效的电子邮件,然后您可以“信任”

答案 1 :(得分:2)

您无法在发送之前或之后查看电子邮件。 但你可以做某些,这可能会覆盖80%的案例。

  1. 您可以查看域名。例如,如果用户提供的电子邮件是foo@gmail.com,请先ping gmail.com。如果它不存在,它可能是电子邮件错误的第一个红旗。但要小心:可能ICMP被阻止此域名。
  2. 您可以收听自动回复消息,并尝试区分那些告诉您电子邮件不存在的消息。这是为了在域名正确时检测错误的用户名。但要小心:可能存在误报(如果您认为外出回复是电子邮件不存在的话)或误报(如果您错过了自动回复,因为它不包含预期的词或是用意想不到的语言写的)
  3. 如果因为IOException或类似的内容被抛出而无法发送电子邮件。但同样要小心:这可能意味着来自另一方的邮件服务器暂时不可用或者您的计算机存在连接问题。

答案 2 :(得分:1)

如果您指的是电子邮件 - 传递报告或“退回邮件”,则跟踪它们并不属于Django的范围。邮件本身就是电子邮件,由邮件守护程序存放在您的邮箱中,因此您需要正确配置邮件服务器并处理通过Django以外的某些系统进入的邮件。

如果您的意思是跟踪电子邮件的实际投放,则没有好的选择。 “阅读收据”仅由一些电子邮件客户端以不兼容的方式处理,并且所有这些都可能是基于电子邮件的,因此不会访问网络服务器。您可以使用唯一的URL(跟踪图像)嵌入图像并跟踪谁使用Django访问它,但由于这有点侵犯隐私,一些电子邮件客户端(如gmail)将阻止这些图像的加载(实际上,所有图像)默认情况下。

检查电子邮件是否正确同样复杂。您可以通过尝试直接查询该域的邮件服务器,轻松查明该地址的域部分是否真实,但只有部分邮件服务器会报告名称是否有效,而有些则不会。

到目前为止最好的方法是简单地发送确认电子邮件并要求用户通过单击唯一链接来回复它,这会导致Django页面标记该电子邮件肯定是正确的。实际上,大多数使用电子邮件通信的网站都是这样做的如果您只想要此功能而不需要其他与​​电子邮件/帐户相关的功能,请查看http://code.google.com/p/django-email-confirmation/

答案 3 :(得分:0)

我不认为使用当前的电子邮件传输协议(即SMTP)可以获得可靠的解决方案。几乎任何你能想到的尝试都会遇到复杂性和“失败”的情况,会给你带来误报或漏报。

即使您甚至(似乎)向目标邮件服务器发送电子邮件,您也无法知道它是否会传递给任何人......更不用说合适的人了。您甚至无法依赖目标服务器来告诉您它无法提供。

实际上,您可能最好对电子邮件地址进行语法检查,并且(可能)查看是否有电子邮件地址的域部分的DNS条目。


请注意,邮件传递中发生的大量混淆都是为了阻止垃圾邮件发送者。