MailKitを使用して、プロセスの資格情報を使用してExchangeサーバーから電子メールを送信したいと考えています。作品ドメイン/ユーザー名/パスワードとNetworkCredential
を構築MailkitとExchangeでデフォルトのネットワーク認証情報を使用することはできますか?
:
using (var client = new SmtpClient(ProtocolLogger))
{
client.Connect(server, port);
// Works
var creds = new NetworkCredential(username, password, domain);
client.Authenticate(creds);
client.Send(msg);
}
同じユーザーとして実行している間、私はCredentialCache.DefaultNetworkCredentials
を使用している場合は、それはMailKit.Security.AuthenticationException
でを失敗:
using (var client = new SmtpClient(ProtocolLogger))
{
client.Connect(server, port);
// Authentication failure
client.Authenticate(CredentialCache.DefaultNetworkCredentials);
client.Send(msg);
}
ProtocolLogger
は、以下を出力します(メールサーバーとbase64変更されエンコードされた文字列):
Connected to smtp://mymailserver:25/?starttls=when-available
S: 220 mymailserver Microsoft ESMTP MAIL Service ready at Thu, 30 Jun 2016 12:45:04 +0930
C: EHLO [172.1.1.2]
S: 250-mymailserver Hello [172.1.1.2]
S: 250-SIZE 51200000
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-STARTTLS
S: 250-X-ANONYMOUSTLS
S: 250-AUTH NTLM LOGIN
S: 250-X-EXPS GSSAPI NTLM
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250-XEXCH50
S: 250 XRDST
C: STARTTLS
S: 220 2.0.0 SMTP server ready
C: EHLO [172.1.1.2]
S: 250-mymailserver Hello [172.1.1.2]
S: 250-SIZE 51200000
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-AUTH NTLM LOGIN
S: 250-X-EXPS GSSAPI NTLM
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250-XEXCH50
S: 250 XRDST
C: AUTH NTLM {EncodedStringRemoved}
S: 334 {EncodedStringRemoved}
C: {EncodedStringRemoved}
S: 535 5.7.3 Authentication unsuccessful
C: AUTH LOGIN
S: 334 {EncodedStringRemoved}
C:
S: 334 {EncodedStringRemoved}
C:
S: 334 {EncodedStringRemoved}
C: QUIT
S: 334 {EncodedStringRemoved}
それはtrueにUseDefaultCredentials
プロパティを設定するときSystem.Net.Mail.SmtpClient
がDefaultNetworkCredentials
を使用し、これは私のために動作していることは注目に値します。私は、しかし、ProtocolLoggingのような余分な機能のためMailKitを使用したい。
PCにOutlookアカウントが設定されていますか。既定の資格情報を使用するには、PCにOutlookアカウントを設定する必要があります。だからあなたはまずあなたのユーザー名と電子メールアカウントを含むローカルPC上のユーザーのOutlookアカウントを設定するOutlookを実行する必要があります。ユーザー名は、パスワードを含むユーザー資格情報を持つPC上のユーザーアカウントにリンクされます。 Windowsクレデンシャルは、デフォルトのネットワーククレデンシャルとして使用されます。メールサーバーとPCは、どちらもグループポリシーを使用してネットワークパスワードサーバーでパスワードを確認します。 – jdweng
情報ありがとうございます。私は私のためのOutlookのセットアップを持っている私のdevワークステーションでテストしています。私はまた、私としてプロセスを実行しています。興味深いことに、組み込みの 'System.Net.Mail.Smt.SClt'を使うと動作しますので、MailKitとデフォルトの' SmtpClient'がワイヤを介して送信しているものと違いがなければなりません。 私はMailKilと同様に 'System.Net.Mail.SmtpClient'が送受信しているものを見る方法を知らない。それは理想的なので、私はそれらを区別することができます。 – JamesD
データパケットを見るために、フィドラーのようなスニファを使うことができます。通常Corp Networksは587のようなメールの電子メールポート番号をブロックします。交換の仕方は、電子メールを交換に転送するプロキシサーバーを使用することです。 Mailkitを使用しているのはおそらく587を使用しており、Pop Serverです。ポップサーバーはDefaultCredentialsを使用せず、代わりにユーザー名とパスワードを含み、通常はブロックされます。 – jdweng