簡體   English   中英

在C#中檢查有效的電子郵件地址

[英]Check Valid email address in c#

我正在c#Windows應用程序中使用smtp服務發送電子郵件。 我必須以最佳方式執行以降低電子郵件跳出率。 我必須檢查提供的電子郵件地址是否有效。 我正在使用代碼。

    private void btnCheckValid_Click(object sender, EventArgs e)
        {
            if (isRealDomain(textBox1.Text.Trim()) == true)
                MessageBox.Show("Valid Email Address!");
        }
        private bool isRealDomain(string inputEmail)
        {
            bool isReal = false;
            try
            {
                string[] host = (inputEmail.Split('@'));
                string hostname = host[1];

                IPHostEntry IPhst = Dns.GetHostEntry(hostname);
                IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
                Socket s = new Socket(endPt.AddressFamily,
                        SocketType.Stream, ProtocolType.Tcp);
                s.Connect(endPt);
                s.Close();
                isReal = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                isReal = false;
            }

            return isReal;
        }

通過檢查真實域,我可以識別托管IP,但是是否在主機上創建了電子郵件地址。

使用正則表達式(正則表達式),我只能驗證格式。

所以我的問題是如何在c#中僅查找任何域的有效地址。

您可以導入System.ComponentModel.DataAnnotations並以這種方式使用它:

private bool validMail(string address)
{
    EmailAddressAttribute e = new EmailAddressAttribute();
    if (e.IsValid(address))
        return true;
    else
        return false;
}

您可以使用如下正則表達式:

    public static bool IsValidEmailAddress(string emailaddress)
    {
        try
        {
            Regex rx = new Regex(
        @"^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@[a-zA-Z](-?[a-zA-Z0-9])*(\.[a-zA-Z](-?[a-zA-Z0-9])*)+$");
            return rx.IsMatch(emailaddress);
        }
        catch (FormatException)
        {
            return false;
      }
}

更新:

如果您要按照評論中的說明驗證特定域,則更為簡單:

Regex rx = new Regex(
@"^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@yourdomain.com$");

用您的域名替換yourdomain.com。

使用.Net郵件命名空間,您可以像這樣驗證電子郵件地址:

using System.Net.Mail;

private bool EmailVerify(string email)

    {
        try
        {
            var mail = new MailAddress(email);

            return mail.Host.Contains(".");
        }
        catch
        {
            return false;
        }
    }

如果您正在使用

System.Net.Mail.SmtpClient

我發現的最准確的方法是嘗試創建一個

System.Net.Mail.MailAddress

賓語。 如果無法使用字符串中的地址創建對象,則將引發以下其中一項:

ArgumentNullException // The address is null
ArgumentException // The address is string.Empty
FormatException // The address is not in a recognized format

https://msdn.microsoft.com/zh-CN/library/591bk9e8(v=vs.110).aspx

我發現

Dns.GetHostEntry

充其量是無聊的。 它似乎無法識別多層域為有效域(domain.subdomain1.subdomain2.com),因此使用該方法檢查域不是確定的。

使用RegEx是可以的,但是它們通常無法將引用的地址和其他有效模式(根據RFC可以使用)識別為有效。

由於要使用SmtpClient類,無論如何都必須具有有效的MailAddress對象,這很有意義。

這是檢查有效電子郵件地址的另一種方法

 public bool IsValidEmail(string email)
    {
        try
        {
            var addr = new System.Net.Mail.MailAddress(email);
            return addr.Address == email;
        }
        catch
        {
            return false;
        }
    }
 public static bool IsValidEmail(string emailaddress)
    {
           return new EmailAddressAttribute().IsValid(emailaddress);
    }
// using System.ComponentModel.DataAnnotations;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM