MailKit SaslMechanismOAuth2

前のブログ記事のコメントに、MailKitの「SaslMechanism(OAuth2)は使い回しができないようだ。」と書いたけど、Resetメソッドを使うと、問題無く動きました。このメソッドが何をやっているかというと、IsAuthenticateプロパティをfalseに設定しているだけなんだけどね。(ベースクラスで実装されてた)

var cred = new UsernamePasswordCredential(PopUser,PopPass,Authority,AppID,options); 
// Scopesは["https://outlook.office365.com/POP.AccessAsUser.All","https://outlook.office365.com/SMTP.Send"]
var req = new TokenRequestContext(scopes);
var token = await cred.GetTokenAsync(req);
var oauth2 = new SaslMechanismOAuth2(PopUser, token.Token);

using (Pop3Client cli = new Pop3Client()){
    await cli.ConnectAsync("outlook.office365.com", 995, SecureSocketOptions.SslOnConnect);
    // AccessTokenで認証
    await cli.AuthenticateAsync(oauth2);
    int cnt = await cli.GetMessageCountAsync();
	・・・
}
using (SmtpClient scli = new SmtpClient()) {
    MimeMessage msg = new MimeMessage();
	・・・
    // SASLの認証済みフラグを落とす
    oauth2.Reset();

    await scli.ConnectAsync("outlook.office365.com", 587, SecureSocketOptions.StartTls);
    await scli.AuthenticateAsync(oauth2);
    await scli.SendAsync(msg);
    await scli.DisconnectAsync(true);
}

もちろん、長時間使用していない場合は、AccessTokenがExpireしてしまうので、その場合はAcessTokenの取得から行なわなければならないけど・・・

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: .NET, OAuth2, 技術系 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください