C#で書いた.NET Framework/Mono用POP3クライアントライブラリです。 POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。

§1 ダウンロード

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

最新版 (ソースコード)
Smdn.Net.Pop3.Client-1.26.tar.bz2
開発版
http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/よりチェックアウトできます
ビルド済みパッケージ・過去のバージョン
リリース一覧をご覧ください

§2 使い方・サンプルコード

もっとも簡単なサンプルコードとして、PopClientクラスを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メールボックスにあるすべてのメッセージをダウンロードしてファイルに保存したあと、サーバ上から削除するサンプルです。

using System;
using System.IO;

using Smdn.Net.Pop3.Client;

class GpopRetrieveExample {
  static void Main()
  {
    PopSslConnection.ServerCertificateValidationCallback += delegate {
      return true;
    };

    var url = new Uri("pops://username@pop.gmail.com/");
    var password = "password";
    var deleteAfterDownload = true;
    var savedir = "mail";

    PopClient.DownloadAllMessagesToDirectory(url, password, deleteAfterDownload, savedir);
  }
}

同様にGmailアカウントにアクセスし、最後に受信したメッセージをダウンロードしてファイルに保存したあと、サーバ上から削除するサンプルです。

using System;

using Smdn.Net.Pop3.Client;

class GpopRetrieveExample {
  static void Main()
  {
    PopSslConnection.ServerCertificateValidationCallback += delegate {
      return true;
    };

    var url = new Uri("pops://username@pop.gmail.com/");
    var password = "password";

    using (var client = new PopClient(url)) {
      client.Connect(password);

      client.DeleteAfterRetrieve = true;

      client.DownloadLastMessageToFile("message.eml");

      client.Logout();
    }
  }
}

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

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

§3 機能と特徴

§3.1 主な機能

  1. すべての標準コマンドといくつかの拡張コマンドの送受信
  2. SSL/TLS接続(POP over SSL, STLS)
  3. APOP
  4. SASL認証メカニズム(DIGEST-MD5, XOAUTH2他)

その他、サポートしている機能の詳細は下記「実装済み機能一覧」の項をご覧ください。

§3.2 その他の主な特徴

メッセージ本文は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.3 クライアント実装

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

PopClientクラス
メッセージをSystem.IO.FileInfoクラスに似たインターフェイスで操作できるようにPOP操作を抽象化したクライアント
PopSessionクラス
POPコマンドと1対1に対応するメソッドを持つクライアント
PopWebRequest/PopWebResponseクラス
WebRequest/WebResponseクラスから派生し、POP URL(RFC 2384)での操作に対応したクライアント (別アセンブリSmdn.Net.Pop3.WebClientsで提供)

§4 動作状況

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

  • GMail (Gpop)
  • Dovecot (1.2.11, 2.1.9, 2.2.3)

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

  • .NET Framework 4.5
  • .NET Framework 4
  • .NET Framework 3.5 SP 1
  • Mono 3.4.0
  • Mono 3.2.8
  • Mono 3.0.12
  • Mono 2.11.3
  • Mono 2.10.8

§5 制限事項・特記事項

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

§6 不具合・要望・質問等

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

§7 実装済み機能一覧

サポートするPOP標準仕様・拡張仕様の一覧です。

implemented
実装済みの機能
一部不完全な箇所があったり、仕様と異なる実装になっているかもしれません
partially implemented
部分的に実装済みの機能
コマンドの送受信のみサポートする、仕様の一部のみをサポートする、などの状態です
not tested
実装済みだが動作確認できていない機能
not implemented
実装されていない機能
RFC status note
[RFC 1939] Post Office Protocol - Version 3 implemented
[RFC 2384] POP URL Scheme implemented [独自拡張]URLのスキームがpopsの場合、デフォルトポートとして995を使用し、SSLによる接続を試みます。 また、修飾子;MSG=が含まれている場合、メールボックス内の特定のメッセージを表すURLとして解釈します。
[RFC 2449] POP3 Extension Mechanism partially implemented LOGIN-DELAY, PIPELINING, EXPIREに関連する機能は未実装です。 また、レスポンスコードが含まれていても通常のレスポンスと同様*1に扱います。
[RFC 2595] Using TLS with IMAP, POP3 and ACAP implemented
[RFC 3206] The SYS and AUTH POP Response Codes partially implemented レスポンスコードが含まれていても通常のレスポンスと同様*1に扱います。
[RFC 5034] The Post Office Protocol (POP3) Simple Authentication and Security Layer (SASL) Authentication Mechanism implemented
[RFC 6856] Post Office Protocol Version 3 (POP3) Support for UTF-8 not implemented
RFC status note
通常のレスポンスと同様*1
そのレスポンスを受信したということだけを検知します。 レスポンスに応じた処理を行うといったことはしません。

§7.1 関連リンク

§8 参考文献

asin:4873110289