How do I validate email address formatting with the .NET Framework?

前端 未结 11 606
孤城傲影
孤城傲影 2020-11-29 05:49

I want a function to test that a string is formatted like an email address.

What comes built-in with the .NET framework to do this?

This works:



        
相关标签:
11条回答
  • 2020-11-29 06:13

    Don't bother with your own validation. .NET 4.0 has significantly improved validation via the MailAddress class. Just use MailAddress address = new MailAddress(input) and if it throws, it's not valid. If there is any possible interpretation of your input as an RFC 2822 compliant email address spec, it will parse it as such. The regexes above, even the MSDN article one, are wrong because they fail to take into account a display name, a quoted local part, a domain literal value for the domain, correct dot-atom specifications for the local part, the possibility that a mail address could be in angle brackets, multiple quoted-string values for the display name, escaped characters, unicode in the display name, comments, and maximum valid mail address length. I spent three weeks re-writing the mail address parser in .NET 4.0 for System.Net.Mail and trust me, it was way harder than just coming up with some regular expression since there are lots of edge-cases. The MailAddress class in .NET 4.0 beta 2 will have this improved functionality.

    One more thing, the only thing you can validate is the format of the mail address. You can't ever validate that an email address is actually valid for receiving email without sending an email to that address and seeing if the server accepts it for delivery. It is impossible and while there are SMTP commands you can give to the mail server to attempt to validate it, many times these will be disabled or will return incorrect results since this is a common way for spammers to find email addresses.

    0 讨论(0)
  • 2020-11-29 06:15

    You should use Regular Expressions to validate email addresses.

    0 讨论(0)
  • 2020-11-29 06:17

    MSDN Article: How to: Verify That Strings are in Valid E-Mail Format

    This example method calls the Regex.IsMatch(String, String) method to verify that the string conforms to a regular expression pattern.

    Function IsValidEmailFormat(ByVal s As String) As Boolean
        Return Regex.IsMatch(s, "^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$")
    End Function
    
    0 讨论(0)
  • 2020-11-29 06:17

    EMails like "address@localhost" and "user@192.168.1.2" are actually valid addresses and you can test these by running your own email server (usually done by modifying the host file as well). For a complete solution, however:

    ''' <summary>
    ''' METHODS FOR SENDING AND VALIDATING EMAIL
    ''' </summary>
    ''' <remarks></remarks>
    Public Class email
    
        ''' <summary>
        ''' check if email format is valid
        ''' </summary>
        ''' <param name="emailAddress">[required] Email address.</param>
        ''' <param name="disallowLocalDomain">[optional] Allow headers like "@localhost"?</param>
        ''' <param name="allowAlerts">[optional] Enable error messages?</param>
        ''' <returns>Returns true if email is valid and false otherwise.</returns>
        ''' <remarks></remarks>
        Public Shared Function isValid(ByVal emailAddress As String,
                                       Optional ByVal disallowLocalDomain As Boolean = True,
                                       Optional ByVal allowAlerts As Boolean = True
                                       ) As Boolean
            Try
                Dim mailParts() As String = emailAddress.Split("@")
                If mailParts.Length <> 2 Then
                    If allowAlerts Then
                        MsgBox("Valid email addresses are formatted [sample@domain.tld]. " &
                               "Your address is missing a header [i.e. ""@domain.tld""].",
                               MsgBoxStyle.Exclamation, "No Header Specified")
                    End If
                    Return False
                End If
                If mailParts(mailParts.GetLowerBound(0)) = "" Then
                    If allowAlerts Then
                        MsgBox("Valid email addresses are formatted [sample@domain.tld]. " &
                               "The username portion of the e-mail address you provided (before the @ symbol) is empty.",
                               MsgBoxStyle.Exclamation, "Invalid Email User")
                    End If
                    Return False
                End If
                Dim headerParts() As String = mailParts(mailParts.GetUpperBound(0)).Split(".")
                If disallowLocalDomain AndAlso headerParts.Length < 2 Then
                    If allowAlerts Then
                        MsgBox("Valid email addresses are formatted [sample@domain.tld]. " &
                               "Although addresses formatted like [sample@domain] are valid, " &
                               "only addresses with headers like ""sample.org"", ""sample.com"", and etc. " &
                               "[i.e. @domain.org] are accepted.",
                               MsgBoxStyle.Exclamation, "Invalid Header")
                    End If
                    Return False
                ElseIf headerParts(headerParts.GetLowerBound(0)) = "" Or
                       headerParts(headerParts.GetUpperBound(0)) = "" Then
                    If allowAlerts Then
                        MsgBox("Valid email addresses are formatted [sample@domain.tld]. " &
                               "Your header """ & mailParts(mailParts.GetUpperBound(0)) & """ is invalid.",
                               MsgBoxStyle.Exclamation, "Invalid Header")
                    End If
                    Return False
                End If
                Dim address As MailAddress = New MailAddress(emailAddress)
            Catch ex As Exception
                If allowAlerts Then
                    MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Invalid Email Address")
                End If
                Return False
            End Try
            Return True
        End Function
    
    End Class 'email'
    
    0 讨论(0)
  • 2020-11-29 06:19
        Public Function ValidateEmail(ByVal strCheck As String) As Boolean
            Try
                Dim vEmailAddress As New System.Net.Mail.MailAddress(strCheck)
            Catch ex As Exception
                Return False
            End Try
            Return True
        End Function
    
    0 讨论(0)
  • 2020-11-29 06:24

    you first have to restrict user by entering wrong symbols, you can do this by using textbox KeyPress event

    Private Sub txtemailid_KeyPress(ByVal sender As System.Object, 
                                    ByVal e As System.Windows.FormsKeyPressEventArgs) Handles txtemailid.KeyPress
    
        Dim ac As String = "@"
        If e.KeyChar <> ChrW(Keys.Back) Then
            If Asc(e.KeyChar) < 97 Or Asc(e.KeyChar) > 122 Then
                If Asc(e.KeyChar) <> 46 And Asc(e.KeyChar) <> 95 Then
                    If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
                        If ac.IndexOf(e.KeyChar) = -1 Then
                            e.Handled = True
    
                        Else
    
                            If txtemailid.Text.Contains("@") And e.KeyChar = "@" Then
                                e.Handled = True
                            End If
    
                        End If
    
    
                    End If
                End If
            End If
    
        End If
    
    End Sub
    

    the above code will only allow user to input a-z(small), 0 to 9(digits), @,., _

    and after using validating event of textbox control to validate the email id using regular expression

    Private Sub txtemailid_Validating(ByVal sender As System.Object, 
                                      ByVal e As System.ComponentModel.CancelEventArgs) 
        Handles txtemailid.Validating
    
        Dim pattern As String = "^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$"
    
    
        Dim match As System.Text.RegularExpressions.Match = Regex.Match(txtemailid.Text.Trim(), pattern, RegexOptions.IgnoreCase)
        If (match.Success) Then
            MessageBox.Show("Success", "Checking")
        Else
            MessageBox.Show("Please enter a valid email id", "Checking")
            txtemailid.Clear()
        End If
    End Sub
    
    0 讨论(0)
提交回复
热议问题