电子邮件SMTP验证器

时间:2020-03-05 18:43:09  来源:igfitidea点击:

我需要发送数百封新闻通讯,但想首先检查服务器上是否存在电子邮件。根据我对Internet的研究,至少我认为它被称为SMTP验证。

有几个库可以做到这一点,还有一个页面包含ASP Classic中的开放源代码(http://www.coveryourasp.com/ValidateEmail.asp#Result3),但是我很难阅读ASP Classic,看来它使用了一些第三方库...

是否有一些C#中用于SMTP验证的代码和/或者有关其工作原理的一般说明?

解决方案

回答

Real(TM)电子邮件验证正在尝试将某些内容发送到该地址,并查看其是否被拒绝/退回。因此,我们只需要将它们发送出去,然后从邮件列表中删除失败的地址即可。

回答

SMTP是通过TCP / IP承载的基于文本的协议。

验证程序需要打开与服务器端口25(SMTP)的TCP / IP连接,写几行并阅读答案。在" RCTP TO"行和" VFRY"行进行验证(但并非总是如此)。

SMTP RFC描述了它的工作方式(请参阅下面的Green @ Beta.ARPA,S是客户端发送的行,R是从服务器接收的行):

Example of the SMTP Procedure

         This SMTP example shows mail sent by Smith at host Alpha.ARPA,
         to Jones, Green, and Brown at host Beta.ARPA.  Here we assume
         that host Alpha contacts host Beta directly.

            S: MAIL FROM:
            R: 250 OK

            S: RCPT TO:
            R: 250 OK

            S: RCPT TO:
            R: 550 No such user here

回答

请注意,大多数MTA(邮件传输代理)出于垃圾邮件防护的原因将关闭VRFY命令,如果我们连续尝试多个RCPT TO,它们甚至可能阻止我们(请参阅http://www.spamresource.com/ 2007/01 / whatever-happened-to-vrfy.html)。因此,即使我们找到进行该验证的库,也不会有太多价值。 Ishmaeel是正确的,要真正找出答案的唯一方法是发送电子邮件,然后查看邮件是否反弹。

@Hrvoje:是的,我建议我们监视被拒绝的电子邮件。但是:并非所有退回的邮件都应自动出现在"不存在"列表中,还必须区分临时错误(例如,邮箱已满)和永久错误。

回答

不要以这种错误的方式,但是如今,将新闻通讯发送给少数人是一件相当严重的事情。是的,我们需要监视退回(被拒绝的电子邮件),这些退回可能在SMTP发送期间同步发生(通常是在我们连接的SMTP服务器具有权威性的情况下),或者作为系统生成的电子邮件异步发生,在之后一段时间SMTP发送成功。

发送这些电子邮件时,请牢记《 CAN-SPAM法案》并遵守法律;我们必须提供取消订阅链接以及实际的街道地址(为了标识我们和t0,用户可以选择通过蜗牛邮件发送取消订阅请求)。

不执行这些操作可能会使IP最佳路由为空,而在最坏的情况下被起诉。

回答

的确,许多域会由于滥用而返回误报,但仍然有一些出色的组件可以执行除SMTP验证之外的多个级别的验证。例如,首先检查是否至少存在该域是值得的。我正在整理自己的与该问题相关的资源列表,我们可以在此处进行跟踪:

http://delicious.com/dworthley/email.validation

对于那些可能想要添加到此列表中的人,我还将在此处提供当前的内容:

  • aspNetMX
  • .NET电子邮件验证向导类库
  • MONOProg电子邮件Validator.Net

对于防弹形式和出色的用户体验,验证电子邮件地址的尽可能多的方面将很有帮助。我可以从aspNetMX验证器看到他们检查了:

  • 语法
  • 针对错误的电子邮件地址列表的电子邮件
  • 针对不良域名列表的域名
  • 邮箱域列表
  • 域是否存在
  • 域中是否有MX记录
  • 最后通过SMTP是否存在邮箱

这是管理员可以通过基本上对所有帐户验证请求返回true来绕过的最后一步,但是在大多数情况下,如果用户故意输入了错误的地址,则已经被发现。并且,如果是地址的域部分中的用户错误,也会被捕获。

当然,将这种服务用于注册屏幕或者表格的最佳实践是将这种验证与验证过程结合起来,以确保电子邮件地址有效。在验证过程之前使用电子邮件验证器的好处在于,它可以带来更好的整体用户体验。

回答

我们可能需要此.NET的电子邮件验证程序组件。

这是代码示例:

// Create a new instance of the EmailValidator class.
   EmailValidator em = new EmailValidator();
   em.MessageLogging += em_MessageLogging;
   em.EmailValidated += em_EmailValidationCompleted;
   try
   {
       string[] list = new string[3] { "[email protected]", "[email protected]", "[email protected]" };
       em.ValidateEmails(list);
   }
   catch (EmailValidatorException exc2)
   {
       Console.WriteLine("EmailValidatorException: " + exc2.Message);
   }