2017-04-23 52 views
0

我正在編寫一個桌面應用程序,它需要驗證用戶的電子郵件ID。在php中執行checkdnsrr()函數的.NET#

有人可以告訴我php中的http://php.net/manual/en/function.checkdnsrr.php checkdnsrr()函數的c#.net實現,如果它不存在,給我有一些指針來寫我自己的實現呢?我在網上搜索了幾個小時纔得到答案,但無法找到答案。

在此先感謝。

編輯(S):
請注意,這個問題是不是How to check if an email address exists without sending an email?

+1

可能的重複[如何檢查電子郵件地址是否存在,但不發送電子郵件?](http://stackoverflow.com/questions/565504/how-to-check-if-an-email-address-exists-不發送電子郵件) – Fruchtzwerg

+0

@Fruchtzwerg我已經看到了這個問題,這不是它的重複;我已經問過一個具體的實現,而問題只是問如何。 – hecate

+0

您可能會尋找類似[Dns.GetHostEntry](https://msdn.microsoft.com/en-us/library/ms143998(v = vs.110).aspx)的內容。確保你完全閱讀它的文檔,看看它是否真的符合你的需求(注意GetHostEntry只會返回A記錄......) – elgonzo

回答

1

重複真的是這樣,其可以依賴的不防彈的方式,儘管它已經存在了內歲月FINGER協議;爲了隱私/安全/垃圾信息,在大多數系統上禁用。

因此,我們有幾種標準的方法來驗證,但沒有一個是完美的。我在.NET中看到的最常見的有以下幾種:

正則表達式:有多種模式可用於查看模式是否與RFC所說的合法​​地址匹配。

System.Net.Mail使用MailAddress類來查看指定的輸入是否可以是有效的地址。這實際上做得非常好,但是,它將允許通過我們不會考慮有效地址的項目,例如沒有頂級域名。

private bool isValidEmail (string emailAddress) { 
    bool ReturnValue; 
    try { 
     MailAddress ma = new MailAddress(emailAddress); 
     ReturnValue = true; 
    } 
    catch (Exception) { 
     ReturnValue = false; 
    } 
    return ReturnValue; 
} 

但是你要找的東西需要多一點看起來。我正在閱讀的是您要驗證主機是否存在,並檢查它是否可以接受郵件。我知道有很好的辦法可以做到這一點,但是您可以使用命令行程序運行nslookup,其類型爲MX以查看您是否獲得了可接受的回報。下面的代碼示例在這方面是不完整的,你將不得不創建一個解析函數並發展到你自己的標準。

protected static bool DnsLookup(string HostName) { 
    ProcessStartInfo ProcInfo = new ProcessStartInfo("cmd"); 
    ProcInfo.UseShellExecute = false; 
    ProcInfo.RedirectStandardInput = true; 
    ProcInfo.RedirectStandardOutput = true; 
    ProcInfo.CreateNoWindow = true; 

    bool ReturnValue; 
    using (Process process__1 = Process.Start(ProcInfo)) { 
     StreamWriter sw = process__1.StandardInput; 
     StreamReader sr = process__1.StandardOutput; 

     sw.WriteLine("nslookup -type=mx " + HostName); 
     sw.Close(); 

     string Result = sr.ReadToEnd(); 

     // Parse the Result string to determine validity 
     // and set ReturnValue 
    } 
    return ReturnValue; 
} 

我會做的可能是使用上述的組合。使用MailAddress類來查看格式是否有效,然後嘗試執行nslookup以查看該域是否存在並且具有郵件服務器。

MailAddress類的一個警告是,它將地址解析爲本地和域部分,並且在本地部分看起來具有內部修剪;它將在符號前立即留出一個空格;在實施之前,我通常會進行空間檢查。