»Smdn.Protocols.Imap4

C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 今までのところ、IMAPサーバからのメールボックス一覧およびステータスの取得、メッセージの検索および取得が出来ます。
現在対応している機能の一覧です。 部分的に対応しているものも含みます。
- 認証系コマンド
- AUTHENTICATE (PLAIN, LOGIN, CRAM-MD5)
- LOGIN
- STARTTLS (RFC 2595 Using TLS with IMAP, POP3 and ACAP)
- LOGOUT
- メールボックス操作系コマンド
- CREATE, RENAME, DELETE, CLOSE, SELECT, EXAMINE, LIST, LSUB, STATUS, SUBSCRIBE, UNSUBSCRIBE
- UNSELECT (RFC 3691 Internet Message Access Protocol (IMAP) UNSELECT command)
- NAMESPACE (RFC 2342 IMAP4 Namespace)
- メッセージ操作系コマンド
- APPEND, (UID)COPY, (UID)STORE, (UID)FETCH, (UID)SEARCH, EXPUNGE
- その他のコマンド
- CHECK, NOOP, CAPABILITY
- IDLE (RFC 2177 IMAP4 IDLE command)
- XYZZY (Gimap)
- その他
- Modified UTF-7、日本語等非ASCII文字に対応
- 日本語等を含むメールボックス名の操作に対応
- 日本語等を含むSEARCHコマンドのクエリに対応(既定でUTF-8を使用、サーバが対応していない場合はBADCHARSET応答で指定された文字コードを自動的に選択)
- RFC 3348 The Internet Message Action Protocol (IMAP4) Child Mailbox Extension
- RFC 2221 IMAP4 Login Referrals
- RFC 2193 IMAP4 Mailbox Referrals
- RFC 2192 IMAP URL Scheme
RFC 3501で規定されているコマンドは概ね実装が完了しています。
»ダウンロード
»サンプル
本ライブラリを使用して、GMail IMAPサーバからメッセージをダウンロードし、タイトルと本文を表示する例です。
using Smdn.Protocols.Imap4;
using Smdn.Protocols.Imap4.Client;
public class GmailFetchSample {
public static void Main(string[] args) {
using (var agent = new ImapClientAgent()) {
agent.Initialize();
agent.ServerCertificateValidationCallback = delegate {
return true;
};
var client = agent.CreateClient();
client.Password = "password";
client.UseSsl = true;
var message = client.FetchMessage(new ImapUri("imap://username;AUTH=*@imap.gmail.com:993/INBOX/;UID=3"));
Console.WriteLine(message.Envelope.Subject);
Console.WriteLine(message.Body);
}
}
}
本ライブラリを使用したサンプルアプリケーションTundereBirdもご覧ください。
»動作状況
以下のIMAPサーバに対して動作することを確認済みです。
- Gimap(GMail)
- Dovecot
- 1.0.beta8
- 1.0.rc15
- 1.0.rc17
以下の環境で動作することを確認済みです。
- .NET Framework 2.0.50727
- Mono 1.2.6
- Mono 1.9
»対応予定
今後対応する予定の機能です。
- FETCH(RFC822.HEADER, RFC822.TEXT)
- SEARCHで使用する文字コードの指定
- RFC 5092 IMAP URL Scheme
- RFC 4469 Internet Message Access Protocol (IMAP) CATENATE Extension
- RFC 4467 Internet Message Access Protocol (IMAP) - URLAUTH Extension
- RFC 4315 Internet Message Access Protocol (IMAP) - UIDPLUS extension
- RFC 3502 Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension
- MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、Smdn.Formats.Mimeを使ってください。
- 本ライブラリはトレースにログを出力します。 ログにはパスワードを含む送受信内容を解読可能な状態で書き出します。 不要な場合はTrace.csを削除するか、TRACEオプションおよびDUMPオプションを外してリビルドしてください。
- タイムアウト処理を実装してありますが、タイムアウトさせると内部状態がおかしくなるので使わない方がいいです。
- デフォルトではLogin Referrals、Mailbox Referralsを含むレスポンスを受信しても通常のNO応答と同様に扱います。 自動的にReferral先を参照するようには作ってありません。 ImapSession.HandlesReferralAsExceptionをtrueにすればIMAP URLを含む例外を送出するようになります。
- 送受信処理がかなり遅いです(特にFETCH)。 近いうちに改善するつもりです。
»参考文献