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.33.tar.bz2 360.6kB [MD5] 5d3be2d6dba82c854514c13ba7965ed8
開発版
http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/よりチェックアウトできます
ビルド済みパッケージ・過去のバージョン
リリース一覧をご覧ください

使い方・サンプルコード

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

  • C#
  • VB
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");
    }
  }
}
Imports System
Imports System.Net
Imports System.Net.Security
Imports System.Security.Cryptography.X509Certificates

Imports Smdn.Net.Imap4.WebClients

Class GimapFetchExample
  Public Shared Sub Main()
    ImapWebRequestCreator.RegisterPrefix()
    ImapSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate)

    Using client As New WebClient()
      client.Credentials = New NetworkCredential("username", "password")
      client.DownloadFile("imaps://username@imap.gmail.com/INBOX/;UID=1", "message.eml")
    End Using
  End Sub

  Private Shared Function ValidateRemoteCertificate(ByVal sender As Object, _
                                                    ByVal certificate As X509Certificate, _
                                                    ByVal chain As X509Chain, _
                                                    ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
    Return True
  End Function
End Class

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

不具合・要望・質問等

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

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

動作状況

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

  • GMail (Gimap)
  • AIM Mail
  • Dovecot (1.2.11)

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

  • .NET Framework 4
  • .NET Framework 3.5 SP 1
  • Mono 2.7 (r156985)
  • Mono 2.6.4

制限事項・特記事項

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