Delphi:验证没有正则表达式的电子邮件

Vla*_*sny 6 delphi email validation delphi-7 delphi-2010

由于Delphi没有内置任何正则表达式库,您是否看到了一个很好的功能来至少在某种程度上仅使用Delphi RTL/VCL来验证电子邮件地址?

我不想将额外的*.dll链接到我的产品集成正则表达式支持,我也需要Delphi 7兼容性.将正则表达式库嵌入到exe中会增加它的大小,我怀疑它是否值得添加下一个100k,因为你只需要10-50行的电子邮件验证功能.

Jer*_*ers 5

电子邮件地址验证的一个大问题是RFC 822如此广泛,没有正则表达式会有所帮助.

文章我知道如何验证电子邮件地址直到我阅读RFC很好地描述了这一点.
它引用了RFC the local-part MUST be interpreted and assigned semantics only by the host specified in the domain part of the address(这local part@在电子邮件地址中签名之前的部分).

因此:
检查电子邮件地址是否有效的唯一方法是设置与主机接受该特定域的邮件的SMTP连接,并使用您要验证的电子邮件地址启动电子邮件握手过程.

这是许多反垃圾邮件软件用于验证发件人电子邮件地址的内容:他们联系电子邮件发件人的SMTP服务器,尝试设置SMTP握手,如果一切正常,他们会对收到的邮件进行评级更像不是垃圾邮件.

您可以使用Indy SMTP客户端组件发送邮件; 这个问题的接受答案解释了如何.

--jeroen

  • RFC 822已被2822淘汰,删除了822允许的一些语法.无论如何,很少需要完整的2822语法 - 允许更简单的正则表达式 (4认同)
  • 您不需要仅为了验证地址而进行SMTP电子邮件握手.是的,您必须连接到电子邮件域的SMTP服务器,但之后您可以使用SMTP`VRFY`命令询问服务器地址是否有效.Indy的TIdSMTP组件有一个Verify()方法. (2认同)

Mar*_*rko 5

根据要求,我正在作出答复.

http://www.howtodothings.com/computers/a1169-validating-email-addresses-in-delphi.html

谢谢!

  • 最近经历过这个,诉诸于移植 Apache Commons 验证器,这似乎被广泛接受为“足够好” - http://github.com/leus/delphi-emailvalidator (3认同)
  • 请注意,该代码实现了一个过时的规范。在代码首次发布时它甚至已经过时了。 (2认同)
  • 如果域名以数字开头(且该数字是有效的电子邮件),则此功能将失败。例如:me@1domain.com (2认同)