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

機能

主な機能

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

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

クライアント実装

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

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

その他の主な特徴

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

ダウンロード

Sponsored Link

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

最新版
Smdn.Net.Imap4.Client-0.27.tar.bz2 279.0kB [MD5] 766333c35a76d345e4e26c99d9cb7702
開発版
AnonSVNよりチェックアウトできます

デモ用アプリケーションTundereBirdもあわせてご覧ください。

使い方・サンプルコード

もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとIMAP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。

using System;
using System.Net;

using Smdn.Net.Imap4.WebClients;

class GimapFetchExample {
  public static void Main()
  {
    ImapWebRequestCreator.RegisterPrefix();
    ImapSessionManager.ServerCertificateValidationCallback += delegate {
      return true;
    };

    using (var client = new WebClient()) {
      client.Credentials = new NetworkCredential("username", "password");
      client.DownloadFile("imaps://username@imap.gmail.com/INBOX/;UID=1", "message.eml");
    }
  }
}

詳細・その他のサンプルコードはドキュメント・サンプルおよびデモ用アプリケーションTundereBirdをご覧ください。

変更履歴・過去のバージョン

リリース一覧をご覧ください。

不具合・要望・質問等

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

  • 既知の不具合
    • IDLEして5分程度経過すると、Mono.Security.Protocol.Tls.SslStreamBase.EndReadでMono.Security.Protocol.Tls.TlsExceptionがスローされる
    • GMailにアップロードしたメッセージのBODYSTRUCTUREが正しくパースできない

動作状況

以下のIMAPサーバに対して概ね問題なく動作することを確認済みです。

  • GMail (Gimap)
  • Dovecot (1.2.10)

以下の環境で動作することを確認済みです。

  • .NET Framework 3.5
  • Mono 2.7 (r152382)

ただし、Windows上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。

制限事項・特記事項

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