.NET Core/.NET Framework/Mono対応のIMAP4rev1クライアントライブラリです。 .NET Standard 2.0/1.6に対応しています。

IMAPサーバのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。

MIT X11ライセンスを採用しています。

ダウンロード

リリース ターゲットフレームワーク 備考
サイズ
1.1MB
sha1sum
05debe44467439068e8b07a9f8ddaaaea7f2cc28
(ソースコード)
.NET Framework 4.5/4/3.5 メンテナンス版
今後重要な更新を除いて機能追加等はしません。
Smdn.Net.Imap4.Client (NuGet) .NET Framework 4.7.1/4.5
.NET Standard 2.0/1.6
開発版
v1.15に.NET Standard対応を加えたものに相当します。
サイズ
971.0kB
sha1sum
60a4cbbb9b13e1eafd3ddc2f788ba19dcaa2711f
(ソースコード)
サイズ
1015.9kB
sha1sum
b62f81886d06176595639657e87448e7cf17002e
(ソースコード)
開発版(アルファリリース)
機能的には概ね安定していますが、APIが未確定です。

ビルド済みパッケージ・過去のバージョンをダウンロードしたい場合、また変更履歴についてはリリース一覧をご覧ください。

サンプルコード

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

実際にGmailアカウントにアクセスする場合は、2段階認証プロセスの設定とアプリパスワードの発行が必要になります。 詳細はhttps://support.google.com/accounts/answer/185833?hl=jaを参照してください。

using System;

using Smdn.Net.Imap4.Client;

class GimapFetchExample {
  static void Main()
  {
    ImapSslConnection.ServerCertificateValidationCallback = ImapSslConnection.DangerousAcceptAnyServerCertificateValidator;

    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");
      }
    }
  }
}
Imports System

Imports Smdn.Net.Imap4.Client

Class GimapFetchExample
  Shared Sub Main(ByVal args As String())
    ImapSslConnection.ServerCertificateValidationCallback = ImapSslConnection.DangerousAcceptAnyServerCertificateValidator

    Using client As New ImapClient(New Uri("imaps://username@imap.gmail.com/"))
      client.Connect("password")

      Using inbox As ImapOpenedMailboxInfo = client.OpenInbox()
        Dim message As ImapMessageInfo = inbox.GetMessageBySequence(inbox.ExistMessageCount)

        message.Save(message.EnvelopeSubject + ".eml")
      End Using
    End Using
  End Sub
End Class

使い方・ドキュメント

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

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

機能と特徴

主な機能

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

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

主な特徴

メッセージ本文は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つのクラスを用意しています。

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

動作状況

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

以下のフレームワークで概ね問題なく動作することを確認済みです。

  • .NET Core
  • .NET Framework
  • Mono

制限事項・特記事項

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

不具合・要望・質問等

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

参考文献