電子メールドメインが存在するかどうか確認したいSocket.Connectが失敗した場合、そのドメインは存在しないと言うことができますか?
Dns.GetHostEntry(domain)
が例外をスローすると、ドメインが存在しないことがわかります。
- 私は
Dns.GetHostEntry(domain)
はその後、成功した場合は、ドメインが存在しないかDns.GetHostEntry(domain)
が成功した場合でも、それは、ドメインが存在することを(まだ)という意味ではありませんと言うことはできますか? s.Connect
が接続に失敗したときも同じことが言えますか?接続が例外をスローすると、そのようなドメインが存在しないと言うことができますか?
(1)が真である場合、ドメインが存在するかどうかを確認するには(1)十分でしょうか?
public static bool Lookup(string domain)
{
if (domain == null) throw new ArgumentNullException("domain");
try {
IPHostEntry ipHost = Dns.GetHostEntry(domain);
var endPoint = new IPEndPoint(ipHost.AddressList[0], _dnsPort);
return Transfer(endPoint);
}
catch (SocketException ex)
{
++attempts;
}
return false;
}
public static bool Transfer(IPEndPoint endPoint)
{
int attempts = 0;
while(attempts <= _attempts)
{
try
{
var s = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Connect(endPoint);
}
catch (SocketException ex)
{
++attempts;
}
finally
{
s.Close();
}
}
}
ドメインをホストレコードに解決するだけでは不十分です。 MXレコードをルックアップする必要があります。 >セットタイプは= MX > gmail.com サーバー: 住所: 非公式の答え: gmail.com MX好み= 5、= gmail-smtp-in.l.google.com Gmailのメール交換.com MX環境設定= 10、メールエクスチェンジャー= alt1.gmail-smtp-in.l.google.com gmail.com MX環境設定= 20、メールエクスチェンジャー= alt2.gmail-smtp-in.l.google.com gmail .com MXの設定= 30、メールエクスチェンジャー= alt3.gmail-smtp-in.l.google.com ... –