Smdn.Net.Pop3.Client
C#で書いた.NET Framework/Mono用POP3クライアントライブラリです。 POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。
ダウンロード
本ライブラリはMIT X11ライセンスでのリリースとなります。
- 最新版 (ソースコード)
- Smdn.Net.Pop3.Client-1.10.tar.bz2 196.4kB [MD5] ce54283521d809a5d3ef5c322106af06
- 開発版
- http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/よりチェックアウトできます
- ビルド済みパッケージ・過去のバージョン
- リリース一覧をご覧ください
機能と特徴
主な機能
- すべての標準コマンドといくつかの拡張コマンドの送受信
- SSL/TLS接続(POP over SSL, STLS)
- APOP
- SASL認証メカニズム(DIGEST-MD5他)
その他、サポートしている機能の詳細は「実装済み機能一覧」の項をご覧ください。
クライアント実装
クライアント実装として以下の3つのクラスを用意しています。
- PopClientクラス
- メッセージをSystem.IO.FileInfoクラスに似たインターフェイスで操作できるようにPOP操作を抽象化したクライアント
- PopSessionクラス
- POPコマンドと1対1に対応するメソッドを持つクライアント
- PopWebRequest/PopWebResponseクラス
- WebRequest/WebResponseクラスから派生し、POP URL(RFC 2384)での操作に対応したクライアント (別アセンブリSmdn.Net.Pop3.WebClientsで提供)
その他の主な特徴
- メッセージ本文はStreamとして取得可能
- メッセージの加工・解析は任意の手段を使用できるよう、Streamとして返します。 MIMEメッセージのデコード機能は含んでいません。
- StreamReader, Regexは不使用
- 送受信時の文字列処理はstringではなくbyte[]のまま処理しています。 byte[]⇄stringの変換に起因する不必要なメモリの消費と速度の低下はできる限り抑えてあります。 また、大きなメッセージを取得してもLarge Object Heapを消費しないよう実装しています。
- ログ出力にTraceSourceを使用
- 送受信内容・動作状況のログをTraceListenerで取得できます。 またログ出力のレベルを設定できます。 イベントハンドラによる送受信時のフックは無駄と考え用意していません。
- パース済みのレスポンスにアクセス可能
- 受信したレスポンスは必要な部分だけを拾い読みして結果を返すのではなく、全てパースしてから結果を返します。
- フリー・オープンソース
- 本ライブラリはMIT X11ライセンスを採用しています。
使い方・サンプルコード
もっとも簡単なサンプルコードとして、PopClientクラスを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、最後に受信したメッセージをダウンロードしてファイルに保存したあと削除するサンプルです。
- C#
- VB
using System; using Smdn.Net.Pop3.Client; using Smdn.Net.Pop3.Protocol.Client; class GpopRetrieveExample { public static void Main() { PopConnection.ServerCertificateValidationCallback += delegate { return true; }; using (var client = new PopClient(new Uri("pops://username@pop.gmail.com/"))) { client.Connect("password"); client.DeleteAfterRetrieve = true; client.DownloadLastMessageToFile("message.eml"); client.Logout(); } } }using System; using Smdn.Net.Pop3.Client; using Smdn.Net.Pop3.Protocol.Client; class GpopRetrieveExample { public static void Main() { PopConnection.ServerCertificateValidationCallback += delegate { return true; }; using (var client = new PopClient(new Uri("pops://username@pop.gmail.com/"))) { client.Connect("password"); client.DeleteAfterRetrieve = true; client.DownloadLastMessageToFile("message.eml"); client.Logout(); } } }
Imports System Imports System.Net Imports System.Net.Security Imports System.Security.Cryptography.X509Certificates Imports Smdn.Net.Pop3.Client Imports Smdn.Net.Pop3.Protocol.Client Class GpopRetrieveExample Public Shared Sub Main(ByVal args As String()) PopConnection.ServerCertificateValidationCallback = AddressOf ValidateRemoteCertificate Using client As New PopClient(New Uri("pops://username@pop.gmail.com/")) client.Connect("password") client.DeleteAfterRetrieve = true client.DownloadLastMessageToFile("message.eml") client.Logout() 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 ClassImports System Imports System.Net Imports System.Net.Security Imports System.Security.Cryptography.X509Certificates Imports Smdn.Net.Pop3.Client Imports Smdn.Net.Pop3.Protocol.Client Class GpopRetrieveExample Public Shared Sub Main(ByVal args As String()) PopConnection.ServerCertificateValidationCallback = AddressOf ValidateRemoteCertificate Using client As New PopClient(New Uri("pops://username@pop.gmail.com/")) client.Connect("password") client.DeleteAfterRetrieve = true client.DownloadLastMessageToFile("message.eml") client.Logout() 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, SimpleMailerをご覧ください。
不具合・要望・質問等
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは掲示板へどうぞ。
動作状況
以下のPOPサーバに対して概ね問題なく動作することを確認済みです。
- GMail (Gpop)
- Dovecot (1.2.11, 2.0.8)
以下の環境で概ね問題なく動作することを確認済みです。 テストはしていますが、予期しないバグがあるかもしれません。
- .NET Framework 4
- .NET Framework 3.5 SP 1
- Mono 2.8.2
- Mono 2.6.7
制限事項・特記事項
- MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、Smdn.Formats.Mimeを使ってください。
- SASLの実装は、本体とは別ライブラリのSmdn.Security.Authentication.Saslに含まれています。
- 実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
実装済み機能一覧
サポートするPOP標準仕様・拡張仕様の一覧です。
- implemented
- 実装済みの機能
一部不完全な箇所があったり、仕様と異なる実装になっているかもしれません - partially implemented
- 部分的に実装済みの機能
コマンドの送受信のみサポートする、仕様の一部のみをサポートする、などの状態です - not tested
- 実装済みだが動作確認できていない機能
- not implemented
- 実装されていない機能
| RFC | status | note |
| 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 5721] POP3 Support for UTF-8 | not implemented |
- 通常のレスポンスと同様*1
- そのレスポンスを受信したということだけを検知します。 レスポンスに応じた処理を行うといったことはしません。
関連リンク
参考文献