我見過一些php的例子,說明如何ping一個收件箱(不發送任何郵件)來檢查它是否存在。我想知道如果有人知道這是可能的.NET。如果是我要寫一個應用程序來對我通過我的網站捕獲的電子郵件列表進行批量檢查。我可以使用.net來檢查電子郵件地址是否存在嗎?
回答
如果你寫「檢查郵件」,你的意思是?如果不發送電子郵件所有者的特定鏈接,則無法檢查該鏈接,因此只能檢查電子郵件的語法以及與smtp的連接。
public static bool isEmail(string inputEmail)
{
inputEmail = NulltoString(inputEmail);
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
Regex re = new Regex(strRegex);
if (re.IsMatch(inputEmail))
return (true);
else
return (false);
}
SMTP檢查
string[] host = (address.Split('@'));
string hostname = host[1];
IPHostEntry IPhst = Dns.Resolve(hostname);
IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
Socket s= new Socket(endPt.AddressFamily,
SocketType.Stream,ProtocolType.Tcp);
s.Connect(endPt);
這並非萬無一失。你能做的最好的是檢查語法,看看域名是否解析。
電子郵件語法的正則表達式: (?<username>#?[_a-zA-Z0-9-+]+(\.[_a-zA-Z0-9-+]+)*)@(?<domain>[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|arpa|asia|coop|info|jobs|mobi|museum|name|travel)))
嗯,我沒有失望,但它可能是因爲問題明確要求解決方案來ping服務器,而不是檢查語法。答案之後,這個問題可能會改變。 – 2011-02-28 10:48:30
不,這在原則上是不可能的檢查,如果電子郵件存在 - 語言無關。 沒有協議可以做到。
有一些局部解決方案,但沒有一個是可靠的。
有關詳細信息,請參見How to check if an email address exists without sending an email?。
SMTP defines the VRFY
command for this,但由於垃圾郵件發送者的濫用使合法用途的數量大打折扣,幾乎世界上每個電子郵件服務器都是configured to lie。
protected bool checkDNS(string host, string recType = "MX")
{
bool result = false;
try
{
using (Process proc = new Process())
{
proc.StartInfo.FileName = "nslookup";
proc.StartInfo.Arguments = string.Format("-type={0} {1}", recType, host);
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.ErrorDialog = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
{
if ((e.Data != null) && (!result))
result = e.Data.StartsWith(host);
};
proc.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
{
if (e.Data != null)
{
//read error output here, not sure what for?
}
};
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit(30000); //timeout after 30 seconds.
}
}
catch
{
result = false;
}
return result;
}
這已經過測試並正在運行。我基本上轉換了PHP示例。 – 2015-01-26 21:52:31
http://www.codicode.com/art/free_asp_net_email_validator_verifier.aspx。 使用DLL參考您的代碼。它是免費的個人使用和再分配。它在沒有實際發送電子郵件的情況下檢查域名的存在。
- 1. 檢查電子郵件地址是否已存在db
- 2. 如何檢查電子郵件地址是否存在?
- 3. 如何檢查電子郵件地址是否存在codeigniter
- 4. 如何檢查電子郵件地址是否存在。驗證
- 5. 檢查電子郵件地址是否存在
- 6. 是否可以在電子郵件地址中使用double @?
- 7. NSDataDetector可以檢測URL而不是電子郵件地址嗎?
- 8. 檢查電子郵件地址是否已被使用
- 9. 我可以使用robots.txt禁止電子郵件地址嗎?
- 10. 我們如何檢查電子郵件地址是否有效?
- 11. 檢查電子郵件是否存在
- 12. 如何檢查電子郵件地址是否存在或不使用android?
- 13. 如何檢查電子郵件地址是否存在?使用C#,ASP.NET
- 14. 檢查PayPal帳戶是否存在使用電子郵件地址?
- 15. 檢查電子郵件地址是否爲子域名
- 16. 檢查一些電子郵件地址是否在gravatar註冊?
- 17. 檢查文本是否包含電子郵件地址在Android
- 18. 如何檢查電子郵件地址是否是假的?
- 19. 是否可以使用Javascript檢查新的Gmail電子郵件?
- 20. 使用AppleScript,是否可以檢查未讀電子郵件?
- 21. CakePHP 1.3 - 檢查數據庫中是否存在用戶電子郵件地址?
- 22. 是否可以確定用戶的@ Facebook.com電子郵件地址?
- 23. 如何檢查電子郵件地址是否有效?
- 24. Android檢查電子郵件地址是否有效?
- 25. 檢查電子郵件地址是否屬於雅虎
- 26. 檢查電子郵件地址是否屬於雅虎?
- 27. 檢查一個電子郵件地址是否基於谷歌
- 28. 檢查字符串是否包含電子郵件地址
- 29. 如何檢查電子郵件地址是否正常工作?
- 30. 如何檢查電子郵件地址是否屬於Gmail
不僅在.NET中不可能,它完全不是可能的。 – 2010-10-07 16:01:44
可能重複[如何檢查電子郵件地址是否存在,而不發送電子郵件?](http://stackoverflow.com/questions/565504/how-to-check-if-an-email-address-exists-without-發送電子郵件) – 2010-10-07 16:04:57
@Daniel,我認爲這是phil的意思是「我見過一些php的例子」,這個問題是關於.NET的。當然,「沒有可靠的方式」是正確的答案,不管語言如何。 – 2010-10-07 16:07:05