在asp.net中是否有验证电子邮件地址的功能?

时间:2009-11-28 10:10:51

标签: asp.net email

我注意到如果您尝试向无效地址发送电子邮件,则会引发异常:

MailAddress To=new MailAddress("invalidemailaddress","recipientname");

抛出:

 "The specified string is not in the form required for an e-mail address"

这意味着必须有一个在MailAddress中执行的.Net函数来检查电子邮件地址是否有效。有没有办法直接调用这个'验证'功能?这样我就不需要创建自己的IsValid函数了。

5 个答案:

答案 0 :(得分:9)

不,但你可以制作一个:

public bool ValidateEmailAddress (string email)
{
   if (string.IsNullOrEmpty (email)) return false;

    try
    {
        MailAddress to = new MailAddress (email);

        return true;
    }
    catch (WhateverException e)
    {
        return false;
    }
}

回答评论。我知道这种技术被认为是一种坏的,有理由的。我想指出的是,这种方法将使您100%保证.NET邮件库最近能够发送到经过验证的地址。 Regexes(其中有很多)的问题在于每个都按照规范解决技术上正确的地址集的一个特定子集。一个会更窄,另一个会比.NET内部定义的子集更宽。如果您要使用Regex验证,那么在第一种情况下,您的Regex会切断部分有效地址(如.NET所示),在后一种情况下,验证将通过.NET邮件库赢得的地址。根据自己的内部验证,视为无效。确保有效集100%匹配.NET集(或您将使用的任何其他第三方库)的一种真正方法是尝试/捕获方法,除非当然第三方库提供了一些验证方法已经

答案 1 :(得分:2)

是的,有这样的.Net功能,但“标准”意味着它的功能无法访问:MailAdress使用私有ParseAddress方法,而后者又使用System.Net.Mime.MailBnfHelper。后者是一个internal类,因此它不能(很容易)在框架本身之外访问。

因此,使用这些函数的唯一方法是使用反射,我强烈反对。由于这些函数没有文档记录且无法访问而没有反射,因此它们的实现可能会发生变化,并且您的代码可能会在未来版本的框架中中断。

答案 2 :(得分:1)

有一个很好的电子邮件验证示例function on CodeProject

Vasudevan Deepak Kumar撰写的原始源代码:

public static bool isEmail(string inputEmail)
{
   inputEmail  = NulltoString(inputEmail);
   string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
         @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
         @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

   Regex re = new Regex(strRegex);

   if (re.IsMatch(inputEmail))
    return (true);
   else
    return (false);
}

答案 3 :(得分:0)

不幸的是,遗憾的是,如果不对其进行逆向工程或使用该特定异常,就无法获得该功能。

验证电子邮件地址的传统方式一直是使用正则表达式,但如果您愿意,还可以通过更长时间来验证电子邮件:

The Forgotten Art of Email Address Validation

答案 4 :(得分:0)

你可以写自己的课程:

class EmailAddress
{
  private MailAddress _email;

  public string Address
  {
    get
    {
      return _email == null ? string.Empty : _email.Address;
    }
  }

  public string DisplayName
  {
    get
    {
      return _email == null ? string.Empty : _email.DisplayName;
    }
  }

  public string Host
  {
    get
    {
      return _email == null ? string.Empty : _email.Host;
    }
  }

  public string User
  {
    get
    {
      return _email == null ? string.Empty : _email.User;
    }
  }

  public EmailAddress(string email)
  {
    try {
      _email = new MailAddress(email);
    }
    catch (Exception) {
      _email = null;
    }
  }

  public EmailAddress(string email, string displayName)
  {
    try {
      _email = new MailAddress(email, displayName);
    }
    catch (Exception) {
      _email = null;
    }
  }

  public EmailAddress(string email, string displayName, Encoding displayNameEncoding)
  {
    try {
      _email = new MailAddress(email, displayName, displayNameEncoding);
    }
    catch (Exception) {
      _email = null;
    }
  }

  public bool IsValid()
  {
    return _email == null ? false : true;
  }

  public override string ToString()
  {
    return this.Address;
  }
}

现在您将其用作MailAddress,但现在电子邮件地址无效时也没有例外。而是调用IsValid方法:

var email = new EmailAddress("user@host.com");
if (email.IsValid()) {
  ...
}
else {
  ...
}