.NET Core/.NET Framework/Mono対応のIMAP4rev1クライアントライブラリです。 .NET Standard 2.0/1.6に対応しています。
IMAPサーバのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
MIT X11ライセンスを採用しています。
ダウンロード
リリース | ターゲットフレームワーク | 備考 |
---|---|---|
|
.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対応を加えたものに相当します。 |
|
||
|
開発版(アルファリリース)
機能的には概ね安定していますが、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も公開しているので合わせてご覧ください。
機能と特徴
主な機能
- すべての標準コマンドの送受信
- いくつかの拡張コマンドの送受信
- MOVE
- IDLE
- QUOTA
- SORT/THREADほか
- SSL/TLS接続(IMAP over SSL, STARTTLS)
- 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でのアクセスが可能なメールサービスでの動作報告を頂いています。
- GMail (Gimap)
- AIM Mail
- Yahoo!メール
- ただし、本ライブラリを使用したIMAPアクセスはサポート対象外(http://www.yahoo-help.jp/app/answers/detail/a_id/77496/p/622)であり、また一部機能はIMAP仕様と異なる動作となることを確認しています
- Dovecot
以下のフレームワークで概ね問題なく動作することを確認済みです。
- .NET Core
- .NET Framework
- Mono
制限事項・特記事項
- 完全なMIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、Smdn.Formats.Mimeを使ってください。
- 実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
不具合・要望・質問等
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは掲示板へどうぞ。