C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。

§1 ダウンロード

本ライブラリはMIT X11ライセンスでのリリースとなります。

最新版 (ソースコード)
Smdn.Net.Imap4.Client-1.14.tar.bz2
開発版
http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/よりチェックアウトできます
ビルド済みパッケージ・過去のバージョン
リリース一覧をご覧ください

§2 使い方・サンプルコード

もっとも簡単なサンプルコードとして、ImapClientクラスを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、INBOXにある一番最後のメールをダウンロードしてファイルに保存するサンプルです。

using System;

using Smdn.Net.Imap4.Client;

class GimapFetchExample {
  static void Main()
  {
    ImapSslConnection.ServerCertificateValidationCallback += delegate {
      return true;
    };

    using (var client = new ImapClient(new Uri("imaps://username@imap.gmail.com/"))) {
      client.Connect("password");

      using (var inbox = client.OpenInbox()) {
        var message = inbox.GetMessageBySequence(inbox.ExistMessageCount);

        message.Save(message.EnvelopeSubject + ".eml");
      }
    }
  }
}

各クラスの使い方の詳細、その他のサンプルコードはドキュメント・サンプルをご覧ください。

また、本ライブラリを使用したデモ用アプリケーションMRAConnector, SimpleMailerも公開しているので合わせてご覧ください。

§3 機能と特徴

§3.1 主な機能

  1. すべての標準コマンドの送受信
  2. いくつかの拡張コマンドの送受信
    1. MOVE
    2. IDLE
    3. QUOTA
    4. SORT/THREADほか
  3. SSL/TLS接続(IMAP over SSL, STARTTLS)
  4. SASL認証メカニズム(DIGEST-MD5, XOAUTH2他)

その他、サポートしている機能の詳細は機能一覧をご覧ください。

§3.2 主な特徴

メッセージ本文はStreamとして取得可能
メッセージの加工・解析に任意の手段を使用できるよう、Streamとして返します。 MIMEメッセージのデコード機能は本ライブラリでは提供していません。 (MIMEのデコードにはSmdn.Formats.Mimeやその他任意のライブラリが利用できます)
TAPによる非同期操作のサポート
接続・認証やIMAPの各種操作に対応するほとんどのメソッドに関して、同期バージョンの他にTAP(Taskクラス)による非同期操作に対応したバージョンも用意しています。
StreamReader, Regexは不使用
送受信時の文字列処理はstringではなくbyte[]のまま処理しています。 byte[]⇄stringの変換に起因する不必要なメモリの消費と速度の低下はできる限り抑えてあります。 また、大きなメッセージを取得する際もLarge Object Heapを消費しないよう実装しています。
ログ出力にTraceSourceを使用
送受信内容・動作状況のログをTraceListenerで取得できます。 またログ出力のレベルを設定できます。 イベントハンドラによる送受信時のフックは無駄と考え用意していません。
パース済みのレスポンスにアクセス可能
受信したレスポンスは必要な部分だけを拾い読みして結果を返すのではなく、全てパースしてから結果を返します。
フリー・オープンソース
本ライブラリはMIT X11ライセンスを採用しています。

§3.3 クライアント実装

クライアント実装として以下の3つのクラスを用意しています。

ImapClientクラス
メールボックス/メッセージをSystem.IO.DirectoryInfo/FileInfoクラスに似たインターフェイスで操作できるようにIMAP操作を抽象化したクライアント
ImapSessionクラス
IMAPコマンドと1対1に対応するメソッドを持つクライアント
ImapWebRequest/ImapWebResponseクラス
WebRequest/WebResponseクラスから派生し、IMAP URL(RFC 5092)での操作に対応したクライアント (別アセンブリSmdn.Net.Imap4.WebClientsで提供)

§4 動作状況

以下のIMAPサーバに対して概ね問題なく動作することを確認済みです。 この他にも、IMAPでのアクセスが可能なメールサービスでの動作報告を頂いています。

  • GMail (Gimap)
  • AIM Mail
  • Yahoo!メール
  • Dovecot (1.2.11, 2.1.9, 2.2.3)

以下の環境で概ね問題なく動作することを確認済みです。 テストはしていますが、予期しないバグがあるかもしれません。

  • .NET Framework 4.5
  • .NET Framework 4
  • .NET Framework 3.5 SP 1
  • Mono 3.6.0
  • Mono 3.4.0
  • Mono 3.2.8
  • Mono 3.0.12
  • Mono 2.11.3
  • Mono 2.10.8

§5 制限事項・特記事項

  • MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、Smdn.Formats.Mimeを使ってください。
  • 実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。

§6 不具合・要望・質問等

不具合の報告、ライブラリに対する要望や提案、使い方の質問などは掲示板へどうぞ。

§7 参考文献

asin:4873110289