C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
機能
主な機能
- すべての標準コマンドの送受信
- いくつかの拡張コマンドの送受信
- IDLE
- QUOTA
- SORT/THREADほか
- SSL/TLS接続(IMAP over SSL, STARTTLS)
- 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ライセンスを採用しています。
使い方・サンプルコード
もっとも簡単なサンプルコードとして、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上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。