同じ問題がありました。次の手順で解決しました:1)Telnetまたはパテまたはその他の端末を使用してSMTPサーバーに接続することにより、サーバーがSMTP認証に提供するものを見つけます:
telnet xxx.yyy.zzz.aaa 587
(xxx.yyy.zzz.aaa = SMTP サーバーの IP アドレス、587 = ポート番号)
< サーバーは「220 プロトコル + バージョン + 時間」で応答します
ehlo testing
< サーバーは機能のリストを表示します。
250-AUTH NTLM CRAM-MD5 LOGIN
SMTP クライアントは、最も安全なプロトコルを最初に採用しようとします。私の場合:
1. System.Net.Mail.SmtpNegotiateAuthenticationModule
2. System.Net.Mail.SmtpNtlmAuthenticationModule
3. System.Net.Mail.SmtpDigestAuthenticationModule
4. System.Net.Mail.SmtpLoginAuthenticationModule
サーバーが LOGIN を実行しようとしている間に、SMTP クライアントが NTLM を試行しているように見えます。
ハッキング ( https://blogs.msdn.microsoft.com/knom/2008/04/16/hacking-system-net-mail-smtpclient/を参照) を使用すると、サーバー以外のすべてのプロトコルを無効にすることができます。仮定します(この場合はログイン):
FieldInfo transport = smtpClient.GetType().GetField("transport", BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo authModules = transport.GetValue(smtpClient).GetType().GetField("authenticationModules",BindingFlags.NonPublic | BindingFlags.Instance);
Array modulesArray = authModules.GetValue(transport.GetValue(smtpClient)) as Array;
foreach (var module in modulesArray)
{
Console.WriteLine(module.ToString());
}
// System.Net.Mail.SmtpNegotiateAuthenticationModule
// System.Net.Mail.SmtpNtlmAuthenticationModule
// System.Net.Mail.SmtpDigestAuthenticationModule
// System.Net.Mail.SmtpLoginAuthenticationModule
// overwrite the protocols that you don't want
modulesArray.SetValue(modulesArray.GetValue(3), 0);
modulesArray.SetValue(modulesArray.GetValue(3), 1);
modulesArray.SetValue(modulesArray.GetValue(3), 2);