在调用SmtpClient.Send()之前如何知道域名是坏的?

时间:2010-03-05 21:13:06

标签: c# .net email smtp

我有从代码网页向用户发送电子邮件的代码。有时,用户会错误输入电子邮件地址,并且该地址最终会出现域名错误。

我希望能够在调用System.Net.Mail.SmtpClient.Send()方法之前检查域是否错误,因为这会带来更好的用户体验。我认为使用AJAX立即告诉用户他们的电子邮件不会发送而不必以编程方式发送电子邮件,然后再发现它不好更优雅。

我目前正在处理错误,所以请不要讨论如何处理错误。我得到的错误是: “邮箱不可用。服务器响应为::收件人地址被拒绝:找不到域”

在调用Send()方法之前,有没有人知道使用类似(或相同的)代码来验证域是否坏的方法?

4 个答案:

答案 0 :(得分:3)

确保为给定域实际配置邮件服务器的最可靠方法是该域的query the MX record

答案 1 :(得分:2)

尝试这样的事情:

string email = "person@domain.com"
MailAddress ma = new MailAddress(email); // Throws exception if email address is incorrectly formatted
System.Net.Dns.GetHostEntry(ma.Host); // Throws exception if host is invalid

答案 2 :(得分:1)

以下是一篇很好的文章:http://www.codeproject.com/KB/validation/Valid_Email_Addresses.aspx

根据我的经验,我只使用正则表达式验证器来验证格式并使用确认类型的系统来确保它是有效的地址。

更新:那篇文章很旧,所以我会检查以确保不会弃用。

答案 3 :(得分:0)

也许使用System.Net.Dns.GetHostByName(hostname)并确定它是否有效的回复?

虽然MSDN告诉我该方法已被弃用......

也许System.Net.Dns.GetHostEntry(hostname)是它的前身吗?