使用System.Net.Mail.MailAddress验证电子邮件失败

时间:2012-11-23 18:13:54

标签: asp.net vb.net

我正在尝试使用以下代码验证电子邮件地址列表:

Public Function ValidateEmailAddressField() As Boolean
    Dim isValid As Boolean = True
    Try
        txtServiceEmails.Text = txtServiceEmails.Text.Trim.Replace(",", ";")
        Dim validateMailAddress = New MailAddress(txtServiceEmails.Text.Trim)
        Return isValid
    Catch ex As Exception
        isValid = False
        Return isValid
    End Try

End Function

当我输入“johndoe @ amce”或“johndoe @ acme,janedoe @ acme.org”时,代码验证为true。是否输入了没有扩展名的电子邮件地址,例如“.com”,实际上被视为有效的电子邮件地址?

谢谢,

crjunk

3 个答案:

答案 0 :(得分:1)

在合作环境中,域名不必具有.com / net / org ...'acme'可能是有效域名,因此,电子邮件me @ acme可能是内部有效的电子邮件地址。

通常,人们使用正则表达式来确认有效的电子邮件地址。有很多例子。

答案 1 :(得分:0)

是的,它是有效的。电子邮件地址的域名部分必须符合主机名的要求,并且根据本地配置,“扩展名”可能是适用的。

  

如果指定了包括顶级域名(TLD)在内的所有标签,则主机名被视为完全限定域名(FQDN)。主机名en.wikipedia.org终止于顶级域组织,因此是完全限定的。根据操作系统DNS软件实现,诸如csail或wikipedia之类的非限定主机名可以自动与配置到系统中的默认域名组合,以便确定完全限定的域名。 例如,麻省理工学院的学生可以将邮件发送到“joe @ csail”并通过邮件系统自动将其发送到joe@csail.mit.edu

来源:Wikipedia

答案 2 :(得分:0)

为正则表达式验证器解决方案而定。

Public Function ValidateEmailAddressField() As Boolean

    Dim isValid As Boolean = True
    Dim emailExpression As New Regex("^((\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*[,;:]){1,100}?)?(\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4})*$")
    Try
        txtServiceEmails.Text = txtServiceEmails.Text.Trim.Replace(",", ";")
        txtServiceEmails.Text = txtServiceEmails.Text.Trim.Replace(" ", "")
        isValid = emailExpression.IsMatch(txtServiceEmails.Text.Trim)

        Return isValid

    Catch ex As Exception
        isValid = False
        Return isValid
    End Try

End Function