2016-06-25 17 views
-3

電子メールが存在することを確認することは不可能だとも言われていますが、メッセージを送信して読むこともできます。だから私は電子メールを送信して、電子メールが存在するかどうかを確認したい。電子メールが存在するかどうかを確認するには

は、ここに私のコードです:

private void email_checker() 
    { 
     MailMessage mm = new MailMessage(); 
     //The email that needs to be checked 
     mm.To.Add(new MailAddress(txtEmailAddress.Text, "Email Check")); 
     mm.From = new MailAddress("*******@gmail.com"); 
     mm.Body = "Verified"; 
     mm.IsBodyHtml = true; 
     mm.Subject = "Verification"; 
     SmtpClient smc1 = new SmtpClient(); 
     smc1.Host = "smtp.gmail.com"; 
     smc1.Port = 587; 
     smc1.Credentials = new NetworkCredential("*****@gmail.com","********"); 
     smc1.EnableSsl = true; 
     smc1.Send(mm); 
    } 

このコードが機能しているが、私は(それは本当に存在していない)が存在しない任意のランダムな電子メールを入力しようとしましたが、コードはまだそれにメッセージを送信します。私は、メッセージが実際には存在しないことを知るようにメッセージが送信されなかった場合にはいつでもプロンプトを出すポップアップメッセージを作成したかったのです。あるいは、検証リンクを送る以外の方法はありませんか?

+1

*受信者が存在しないと伝えることなく、一部のサーバーがメッセージを飲み込んでしまうため、メッセージを送信してメールが存在するかどうかを確認することができます* –

+0

ドメインが存在しない場合のみ、SMTPからエラーが発生する可能性がありますが、ユーザーだけが存在しない場合、唯一の方法は対応するエラーのある別の電子メールを送信して受信し、それを解析することです...またあなたが禁止されるかもしれないので、あなたはこれを大量に行うことはできないことを覚えておいてください。あなたは一連の電子メールアドレスをテストできるサイトがありますが、私はそれらが無料ではないと思います。 – Andrew

答えて

1

メールがあるかどうかを確認する方法はありません。電子メールの送信に使用されるコードは、SmtpClientに電子メールの送信を依頼することです。クライアントのサーバーがスローした場合にのみ例外が発生します。あなたのケースのクライアントのサーバーはGMailです。 Gmailは送信時に失敗しませんが、メールアドレスが見つからなかったことを送信者に返信します。異なるサーバーは異なる動作をします。自動的に電子メールを再試行したり、静かに失敗したり例外を投げたりするように、独自のサーバーをセットアップすることもできます。また、サーバーはdnsを使用するため、電子メールはネットワークには有効ですが、インターネットには有効ではありません。覚えておくべきもう一つのことは、セットアップできるすべての電子メールアドレスをキャッチすることです。したがって、問題の電子メールアドレスは有効ではない可能性がありますが、catchによってすべて捕捉され、有効なアドレスに配信されます。

メールアドレスの存在を検証する方法はありません。

+0

電子メールが存在しない場合でもsmtpはそれを送信しますか?私はそれがエラーを引き起こして捕まえることができることを望んでいました。私の唯一の選択肢は、私が推測している検証です。 –

+0

クライアントが接続するサーバーによって異なります。 GMailはエラーになりません。他のサーバーは、ちょうど依存します。独自のサーバーを設定した場合は、エラーに設定できます。バッチが送信または再試行するか、一定期間「送信トレイ」に残すだけなので、ほとんどの場合エラーは発生しません。これは、GMailのようなプロバイダが、送信される電子メールの量に制限または制限を課すことができる方法です。 – ManOVision

関連する問題