8

SmtpClientメールを送信する前に、インスタンスに設定されているユーザー名とパスワードを検証する必要があります。このコードの使用:

SmtpClient client = new SmtpClient(host);
client.Credentials = new NetworkCredential(username,password);
client.UseDefaultCredentials = false;

// Here I need to verify the credentials(i.e. username and password)
client.Send(mail);

資格情報で識別されたユーザーが接続してメールを送信できるかどうかを確認するにはどうすればよいですか?

4

6 に答える 6

3

メールを送信する前にユーザー名とパスワードを検証するための私の本番コード:

public static bool ValidateCredentials(string login, string password, string server, int port, bool enableSsl) {
        SmtpConnectorBase connector;
        if (enableSsl) {
            connector = new SmtpConnectorWithSsl(server, port);
        } else {
            connector = new SmtpConnectorWithoutSsl(server, port);
        }

        if (!connector.CheckResponse(220)) {
            return false;
        }

        connector.SendData($"HELO {Dns.GetHostName()}{SmtpConnectorBase.EOF}");
        if (!connector.CheckResponse(250)) {
            return false;
        }

        connector.SendData($"AUTH LOGIN{SmtpConnectorBase.EOF}");
        if (!connector.CheckResponse(334)) {
            return false;
        }

        connector.SendData(Convert.ToBase64String(Encoding.UTF8.GetBytes($"{login}")) + SmtpConnectorBase.EOF);
        if (!connector.CheckResponse(334)) {
            return false;
        }

        connector.SendData(Convert.ToBase64String(Encoding.UTF8.GetBytes($"{password}")) + SmtpConnectorBase.EOF);
        if (!connector.CheckResponse(235)) {
            return false;
        }

        return true;
    }

同様の質問への回答の詳細。

github のコード

于 2016-03-20T09:06:52.800 に答える
3

道はない。

SmtpClient は基本的に、接続先のサーバーに接続せずに usernamepassword を検証できません。

あなたができることは、サーバーへのTCP接続を開くことによって、SmtpClientの外でそれを行うことです...しかし、サーバーの構成方法によっては認証が複雑になる可能性があります。

送信する前に、なぜそれを知る必要があるのか​​お尋ねしてもよろしいですか? 私見の通常の動作は、適切なエラー処理で送信をラップして、ここで例外をキャッチすることです。

于 2010-03-11T15:19:40.563 に答える
1

.NetSmtpClientでは、メッセージを送信せずにログインすることはできません。

受信メールを無視する既存のアドレスにテストメッセージを送信し、例外が発生するかどうかを確認することで、資格情報を確認できます。

これらのテストメールは、アカウントの送信済みフォルダに表示されることに注意してください(Gmailなど)。

于 2010-03-11T15:28:48.637 に答える
1

以前に検証したところ、.net 2.0 の SMTP クライアント クラスではメールを送信できません。

ポートを開いて手で検証しようとするのは、独自の SMTP クライアントを作成するのと同じくらい良いことですが、複雑です。

于 2010-03-11T15:24:35.373 に答える
0

SmtpClient は送信しないと検証できないという以前の回答に同意します。

しかし、とにかく問題を解決できる可能性があります。ユーザー名またはパスワードが間違っている場合client.Send(mail);、例外がスローされます。送信の周りに while ループと try-catch-block を構築し、例外をキャッチして、ユーザーに正しいユーザー名とパスワードを要求してから、再試行できます。ユーザーがダイアログでキャンセルをクリックするか、送信が例外なく成功した場合、while ループを終了します。

于 2010-04-29T10:32:50.733 に答える
0

これを試して:

try
{
   smtpClient.Send(new MailMessage("test@test.com", "test@test.com", "test", "test"));
   return string.Empty;
}
catch (SmtpFailedRecipientException)
{
   return string.Empty;
}
catch (Exception ex)
{
   return string.Format("SMTP server connection test failed: {0}", ex.InnerException != null ? ex.InnerException.Message : ex.Message);
}

私の検証方法ではうまくいきます。ただし、電子メールの送信時に資格情報を確認するだけでよい場合は、送信を try...catch で囲みます。

于 2013-09-10T08:47:53.793 に答える