.NET Core/.NET Framework/Mono対応のPOP3クライアントライブラリです。 .NET Standard 2.0/1.6に対応しています。
POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。
MIT X11ライセンスを採用しています。
ダウンロード
リリース | ターゲットフレームワーク | 備考 |
---|---|---|
|
.NET Framework 4.5/4/3.5 |
メンテナンス版
今後重要な更新を除いて機能追加等はしません。 |
Smdn.Net.Pop3.Client (NuGet) | .NET Framework 4.7.1/4.5 .NET Standard 2.0/1.6 |
開発版
v1.27に.NET Standard対応を加えたものに相当します。 |
|
||
|
開発版(アルファリリース)
機能的には概ね安定していますが、APIが未確定です。 |
ビルド済みパッケージ・過去のバージョンをダウンロードしたい場合、また変更履歴についてはリリース一覧をご覧ください。
サンプルコード
もっとも簡単なサンプルコードとして、PopClientクラスを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メールボックスにあるすべてのメッセージをダウンロードしてファイルに保存したあと、サーバ上から削除するサンプルです。
実際にGmailアカウントにアクセスする場合は、2段階認証プロセスの設定とアプリパスワードの発行が必要になります。 詳細はhttps://support.google.com/accounts/answer/185833?hl=jaを参照してください。
using System;
using System.IO;
using Smdn.Net.Pop3.Client;
class GpopRetrieveExample {
static void Main()
{
PopSslConnection.ServerCertificateValidationCallback = PopSslConnection.DangerousAcceptAnyServerCertificateValidator;
var url = new Uri("pops://username@pop.gmail.com/");
var password = "password";
var deleteAfterDownload = true;
var savedir = "mail";
PopClient.DownloadAllMessagesToDirectory(url, password, deleteAfterDownload, savedir);
}
}
Imports System
Imports Smdn.Net.Pop3.Client
Class GpopRetrieveExample
Shared Sub Main(ByVal args As String())
PopSslConnection.ServerCertificateValidationCallback = PopSslConnection.DangerousAcceptAnyServerCertificateValidator
Dim url As New Uri("pops://username@pop.gmail.com/")
Dim password As String = "password"
Dim deleteAfterDownload As Boolean = True
Dim savedir As String = "mail"
PopClient.DownloadAllMessagesToDirectory(url, password, deleteAfterDownload, savedir)
End Sub
End Class
同様にGmailアカウントにアクセスし、最後に受信したメッセージをダウンロードしてファイルに保存したあと、サーバ上から削除するサンプルです。
using System;
using Smdn.Net.Pop3.Client;
class GpopRetrieveExample {
static void Main()
{
PopSslConnection.ServerCertificateValidationCallback = PopSslConnection.DangerousAcceptAnyServerCertificateValidator;
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();
}
}
}
Imports System
Imports Smdn.Net.Pop3.Client
Class GpopRetrieveExample
Shared Sub Main(ByVal args As String())
PopSslConnection.ServerCertificateValidationCallback = PopSslConnection.DangerousAcceptAnyServerCertificateValidator
Dim url As New Uri("pops://username@pop.gmail.com/")
Dim password As String = "password"
Using client As New PopClient(url)
client.Connect(password)
client.DeleteAfterRetrieve = true
client.DownloadLastMessageToFile("message.eml")
client.Logout()
End Using
End Sub
End Class
使い方・ドキュメント
各クラスの使い方の詳細、その他のサンプルコードはドキュメント・サンプルをご覧ください。
また、本ライブラリを使用したデモ用アプリケーションMRAConnector, SimpleMailerも公開しているので合わせてご覧ください。
機能と特徴
主な機能
- すべての標準コマンドといくつかの拡張コマンドの送受信
- SSL/TLS接続(POP over SSL, STLS)
- APOP
- 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つのクラスを用意しています。
- PopClientクラス
- メッセージをSystem.IO.FileInfoクラスに似たインターフェイスで操作できるようにPOP操作を抽象化したクライアント
- PopSessionクラス
- POPコマンドと1対1に対応するメソッドを持つクライアント
- PopWebRequest/PopWebResponseクラス
- WebRequest/WebResponseクラスから派生し、POP URL(RFC 2384)での操作に対応したクライアント (別アセンブリSmdn.Net.Pop3.WebClientsで提供)
動作状況
以下のPOPサーバに対して概ね問題なく動作することを確認済みです。 この他にも、POPでのアクセスが可能なメールサービスでの動作報告を頂いています。
- GMail (Gpop)
- Dovecot
以下のフレームワークで概ね問題なく動作することを確認済みです。
- .NET Core
- .NET Framework
- Mono
制限事項・特記事項
- MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、Smdn.Formats.Mimeを使ってください。
- 実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
不具合・要望・質問等
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは掲示板へどうぞ。
実装済み機能一覧
サポートする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
- そのレスポンスを受信したということだけを検知します。 レスポンスに応じた処理を行うといったことはしません。