2012-05-03 9 views
0

電子メールドメインが存在するかどうか確認したいSocket.Connectが失敗した場合、そのドメインは存在しないと言うことができますか?

Dns.GetHostEntry(domain)が例外をスローすると、ドメインが存在しないことがわかります。

  1. 私はDns.GetHostEntry(domain)はその後、成功した場合は、ドメインが存在しないかDns.GetHostEntry(domain)が成功した場合でも、それは、ドメインが存在することを(まだ)という意味ではありませんと言うことはできますか?
  2. 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(); 
     } 
    } 
} 

答えて

2

あなたはいくつかのことを言っているソケットに接続しようとする:

  • ターゲットマシンに私のマシンからネットワーク経路
  • があるネットワークパスがファイアウォールの明確ですその他の制限
  • ターゲットマシンがターゲットポート上でサービスをホストしています
  • ターゲットマシンがそのターゲットサービスで自分の接続を受け入れています

これらのすべてはの後にとなり、ホスト名はIPに解決されました。

あなたの質問に対する回答はで、です。 Socket.Connectが失敗した場合は、ドメインが存在しないか、または上記の理由のいずれか(さらに多分)が存在する可能性があります。

+0

ドメインをホストレコードに解決するだけでは不十分です。 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 ... –

0

調査の結果、mxレコードをDNSに対してチェックすると、ドメインが電子メールを受信できるかどうかがわかります。 DNSサーバーがドメインのmxレコードを返す場合、ドメインが電子メールを受信できることを意味します。返されるmxレコードがない場合、ドメインは電子メールを受信できません。==このようなドメインは存在しません。