2016-06-30 23 views
5

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.SmtpClientDefaultNetworkCredentialsを使用し、これは私のために動作していることは注目に値します。私は、しかし、ProtocolLoggingのような余分な機能のためMailKitを使用したい。

+0

PCにOutlookアカウントが設定されていますか。既定の資格情報を使用するには、PCにOutlookアカウントを設定する必要があります。だからあなたはまずあなたのユーザー名と電子メールアカウントを含むローカルPC上のユーザーのOutlookアカウントを設定するOutlookを実行する必要があります。ユーザー名は、パスワードを含むユーザー資格情報を持つPC上のユーザーアカウントにリンクされます。 Windowsクレデンシャルは、デフォルトのネットワーククレデンシャルとして使用されます。メールサーバーとPCは、どちらもグループポリシーを使用してネットワークパスワードサーバーでパスワードを確認します。 – jdweng

+0

情報ありがとうございます。私は私のためのOutlookのセットアップを持っている私のdevワークステーションでテストしています。私はまた、私としてプロセスを実行しています。興味深いことに、組み込みの 'System.Net.Mail.Smt.SClt'を使うと動作しますので、MailKitとデフォルトの' SmtpClient'がワイヤを介して送信しているものと違いがなければなりません。 私はMailKilと同様に 'System.Net.Mail.SmtpClient'が送受信しているものを見る方法を知らない。それは理想的なので、私はそれらを区別することができます。 – JamesD

+0

データパケットを見るために、フィドラーのようなスニファを使うことができます。通常Corp Networksは587のようなメールの電子メールポート番号をブロックします。交換の仕方は、電子メールを交換に転送するプロキシサーバーを使用することです。 Mailkitを使用しているのはおそらく587を使用しており、Pop Serverです。ポップサーバーはDefaultCredentialsを使用せず、代わりにユーザー名とパスワードを含み、通常はブロックされます。 – jdweng

答えて

3

MailKitは、MailKitがサーバーに送信する必要があるユーザー名とパスワードの文字列を提供するようにMailKitに要求すると、MailKitはユーザー名とパスワードの文字列が空でMailKitが認証しようとします空の文字列で

System.Net.Mailは、MailKitがアクセスできない実際の文字列を取得するために内部APIを使用できるようです。

+0

これは残念ですが、なぜそれが理解できるのでしょうか。これは、ユーザーの資格情報を保存する必要がないため、ビルトインクライアントの優れた機能です。メールキットの他のオプションはありますか? – JamesD

関連する問題