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

POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。

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

ダウンロード

リリース ターゲットフレームワーク 備考
サイズ
615.8kB
sha1sum
ede40413d2879883a2b2a609df392be743ace891
(ソースコード)
.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対応を加えたものに相当します。
サイズ
530.6kB
sha1sum
fe724b910b7af5eabe10591c77cf55c2993a87d0
(ソースコード)
サイズ
560.0kB
sha1sum
1f279c6b22d826d030f92f3cd22ae92a46857286
(ソースコード)
開発版(アルファリリース)
機能的には概ね安定していますが、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も公開しているので合わせてご覧ください。

機能と特徴

主な機能

  1. すべての標準コマンドといくつかの拡張コマンドの送受信
  2. SSL/TLS接続(POP over SSL, STLS)
  3. APOP
  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つのクラスを用意しています。

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
そのレスポンスを受信したということだけを検知します。 レスポンスに応じた処理を行うといったことはしません。

関連リンク

参考文献