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

Asp.net 使用System.Net.Mail.MailAddress验证电子邮件失败,asp.net,vb.net,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(txt

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

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

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


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

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

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


来源:

已解决正则表达式验证程序解决方案

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

这就是我害怕的。你知道有什么方法可以设置MailAddress,使没有扩展名的主机名被认为是无效的吗?我可能需要添加一些额外的代码。试图在不使用正则表达式验证的情况下通过。正确验证电子邮件地址很难!我是说真的很难。是的,这方面有很多正则表达式的例子,但它们在某种程度上几乎都是错的!你更关心的是什么;允许输入无效的电子邮件地址或拒绝有效的电子邮件地址。因为,实际上,这是你唯一的选择