我正在编写一个桌面应用程序,需要验证用户的电子邮件ID。
有人可以告诉我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?
答案 0 :(得分: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;
}
但是你要找的东西看起来会多一点。我正在阅读的是您要验证主机是否存在,并检查它是否可以接受邮件。我知道知道这样做的方法很简单,但您可以使用命令shell运行类型为 MX 的nslookup
,以查看是否获得了可接受的回报。以下代码示例在这方面是不完整的,您将必须创建一个解析函数并开发到您自己的标准。
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
类的一个警告是它将地址解析为局部和域部分,并且在局部部分看起来有内部修剪;它会在 @ 符号前面留出一个空格;我通常在实施之前进行空格检查。