簡體   English   中英

如何檢查電子郵件是否為有效格式

[英]How to check if email is valid format or not

以下電子郵件格式無效

fulya_42_@hotmail.coö

但是到目前為止,我發現並嘗試使用C#進行的所有驗證都表明這是正確的電子郵件,但不是

如何使用C#4.5.2驗證電子郵件是否有效? 謝謝

確定更新的問題

我要問的原因是最大的電子郵件服務mandrill api之一,當您嘗試通過電子郵件發送此地址時會引發內部服務器錯誤

因此,他們甚至在嘗試發送電子郵件之前都必須使用某種驗證。 我的目的是在嘗試謝謝之前先找到他們用什么來消除此類電子郵件

通過使用正則表達式

string emailID = "fulya_42_@hotmail.coö";

        bool isEmail = Regex.IsMatch(emailID, @"\A(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)\Z");

        if (isEmail)
        {
            Response.Write("Valid");
        }

https://msdn.microsoft.com/zh-cn/library/01escwtf(v=vs.110).aspx檢查以下類

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class RegexUtilities
{
   bool invalid = false;

   public bool IsValidEmail(string strIn)
   {
       invalid = false;
       if (String.IsNullOrEmpty(strIn))
          return false;

       // Use IdnMapping class to convert Unicode domain names. 
       try {
          strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper,
                                RegexOptions.None, TimeSpan.FromMilliseconds(200));
       }
       catch (RegexMatchTimeoutException) {
         return false;
       }

        if (invalid)
           return false;

       // Return true if strIn is in valid e-mail format. 
       try {
          return Regex.IsMatch(strIn,
                @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
       }
       catch (RegexMatchTimeoutException) {
          return false;
       }
   }

   private string DomainMapper(Match match)
   {
      // IdnMapping class with default property values.
      IdnMapping idn = new IdnMapping();

      string domainName = match.Groups[2].Value;
      try {
         domainName = idn.GetAscii(domainName);
      }
      catch (ArgumentException) {
         invalid = true;
      }
      return match.Groups[1].Value + domainName;
   }
}

或在此處查看@Cogwheel答​​案C#代碼以驗證電子郵件地址

可以使用以下方式匹配電子郵件地址的正則表達式:

 return Regex.IsMatch(strIn, 
              @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
              @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$", 
              RegexOptions.IgnoreCase);

參考MSDN

但是在您的情況下:

fulya_42_@hotmail.coö

如果您正在從“ .coo ”中檢查電子郵件地址的有效性(根據您的觀察是無效的),則它不會顯示任何錯誤,因為regex不會對此進行驗證,因此您必須手動添加一些您接受的域,例如: gmail.com,yahoo.com等。

在SonerGonul對問題的評論中正確地說

謝謝

首先,您提供的電子郵件地址采用有效格式 -您可以更進一步,並根據需要驗證域是否有效; 但是無論哪種方式,您都應該驗證所有權,在這種情況下,您將知道電子郵件地址和域是有效的。

其次,您實際上應該使用Regex來驗證電子郵件地址。 電子郵件地址驗證內置於.NET框架中,因此您不應該為這種情況重新創建輪子。

一個執行兩個檢查的簡單驗證函數如下所示:

public static bool IsValidEmailAddress(string emailAddress, bool verifyDomain = true)
{
    var result = false;
    if (!string.IsNullOrWhiteSpace(emailAddress))
    {
        try
        {
            // Check Format (Offline).
            var addy = new MailAddress(emailAddress);

            if (verifyDomain)
            {
                // Check that a valid MX record exists (Online).
                result = new DnsStubResolver().Resolve<MxRecord>(addy.Host, RecordType.Mx).Any();
            }
            else
            {
                result = true;
            }
        }
        catch (SocketException)
        {
            result = false;
        }
        catch (FormatException)
        {
            result = false;
        }
    }

    return result;
}

要運行代碼,您需要安裝NuGet包ARSoft.Tools.Net ,這是MX記錄查找*所必需的,並且需要為所使用的各種類添加適當的using聲明(在VisualStudio中應該是非常自動的)這些日子)​​。

(*:僅通過System.Net.Dns.GetHost*檢查有效的主機名是不夠的,因為對於某些只有MX條目的域,例如admin@fubar.onmicrosoft.com ,這可能會給您帶來一些負面的負面admin@fubar.onmicrosoft.com ,等等。)

暫無
暫無

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

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