2010-08-21T23:47:23の更新内容
works/libs/Smdn.Net.Imap4/doc/index.wiki.txt
current | previous | |
---|---|---|
279,7 | 279,6 | |
接続・認証時の動作は、[[接続と認証>#login]]で解説したとおりIMAP URLに記述されるスキーム・ホスト名・ポート・認証方式・ユーザ名に基づいて決まります。 ImapClientクラスではIMAP URLは用いず、ホスト・ポート・認証方式・ユーザ名等を個々に指定することもできます。 |
接続・認証時の動作は、[[接続と認証>#login]]で解説したとおりIMAP URLに記述されるスキーム・ホスト名・ポート・認証方式・ユーザ名に基づいて決まります。 ImapClientクラスではIMAP URLは用いず、ホスト・ポート・認証方式・ユーザ名等を個々に指定することもできます。 |
|
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#ImapClient.certs]]が必要になります。 |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#ImapClient.certs]]が必要になります。 |
|
+ |
#tabpage(C#) |
|
#code(cs,ImapClient){{ |
#code(cs,ImapClient){{ |
|
/* |
/* |
|
* ホスト"imap.example.net"のIMAPSデフォルトポート(993)にSSL/TLSを用いて接続。 |
* ホスト"imap.example.net"のIMAPSデフォルトポート(993)にSSL/TLSを用いて接続。 |
|
337,65 | 336,6 | |
client6.Connect("pass"); |
client6.Connect("pass"); |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,ImapClient){{ |
|
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPSデフォルトポート(993)にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式は対応しているものを順に試行。 |
|
+ |
' |
|
+ |
Dim client1 As New ImapClient(New Uri("imaps://user@imap.example.net/")) |
|
+ | ||
+ |
client1.Connect("pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のポート10143に接続、可能ならSSL/TLSにアップグレード。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 認証方式はCRAM-MD5を試行。 |
|
+ |
' |
|
+ |
Dim client2 As New ImapClient(New Uri("imap://user;AUTH=CRAM-MD5@imap.example.net:10143/")) |
|
+ | ||
+ |
client2.Profile.UseTlsIfAvailable = True |
|
+ |
client2.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のポート10143にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5を試行。 |
|
+ |
' |
|
+ |
Dim client3 As New ImapClient("imap.example.net", 10143, True, "user", "DIGEST-MD5") |
|
+ | ||
+ |
client3.Connect("pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPデフォルトポート(143)に接続、SSL/TLSは使用しない。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 認証方式はDIGEST-MD5, CRAM-MD5, IMAP LOGINの順に試行。 |
|
+ |
' |
|
+ |
Dim client4 As New ImapClient("imap.example.net", -1, False, Nothing, "*") |
|
+ | ||
+ |
client4.Profile.UseTlsIfAvailable = False |
|
+ |
client4.Profile.UsingSaslMechanisms = New String() {"DIGEST-MD5", "CRAM-MD5"} |
|
+ | ||
+ |
client4.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPデフォルトポート(143)に接続、可能ならSSL/TLSを使用する。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 |
|
+ |
' 認証方式はCRAM-MD5, PLAIN, IMAP LOGINの順に試行。 ただしSSL/TLSが使用できない場合、平文による認証を許可しない。 |
|
+ |
' |
|
+ |
Dim client5 As New ImapClient(New Uri("imap://user@imap.example.net/")) |
|
+ | ||
+ |
client5.Profile.UseTlsIfAvailable = True |
|
+ |
client5.Profile.UsingSaslMechanisms = New String() {"CRAM-MD5", "PLAIN"} |
|
+ |
client5.Profile.AllowInsecureLogin = False |
|
+ | ||
+ |
client5.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' GMailのアカウント"user"にIMAPで接続。 パスワードは"pass"を使用。 |
|
+ |
' |
|
+ |
Dim client6 As New ImapClient(New Uri("imaps://user@imap.gmail.com/")) |
|
+ | ||
+ |
client6.Connect("pass") |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(ImapClient.certs){証明書の選択と検証}; |
***&aname(ImapClient.certs){証明書の選択と検証}; |
|
デフォルトでは、接続・認証時にImapConnectionクラス(Smdn.Net.Imap4.Protocol.Client名前空間)の以下のメンバを参照して証明書の選択と検証を行います。 |
デフォルトでは、接続・認証時にImapConnectionクラス(Smdn.Net.Imap4.Protocol.Client名前空間)の以下のメンバを参照して証明書の選択と検証を行います。 |
|
408,7 | 348,6 | |
以下は証明書の検証を行う簡単な例です。 |
以下は証明書の検証を行う簡単な例です。 |
|
+ |
#tabpage(C#) |
|
#code(cs,証明書の検証を行う例){{ |
#code(cs,証明書の検証を行う例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
451,48 | 390,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,証明書の検証を行う例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Client |
|
+ |
Imports Smdn.Net.Imap4.Protocol.Client |
|
+ | ||
+ |
Public Class ValidateServerCerts |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
' 証明書の検証を行うコールバックメソッドを指定 |
|
+ |
ImapConnection.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New ImapClient(New Uri("imaps://user@localhost/")) |
|
+ |
client.Connect("pass") |
|
+ |
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 |
|
+ |
#If DEBUG Then |
|
+ |
' デバッグ時のみSslPolicyErrors.RemoteCertificateNameMismatchを無視 |
|
+ |
If CInt(sslPolicyErrors & sslPolicyErrors.RemoteCertificateNameMismatch) <> 0 Then |
|
+ |
sslPolicyErrors = sslPolicyErrors And Not sslPolicyErrors.RemoteCertificateNameMismatch |
|
+ |
End If |
|
+ |
#End If |
|
+ | ||
+ |
If sslPolicyErrors = sslPolicyErrors.None Then |
|
+ |
Return True |
|
+ |
Else |
|
+ |
' エラーがあれば標準エラーに表示 |
|
+ |
Console.Error.WriteLine(sslPolicyErrors) |
|
+ |
Return False |
|
+ |
End If |
|
+ |
End Function |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、ImapClient.Connect()メソッドの引数に適切なコールバックメソッドを指定してください。 |
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、ImapClient.Connect()メソッドの引数に適切なコールバックメソッドを指定してください。 |
|
(このドキュメントは作成中です) |
(このドキュメントは作成中です) |
|
879,7 | 776,6 | |
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、imapスキームおよびimapsスキームに対してImapWebRequestCreatorを関連付けます。 |
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、imapスキームおよびimapsスキームに対してImapWebRequestCreatorを関連付けます。 |
|
+ |
#tabpage(C#) |
|
#code(cs,記述例){{ |
#code(cs,記述例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
896,24 | 792,6 | |
: |
: |
|
: |
: |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,記述例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
: |
|
+ |
: |
|
+ |
' imapおよびimapsスキームの登録 |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' ImapWebRequestインスタンスの作成 |
|
+ |
Dim request As WebRequest = WebRequest.Create("imap://user@imap.example.net/") |
|
+ |
: |
|
+ |
: |
|
+ |
}} |
|
+ |
#tabpage-end |
|
**リクエストURLと接続・認証時の動作 |
**リクエストURLと接続・認証時の動作 |
|
***&aname(ImapWebRequest.login){接続と認証}; |
***&aname(ImapWebRequest.login){接続と認証}; |
|
929,7 | 807,6 | |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#ImapWebRequest.certs]]が必要になります。 |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#ImapWebRequest.certs]]が必要になります。 |
|
+ |
#tabpage(C#) |
|
#code(cs,記述例){{ |
#code(cs,記述例){{ |
|
// imapおよびimapsスキームの登録 |
// imapおよびimapsスキームの登録 |
|
ImapWebRequestCreator.RegisterPrefix(); |
ImapWebRequestCreator.RegisterPrefix(); |
|
988,66 | 865,6 | |
request6.Credentials = new NetworkCredential("user", "pass"); |
request6.Credentials = new NetworkCredential("user", "pass"); |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,記述例){{ |
|
+ |
' imapおよびimapsスキームの登録 |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPSデフォルトポート(993)にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式は対応しているものを順に試行。 |
|
+ |
' |
|
+ |
Dim request1 As WebRequest = WebRequest.Create(New Uri("imaps://user@imap.example.net/")) |
|
+ | ||
+ |
request1.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のポート10143に接続、可能ならSSL/TLSにアップグレード。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はCRAM-MD5を試行。 |
|
+ |
' |
|
+ |
Dim request2 As ImapWebRequest = DirectCast(WebRequest.Create(New Uri("imap://user;AUTH=CRAM-MD5@imap.example.net:10143/")), ImapWebRequest) |
|
+ | ||
+ |
request2.UseTlsIfAvailable = True |
|
+ |
request2.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のポート10143にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5を試行。 |
|
+ |
' |
|
+ |
Dim request3 As ImapWebRequest = DirectCast(WebRequest.Create(New Uri("imaps://user;AUTH=DIGEST-MD5@imap.example.net:10143/")), ImapWebRequest) |
|
+ | ||
+ |
request3.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPデフォルトポート(143)に接続、SSL/TLSは使用しない。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5, CRAM-MD5, PLAINの順に試行。 |
|
+ |
' |
|
+ |
Dim request4 As ImapWebRequest = DirectCast(WebRequest.Create(New Uri("imap://;AUTH=*@imap.example.net/")), ImapWebRequest) |
|
+ | ||
+ |
request4.UseTlsIfAvailable = False |
|
+ |
request4.UsingSaslMechanisms = New String() {"DIGEST-MD5", "CRAM-MD5", "PLAIN"} |
|
+ |
request4.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"imap.example.net"のIMAPデフォルトポート(143)に接続、可能ならSSL/TLSを使用する。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 |
|
+ |
' 認証方式はCRAM-MD5, PLAIN, IMAP LOGINの順に試行。 ただしSSL/TLSが使用できない場合、平文による認証を許可しない。 |
|
+ |
' |
|
+ |
Dim request5 As ImapWebRequest = DirectCast(WebRequest.Create(New Uri("imap://user@imap.example.net/")), ImapWebRequest) |
|
+ | ||
+ |
request5.UseTlsIfAvailable = True |
|
+ |
request5.UsingSaslMechanisms = New String() {"CRAM-MD5", "PLAIN"} |
|
+ |
request5.AllowInsecureLogin = False |
|
+ |
request5.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' GMailのアカウント"user"にIMAPで接続。 パスワードは"pass"を使用。 |
|
+ |
' |
|
+ |
Dim request6 As ImapWebRequest = DirectCast(WebRequest.Create(New Uri("imaps://user@imap.gmail.com/")), ImapWebRequest) |
|
+ | ||
+ |
request6.Credentials = New NetworkCredential("user", "pass") |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(ImapWebRequest.certs){証明書の選択と検証}; |
***&aname(ImapWebRequest.certs){証明書の選択と検証}; |
|
デフォルトでは、接続・認証時にImapSessionManagerクラスの以下のメンバを参照して証明書の選択と検証を行います。 |
デフォルトでは、接続・認証時にImapSessionManagerクラスの以下のメンバを参照して証明書の選択と検証を行います。 |
|
1060,7 | 877,6 | |
以下は証明書の検証を行う簡単な例です。 |
以下は証明書の検証を行う簡単な例です。 |
|
+ |
#tabpage(C#) |
|
#code(cs,証明書の検証を行う例){{ |
#code(cs,証明書の検証を行う例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1105,50 | 921,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,証明書の検証を行う例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
Public Class ValidateServerCerts |
|
+ |
Public Shared Sub main(ByVal args As String()) |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' 証明書の検証を行うコールバックメソッドを指定 |
|
+ |
ImapSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("user", "pass") |
|
+ |
client.DownloadFile("imaps://user@localhost/INBOX/;UID=1", "sample.eml") |
|
+ |
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 |
|
+ |
#If DEBUG Then |
|
+ |
' デバッグ時のみSslPolicyErrors.RemoteCertificateNameMismatchを無視 |
|
+ |
If CInt(sslPolicyErrors & sslPolicyErrors.RemoteCertificateNameMismatch) <> 0 Then |
|
+ |
sslPolicyErrors = sslPolicyErrors And Not sslPolicyErrors.RemoteCertificateNameMismatch |
|
+ |
End If |
|
+ |
#End If |
|
+ | ||
+ |
If sslPolicyErrors = sslPolicyErrors.None Then |
|
+ |
Return True |
|
+ |
Else |
|
+ |
' エラーがあれば標準エラーに表示 |
|
+ |
Console.Error.WriteLine(sslPolicyErrors) |
|
+ |
Return False |
|
+ |
End If |
|
+ |
End Function |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、ImapSessionManager.CreateSslStreamCallbackに適切なコールバックメソッドを指定してください。 |
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、ImapSessionManager.CreateSslStreamCallbackに適切なコールバックメソッドを指定してください。 |
|
1340,7 | 1112,6 | |
**ImapClient |
**ImapClient |
|
***&aname(ImapClient.sample1){メッセージをダウンロードしてファイルに保存する}; |
***&aname(ImapClient.sample1){メッセージをダウンロードしてファイルに保存する}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
1365,36 | 1136,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Client |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
Using client As New ImapClient(New Uri("imap://user;AUTH=DIGEST-MD5@localhost/")) |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
' INBOXを開く |
|
+ |
Using inbox As ImapOpenedMailboxInfo = client.OpenInbox() |
|
+ |
' UIDが1のメッセージを取得 |
|
+ |
Dim message As ImapMessageInfo = inbox.GetMessageByUid(1) |
|
+ | ||
+ |
' ファイルsample.emlに保存 |
|
+ |
message.Save("sample.eml") |
|
+ |
End Using |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample1]] |
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample1]] |
|
***&aname(ImapClient.sample2){メッセージをアップロードする}; |
***&aname(ImapClient.sample2){メッセージをアップロードする}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.IO; |
using System.IO; |
|
1420,37 | 1165,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.IO |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Client |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
Using client As New ImapClient("localhost", 143, "user", "DIGEST-MD5") |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
' INBOXを取得 |
|
+ |
Dim inbox As ImapMailboxInfo = client.GetInbox() |
|
+ | ||
+ |
' ファイルsample.emlを開く |
|
+ |
Using messageStream As Stream = File.OpenRead("sample.eml") |
|
+ |
' Streamの内容をINBOXにアップロード |
|
+ |
inbox.AppendMessage(messageStream) |
|
+ |
End Using |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample2]] |
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample2]] |
|
***&aname(ImapClient.sample3){メッセージの検索}; |
***&aname(ImapClient.sample3){メッセージの検索}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
1482,52 | 1200,11 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Client |
|
+ |
Imports Smdn.Net.Imap4.Protocol.Client |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
ImapConnection.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
' Gmailのアカウントに接続 |
|
+ |
Using client As New ImapClient(New Uri("imaps://user@imap.gmail.com/")) |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
' INBOXを開く |
|
+ |
Using inbox As ImapOpenedMailboxInfo = client.OpenInbox() |
|
+ |
' タイトルに[Mono-dev]を含むメールの一覧を取得する |
|
+ |
For Each message As ImapMessageInfo In inbox.GetMessages(ImapSearchCriteria.Subject("[Mono-dev]")) |
|
+ |
' 取得したメッセージのUIDと件名を表示 |
|
+ |
Console.WriteLine("UID {0}: {1}", message.Uid, message.EnvelopeSubject) |
|
+ |
Next |
|
+ |
End Using |
|
+ |
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 |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample3]] |
同じ処理を[[ImapWebRequestで記述した例>#ImapWebRequest.sample3]] |
|
**ImapWebRequest/ImapWebResponse |
**ImapWebRequest/ImapWebResponse |
|
***&aname(ImapWebRequest.sample1){メッセージをダウンロードしてファイルに保存する}; |
***&aname(ImapWebRequest.sample1){メッセージをダウンロードしてファイルに保存する}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1548,32 | 1225,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ | ||
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' INBOXにあるUIDが1のメッセージをダウンロードしてファイルsample.emlに保存 |
|
+ |
client.DownloadFile("imap://user;AUTH=DIGEST-MD5@localhost/INBOX/;UID=1", "sample.eml") |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapClientで記述した例>#ImapClient.sample1]] |
同じ処理を[[ImapClientで記述した例>#ImapClient.sample1]] |
|
***&aname(ImapWebRequest.sample2){メッセージをアップロードする}; |
***&aname(ImapWebRequest.sample2){メッセージをアップロードする}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.IO; |
using System.IO; |
|
1595,33 | 1250,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.IO |
|
+ |
Imports System.Net |
|
+ | ||
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' ファイルsample.emlの内容をINBOXにアップロード |
|
+ |
client.UploadData("imap://user;AUTH=DIGEST-MD5@localhost/INBOX", ImapWebRequestMethods.Append, File.ReadAllBytes("sample.eml")) |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapClientで記述した例>#ImapClient.sample2]] |
同じ処理を[[ImapClientで記述した例>#ImapClient.sample2]] |
|
***&aname(ImapWebRequest.sample3){メッセージの検索}; |
***&aname(ImapWebRequest.sample3){メッセージの検索}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1651,50 | 1283,11 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
Class Sample |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ |
ImapSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
' GmailアカウントのINBOXから、件名に[Mono-dev]を含むメールの一覧を取得する |
|
+ |
Dim request As WebRequest = WebRequest.Create("imaps://user@imap.gmail.com/INBOX?SUBJECT ""[Mono-dev]""") |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
Using response As ImapWebResponse = DirectCast(request.GetResponse(), ImapWebResponse) |
|
+ |
For Each message As IImapMessageAttribute In response.MessageAttributes |
|
+ |
' 取得したメッセージのURLを表示 |
|
+ |
Console.WriteLine(message.Url) |
|
+ |
Next |
|
+ |
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 |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[ImapClientで記述した例>#ImapClient.sample3]] |
同じ処理を[[ImapClientで記述した例>#ImapClient.sample3]] |
|
***&aname(ImapWebRequest.sample4){メッセージのコピー}; |
***&aname(ImapWebRequest.sample4){メッセージのコピー}; |
|
INBOXにあるメッセージすべてをINBOX.backupにコピーする例。 AllowCreateMailboxプロパティをtrueにしておくことで、サーバがレスポンスコードTRYCREATEを返した場合は自動的にメールボックスを作成します。 |
INBOXにあるメッセージすべてをINBOX.backupにコピーする例。 AllowCreateMailboxプロパティをtrueにしておくことで、サーバがレスポンスコードTRYCREATEを返した場合は自動的にメールボックスを作成します。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1714,32 | 1307,10 | |
: |
: |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ |
: |
|
+ | ||
+ |
Dim request As ImapWebRequest = DirectCast(WebRequest.Create("imap://user@localhost/INBOX?ALL"), ImapWebRequest) |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ |
request.Method = ImapWebRequestMethods.Copy |
|
+ |
request.AllowCreateMailbox = True |
|
+ |
request.DestinationUri = New Uri("imap://user@localhost/INBOX.backup") |
|
+ | ||
+ |
Using response As WebResponse = request.GetResponse() |
|
+ |
: |
|
+ |
: |
|
+ |
End Using |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(ImapWebRequest.sample5){メールボックスの削除}; |
***&aname(ImapWebRequest.sample5){メールボックスの削除}; |
|
メールボックスINBOX.oldを削除する例。 ExpectedErrorResponseCodesプロパティにImapResponseCode.NonExistentを指定しておくことで、メールボックスが存在しない場合(サーバがレスポンスコードNONEXISTENTを返した場合)でもWebExceptionをスローしないようにします。 |
メールボックスINBOX.oldを削除する例。 ExpectedErrorResponseCodesプロパティにImapResponseCode.NonExistentを指定しておくことで、メールボックスが存在しない場合(サーバがレスポンスコードNONEXISTENTを返した場合)でもWebExceptionをスローしないようにします。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1759,32 | 1330,10 | |
: |
: |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Protocol |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ |
: |
|
+ | ||
+ |
Dim request As ImapWebRequest = DirectCast(WebRequest.Create("imap://user@localhost/INBOX.old"), ImapWebRequest) |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ |
request.Method = ImapWebRequestMethods.Delete |
|
+ |
request.ExpectedErrorResponseCodes = New ImapResponseCode() {ImapResponseCode.NonExistent} |
|
+ | ||
+ |
Using response As WebResponse = request.GetResponse() |
|
+ |
: |
|
+ |
: |
|
+ |
End Using |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(ImapWebRequest.sample6){メールボックスの作成}; |
***&aname(ImapWebRequest.sample6){メールボックスの作成}; |
|
メールボックスINBOX.newを作成する例。 先の例と同様に、メールボックスがすでに存在する場合(サーバがレスポンスコードALREADYEXISTSを返した場合)でもWebExceptionをスローしないようにします。 |
メールボックスINBOX.newを作成する例。 先の例と同様に、メールボックスがすでに存在する場合(サーバがレスポンスコードALREADYEXISTSを返した場合)でもWebExceptionをスローしないようにします。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1804,36 | 1353,14 | |
: |
: |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.Protocol |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ |
: |
|
+ | ||
+ |
Dim request As ImapWebRequest = DirectCast(WebRequest.Create("imap://user@localhost/INBOX.new"), ImapWebRequest) |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ |
request.Method = ImapWebRequestMethods.Create |
|
+ |
request.ExpectedErrorResponseCodes = New ImapResponseCode() {ImapResponseCode.AlreadyExists} |
|
+ | ||
+ |
Using response As WebResponse = request.GetResponse() |
|
+ |
: |
|
+ |
: |
|
+ |
End Using |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(ImapWebRequest.sample7){メッセージの検索}; |
***&aname(ImapWebRequest.sample7){メッセージの検索}; |
|
ImapStyleUriBuilderを使って、複雑な検索クエリを含むリクエストを送信する例。 |
ImapStyleUriBuilderを使って、複雑な検索クエリを含むリクエストを送信する例。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
- |
using System.Text; |
|
using System.Net; |
using System.Net; |
|
+ |
using System.Text; |
|
using Smdn.Net.Imap4; |
using Smdn.Net.Imap4; |
|
using Smdn.Net.Imap4.WebClients; |
using Smdn.Net.Imap4.WebClients; |
|
1854,34 | 1381,6 | |
: |
: |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Text |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ |
: |
|
+ | ||
+ |
Dim builder As New ImapUriBuilder("imap://user@localhost/INBOX") |
|
+ | ||
+ |
builder.SearchCriteria = (ImapSearchCriteria.From("差出人") And ImapSearchCriteria.SentBefore(New DateTime(2010, 2, 6))) _ |
|
+ |
Or _ |
|
+ |
(ImapSearchCriteria.Unseen And Not ImapSearchCriteria.Subject("未承諾広告")) |
|
+ |
builder.Charset = Encoding.GetEncoding(932) |
|
+ | ||
+ |
Dim request As ImapWebRequest = DirectCast(WebRequest.Create(builder.Uri), ImapWebRequest) |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ | ||
+ |
Using response As WebResponse = request.GetResponse() |
|
+ |
: |
|
+ |
: |
|
+ |
End Using |
|
+ |
}} |
|
+ |
#tabpage-end |
|
この例で指定している検索クエリは、 |
この例で指定している検索クエリは、 |
|
+fromが'差出人'かつ送信日が2010年2月6日以前、もしくは |
+fromが'差出人'かつ送信日が2010年2月6日以前、もしくは |
|
1892,10 | 1391,10 | |
***&aname(ImapWebRequest.sample8){メッセージへのフラグの設定}; |
***&aname(ImapWebRequest.sample8){メッセージへのフラグの設定}; |
|
fromにspammer.example.comを含むメッセージをすべて既読にし、Thunderbirdの迷惑メールのマーク(Junk)を設定する例。 ImapStoreDataItem.ReplaceFlagsメソッドを使って新しく置き換える(設定する)フラグを作成し、StoreDataItemプロパティにしています。 |
fromにspammer.example.comを含むメッセージをすべて既読にし、Thunderbirdの迷惑メールのマーク(Junk)を設定する例。 ImapStoreDataItem.ReplaceFlagsメソッドを使って新しく置き換える(設定する)フラグを作成し、StoreDataItemプロパティにしています。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
- |
using System.Text; |
|
using Smdn.Net.Imap4; |
using Smdn.Net.Imap4; |
|
using Smdn.Net.Imap4.WebClients; |
using Smdn.Net.Imap4.WebClients; |
|
1912,27 | 1411,6 | |
: |
: |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ | ||
+ |
Imports Smdn.Net.Imap4 |
|
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ |
: |
|
+ | ||
+ |
Dim request As ImapWebRequest = DirectCast(WebRequest.Create("imap://user@localhost/INBOX?from spammer.example.com"), ImapWebRequest) |
|
+ | ||
+ |
request.Credentials = New NetworkCredential("user", "pass") |
|
+ |
request.Method = ImapWebRequestMethods.Store |
|
+ |
request.StoreDataItem = ImapStoreDataItem.ReplaceFlags(New String() {"Junk"}, ImapMessageFlag.Seen) |
|
+ | ||
+ |
Using response As WebResponse = request.GetResponse() |
|
+ |
: |
|
+ |
: |
|
+ |
End Using |
|
+ |
}} |
|
+ |
#tabpage-end |
|
**ImapSession |
**ImapSession |
|
このクラスを直接使用することはできますが推奨はしません。 また、ドキュメントを用意する予定はありません。 内部実装の参照や改変などの参考程度に掲載します。 |
このクラスを直接使用することはできますが推奨はしません。 また、ドキュメントを用意する予定はありません。 内部実装の参照や改変などの参考程度に掲載します。 |
works/libs/Smdn.Net.Imap4/index.wiki.txt
current | previous | |
---|---|---|
46,7 | 46,6 | |
*使い方・サンプルコード |
*使い方・サンプルコード |
|
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとIMAP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。 |
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとIMAP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
68,35 | 67,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ | ||
+ |
Imports Smdn.Net.Imap4.WebClients |
|
+ | ||
+ |
Class GimapFetchExample |
|
+ |
Public Shared Sub Main() |
|
+ |
ImapWebRequestCreator.RegisterPrefix() |
|
+ |
ImapSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("username", "password") |
|
+ |
client.DownloadFile("imaps://username@imap.gmail.com/INBOX/;UID=1", "message.eml") |
|
+ |
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 |
|
+ |
}} |
|
+ |
#tabpage-end |
|
詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]およびデモ用アプリケーション[[works/tools/junk/MRAConnector]], [[works/tools/junk/TundereBird]]をご覧ください。 |
詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]およびデモ用アプリケーション[[works/tools/junk/MRAConnector]], [[works/tools/junk/TundereBird]]をご覧ください。 |
|
works/libs/Smdn.Formats.Mime/index.wiki.txt
current | previous | |
---|---|---|
37,14 | 37,13 | |
*サンプル |
*サンプル |
|
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。 |
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using Smdn.Formats.Mime; |
using Smdn.Formats.Mime; |
|
public class ReadMail { |
public class ReadMail { |
|
public static void Main(string[] args) { |
public static void Main(string[] args) { |
|
~ |
var message = MimeMessage.Load("sample.eml"); |
var message = MimeMessage.Load("/home/smdn/Desktop/sample.eml"); |
Dump(message, 0); |
Dump(message, 0); |
|
} |
} |
|
77,46 | 76,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports Smdn.Formats.Mime |
|
+ | ||
+ |
Public Class ReadMail |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
Dim message As MimeMessage = MimeMessage.Load("sample.eml") |
|
+ | ||
+ |
Dump(message, 0) |
|
+ |
End Sub |
|
+ | ||
+ |
Private Shared Sub Dump(ByVal message As MimeMessage, ByVal nest As Integer) |
|
+ |
Dim indent As String = New String(" "c, nest * 4) |
|
+ | ||
+ |
DumpHeaders(message, indent) |
|
+ | ||
+ |
Console.Write(indent) |
|
+ | ||
+ |
If message.MimeType.TypeEquals("text") Then |
|
+ |
Console.WriteLine(message.ReadContentAsText()) |
|
+ |
Else |
|
+ |
Console.WriteLine(message.MimeType) |
|
+ |
End If |
|
+ | ||
+ |
For Each part As MimeMessage In message.SubParts |
|
+ |
Console.WriteLine() |
|
+ | ||
+ |
Dump(part, nest + 1) |
|
+ |
Next |
|
+ |
End Sub |
|
+ | ||
+ |
Private Shared Sub DumpHeaders(ByVal message As MimeMessage, ByVal indent As String) |
|
+ |
For Each header As MimeHeader In message.Headers |
|
+ |
Console.WriteLine("{0}{1}: {2}", indent, header.Name, header.Value) |
|
+ |
Next |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。 |
本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。 |
|
works/libs/Smdn.Net.Pop3/doc/index.wiki.txt
current | previous | |
---|---|---|
271,7 | 271,6 | |
接続・認証時の動作は、[[接続と認証>#login]]で解説したとおりPOP URLに記述されるスキーム・ホスト名・ポート・認証方式・ユーザ名に基づいて決まります。 PopClientクラスではPOP URLは用いず、ホスト・ポート・認証方式・ユーザ名等を個々に指定することもできます。 |
接続・認証時の動作は、[[接続と認証>#login]]で解説したとおりPOP URLに記述されるスキーム・ホスト名・ポート・認証方式・ユーザ名に基づいて決まります。 PopClientクラスではPOP URLは用いず、ホスト・ポート・認証方式・ユーザ名等を個々に指定することもできます。 |
|
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#PopClient.certs]]が必要になります。 |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#PopClient.certs]]が必要になります。 |
|
+ |
#tabpage(C#) |
|
#code(cs,PopClient){{ |
#code(cs,PopClient){{ |
|
/* |
/* |
|
* ホスト"pop.example.net"のPOPSデフォルトポート(995)にSSL/TLSを用いて接続。 |
* ホスト"pop.example.net"のPOPSデフォルトポート(995)にSSL/TLSを用いて接続。 |
|
329,65 | 328,7 | |
client6.Connect("pass"); |
client6.Connect("pass"); |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,PopClient){{ |
|
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPSデフォルトポート(995)にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式は対応しているものを順に試行。 |
|
+ |
' |
|
+ |
Dim client1 As New PopClient(New Uri("pops://user@pop.example.net/")) |
|
+ | ||
+ |
client1.Connect("pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のポート10110に接続、可能ならSSL/TLSにアップグレード。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 認証方式はAPOPを試行。 |
|
+ |
' |
|
+ |
Dim client2 As New PopClient(New Uri("pop://user;AUTH=+APOP@pop.example.net:10110/")) |
|
+ | ||
+ |
client2.Profile.UseTlsIfAvailable = True |
|
+ |
client2.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のポート10110にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5を試行。 |
|
+ |
' |
|
+ |
Dim client3 As New PopClient("pop.example.net", 10110, True, "user", "DIGEST-MD5") |
|
+ | ||
+ |
client3.Connect("pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPデフォルトポート(110)に接続、SSL/TLSは使用しない。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 認証方式はDIGEST-MD5, CRAM-MD5, APOP, USER/PASSの順に試行。 |
|
+ |
' |
|
+ |
Dim client4 As New PopClient("pop.example.net", -1, False, Nothing, "*") |
|
+ | ||
+ |
client4.Profile.UseTlsIfAvailable = False |
|
+ |
client4.Profile.UsingSaslMechanisms = New String() {"DIGEST-MD5", "CRAM-MD5", "+APOP"} |
|
+ | ||
+ |
client4.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPデフォルトポート(110)に接続、可能ならSSL/TLSを使用する。 |
|
+ |
' ユーザ名に"user"を使用、パスワードはNetworkCredentialから取得。 |
|
+ |
' 認証方式はCRAM-MD5, PLAIN, APOP, USER/PASSの順に試行。 ただしSSL/TLSが使用できない場合、平文による認証を許可しない。 |
|
+ |
' |
|
+ |
Dim client5 As New PopClient(New Uri("pop://user@pop.example.net/")) |
|
+ | ||
+ |
client5.Profile.UseTlsIfAvailable = True |
|
+ |
client5.Profile.UsingSaslMechanisms = New String() {"CRAM-MD5", "PLAIN"} |
|
+ |
client5.Profile.AllowInsecureLogin = False |
|
+ | ||
+ |
client5.Connect(New NetworkCredential("user", "pass")) |
|
+ | ||
+ |
' |
|
+ |
' GMailのアカウント"user"にPOPで接続。 パスワードは"pass"を使用。 |
|
+ |
' |
|
+ |
Dim client6 As New PopClient(New Uri("pops://user@pop.gmail.com/")) |
|
+ |
client6.Connect("pass") |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(PopClient.certs){証明書の選択と検証}; |
***&aname(PopClient.certs){証明書の選択と検証}; |
|
デフォルトでは、接続・認証時にPopConnectionクラス(Smdn.Net.Pop3.Protocol.Client名前空間)の以下のメンバを参照して証明書の選択と検証を行います。 |
デフォルトでは、接続・認証時にPopConnectionクラス(Smdn.Net.Pop3.Protocol.Client名前空間)の以下のメンバを参照して証明書の選択と検証を行います。 |
|
399,7 | 340,6 | |
以下は証明書の検証を行う簡単な例です。 |
以下は証明書の検証を行う簡単な例です。 |
|
+ |
#tabpage(C#) |
|
#code(cs,証明書の検証を行う例){{ |
#code(cs,証明書の検証を行う例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
442,48 | 382,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,証明書の検証を行う例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ |
Imports Smdn.Net.Pop3.Protocol.Client |
|
+ | ||
+ |
Public Class ValidateServerCerts |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
' 証明書の検証を行うコールバックメソッドを指定 |
|
+ |
PopConnection.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New PopClient(New Uri("pops://user@localhost/")) |
|
+ |
client.Connect("pass") |
|
+ |
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 |
|
+ |
#If DEBUG Then |
|
+ |
' デバッグ時のみSslPolicyErrors.RemoteCertificateNameMismatchを無視 |
|
+ |
if (CInt(sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) <> 0 then |
|
+ |
sslPolicyErrors = sslPolicyErrors And Not sslPolicyErrors.RemoteCertificateNameMismatch |
|
+ |
End If |
|
+ |
#End If |
|
+ | ||
+ |
If sslPolicyErrors = sslPolicyErrors.None Then |
|
+ |
Return True |
|
+ |
Else |
|
+ |
' エラーがあれば標準エラーに表示 |
|
+ |
Console.Error.WriteLine(sslPolicyErrors) |
|
+ |
Return False |
|
+ |
End If |
|
+ |
End Function |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、PopClient.Connect()メソッドの引数に適切なコールバックメソッドを指定してください。 |
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、PopClient.Connect()メソッドの引数に適切なコールバックメソッドを指定してください。 |
|
(このドキュメントは作成中です) |
(このドキュメントは作成中です) |
|
644,7 | 542,6 | |
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、popスキームおよびpopsスキームに対してPopWebRequestCreatorを関連付けます。 |
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、popスキームおよびpopsスキームに対してPopWebRequestCreatorを関連付けます。 |
|
+ |
#tabpage(C#) |
|
#code(cs,記述例){{ |
#code(cs,記述例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
661,24 | 558,6 | |
: |
: |
|
: |
: |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,記述例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.WebClients |
|
+ | ||
+ |
: |
|
+ |
: |
|
+ |
' popおよびpopsスキームの登録 |
|
+ |
PopWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' PopWebRequestインスタンスの作成 |
|
+ |
Dim request As WebRequest = WebRequest.Create("pop://user@pop.example.net/") |
|
+ |
: |
|
+ |
: |
|
+ |
}} |
|
+ |
#tabpage-end |
|
**リクエストURLと接続・認証時の動作 |
**リクエストURLと接続・認証時の動作 |
|
***&aname(PopWebRequest.login){接続と認証}; |
***&aname(PopWebRequest.login){接続と認証}; |
|
694,7 | 573,6 | |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#PopWebRequest.certs]]が必要になります。 |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は[[証明書の検証等>#PopWebRequest.certs]]が必要になります。 |
|
+ |
#tabpage(C#) |
|
#code(cs,記述例){{ |
#code(cs,記述例){{ |
|
// popおよびpopsスキームの登録 |
// popおよびpopsスキームの登録 |
|
PopWebRequestCreator.RegisterPrefix(); |
PopWebRequestCreator.RegisterPrefix(); |
|
753,66 | 631,6 | |
request6.Credentials = new NetworkCredential("user", "pass"); |
request6.Credentials = new NetworkCredential("user", "pass"); |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,記述例){{ |
|
+ |
' popおよびpopsスキームの登録 |
|
+ |
PopWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPSデフォルトポート(995)にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式は対応しているものを順に試行。 |
|
+ |
' |
|
+ |
Dim request1 As WebRequest = WebRequest.Create(New Uri("pops://user@pop.example.net/")) |
|
+ | ||
+ |
request1.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のポート10110に接続、可能ならSSL/TLSにアップグレード。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はAPOPを試行。 |
|
+ |
' |
|
+ |
Dim request2 As PopWebRequest = DirectCast(WebRequest.Create(New Uri("pop://user;AUTH=+APOP@pop.example.net:10110/")), PopWebRequest) |
|
+ | ||
+ |
request2.UseTlsIfAvailable = True |
|
+ |
request2.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のポート10110にSSL/TLSを用いて接続。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5を試行。 |
|
+ |
' |
|
+ |
Dim request3 As PopWebRequest = DirectCast(WebRequest.Create(New Uri("pops://user;AUTH=DIGEST-MD5@pop.example.net:10110/")), PopWebRequest) |
|
+ | ||
+ |
request3.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPデフォルトポート(110)に接続、SSL/TLSは使用しない。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 認証方式はDIGEST-MD5, CRAM-MD5, APOP, USER/PASSの順に試行。 |
|
+ |
' |
|
+ |
Dim request4 As PopWebRequest = DirectCast(WebRequest.Create(New Uri("pop://;AUTH=*@pop.example.net/")), PopWebRequest) |
|
+ | ||
+ |
request4.UseTlsIfAvailable = False |
|
+ |
request4.UsingSaslMechanisms = New String() {"DIGEST-MD5", "CRAM-MD5", "+APOP"} |
|
+ |
request4.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' ホスト"pop.example.net"のPOPデフォルトポート(110)に接続、可能ならSSL/TLSを使用する。 |
|
+ |
' ユーザ名に"user"、パスワードに"pass"を使用。 |
|
+ |
' 認証方式はCRAM-MD5, PLAIN, APOP, USER/PASSの順に試行。 ただしSSL/TLSが使用できない場合、平文による認証を許可しない。 |
|
+ |
' |
|
+ |
Dim request5 As PopWebRequest = DirectCast(WebRequest.Create(New Uri("pop://user@pop.example.net/")), PopWebRequest) |
|
+ | ||
+ |
request5.UseTlsIfAvailable = True |
|
+ |
request5.UsingSaslMechanisms = New String() {"CRAM-MD5", "PLAIN"} |
|
+ |
request5.AllowInsecureLogin = False |
|
+ |
request5.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' |
|
+ |
' GMailのアカウント"user"にPOPで接続。 パスワードは"pass"を使用。 |
|
+ |
' |
|
+ |
Dim request6 As WebRequest = WebRequest.Create(New Uri("pops://user@pop.gmail.com/")) |
|
+ | ||
+ |
request6.Credentials = New NetworkCredential("user", "pass") |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***&aname(PopWebRequest.certs){証明書の選択と検証}; |
***&aname(PopWebRequest.certs){証明書の選択と検証}; |
|
デフォルトでは、接続・認証時にPopSessionManagerクラスの以下のメンバを参照して証明書の選択と検証を行います。 |
デフォルトでは、接続・認証時にPopSessionManagerクラスの以下のメンバを参照して証明書の選択と検証を行います。 |
|
825,7 | 643,6 | |
以下は証明書の検証を行う簡単な例です。 |
以下は証明書の検証を行う簡単な例です。 |
|
+ |
#tabpage(C#) |
|
#code(cs,証明書の検証を行う例){{ |
#code(cs,証明書の検証を行う例){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
870,50 | 687,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb,証明書の検証を行う例){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.WebClients |
|
+ | ||
+ |
Public Class ValidateServerCerts |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
PopWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
' 証明書の検証を行うコールバックメソッドを指定 |
|
+ |
PopSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New WebClient |
|
+ |
client.Credentials = New NetworkCredential("user", "pass") |
|
+ |
client.DownloadFile("pops://user@localhost/;MSG=1", "sample.eml") |
|
+ |
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 |
|
+ |
#If DEBUG Then |
|
+ |
' デバッグ時のみSslPolicyErrors.RemoteCertificateNameMismatchを無視 |
|
+ |
if (CInt(sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) <> 0 then |
|
+ |
sslPolicyErrors = sslPolicyErrors And Not sslPolicyErrors.RemoteCertificateNameMismatch |
|
+ |
End If |
|
+ |
#End If |
|
+ | ||
+ |
If sslPolicyErrors = sslPolicyErrors.None Then |
|
+ |
Return True |
|
+ |
Else |
|
+ |
' エラーがあれば標準エラーに表示 |
|
+ |
Console.Error.WriteLine(sslPolicyErrors) |
|
+ |
Return False |
|
+ |
End If |
|
+ |
End Function |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、PopSessionManager.CreateSslStreamCallbackに適切なコールバックメソッドを指定してください。 |
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、PopSessionManager.CreateSslStreamCallbackに適切なコールバックメソッドを指定してください。 |
|
1031,7 | 804,6 | |
**PopClient |
**PopClient |
|
***&aname(PopClient.sample1){メッセージをダウンロードしてファイルに保存する}; |
***&aname(PopClient.sample1){メッセージをダウンロードしてファイルに保存する}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
1053,33 | 825,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ | ||
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ | ||
+ |
Class SaveToFile |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
Using client As New PopClient(New Uri("pop://user;AUTH=DIGEST-MD5@localhost/")) |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
' メールボックスにある1件目のメッセージをダウンロード |
|
+ |
Dim message As PopMessageInfo = client.GetFirstMessage() |
|
+ | ||
+ |
' ファイルsample.emlに保存 |
|
+ |
message.Save("sample.eml") |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[PopWebRequestで記述した例>#PopWebRequest.sample1]] |
同じ処理を[[PopWebRequestで記述した例>#PopWebRequest.sample1]] |
|
***&aname(PopClient.sample2){Gmailアカウントのメールボックスから、最新のメッセージをダウンロードする}; |
***&aname(PopClient.sample2){Gmailアカウントのメールボックスから、最新のメッセージをダウンロードする}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1115,54 | 864,10 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports System.Text |
|
+ | ||
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ |
Imports Smdn.Net.Pop3.Protocol.Client |
|
+ | ||
+ |
Class GpopRetrieveRecent |
|
+ |
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 |
|
+ | ||
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
PopConnection.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New PopClient(New Uri("pops://user@pop.gmail.com/")) |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
If client.MessageCount = 0 Then |
|
+ |
' メールボックスにメッセージがない |
|
+ |
Console.WriteLine("no messages") |
|
+ |
Return |
|
+ |
End If |
|
+ | ||
+ |
' メールボックスにある最後のメッセージを取得 |
|
+ |
Dim message As PopMessageInfo = client.GetLastMessage() |
|
+ | ||
+ |
' メッセージ本文をダウンロードし、iso-2022-jpでデコードして表示 |
|
+ |
Console.WriteLine(message.ReadAllText(Encoding.GetEncoding("iso-2022-jp"))) |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[PopWebRequestで記述した例>#PopWebRequest.sample2]] |
同じ処理を[[PopWebRequestで記述した例>#PopWebRequest.sample2]] |
|
***メールボックスにあるすべてメッセージをダウンロードしてファイルに保存する |
***メールボックスにあるすべてメッセージをダウンロードしてファイルに保存する |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
1212,68 | 917,8 | |
: |
: |
|
: |
: |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ |
Imports System.Text |
|
+ | ||
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ |
Imports Smdn.Net.Pop3.Protocol.Client |
|
+ | ||
+ |
Class SaveAndDelete |
|
+ |
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 |
|
+ | ||
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
PopConnection.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New PopClient(New Uri("pops://user;auth=ntlm@localhost/")) |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
' メッセージ本文を取得したら削除する |
|
+ |
client.DeleteAfterRetrieve = True |
|
+ | ||
+ |
' メールボックスにあるすべてのメッセージとIDを取得 |
|
+ |
For Each message As PopMessageInfo In client.GetMessages(True) |
|
+ |
' IDをファイル名として保存 (IDがファイル名として妥当かどうかのチェックは省略) |
|
+ |
message.Save(message.UniqueId + ".eml") |
|
+ |
Next |
|
+ | ||
+ |
' ログアウトしてメッセージを削除 |
|
+ |
client.Logout() |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ | ||
+ |
上記のコードは、次のコードと等価です。 |
|
+ |
#code(vb){{ |
|
+ |
: |
|
+ |
client.DeleteAfterRetrieve = False |
|
+ | ||
+ |
' メールボックスにあるすべてのメッセージとIDを取得 |
|
+ |
For Each message As PopMessageInfo In client.GetMessages(True) |
|
+ |
' IDをファイル名として保存 (IDがファイル名として妥当かどうかのチェックは省略) |
|
+ |
message.Save(message.UniqueId + ".eml") |
|
+ |
' 保存できたら削除マークを付ける |
|
+ |
message.MarkAsDeleted() |
|
+ |
Next |
|
+ |
: |
|
+ |
: |
|
+ |
}} |
|
+ |
#tabpage-end |
|
***メッセージのIDを使って新着メッセージをチェックする |
***メッセージのIDを使って新着メッセージをチェックする |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Collections.Generic; |
using System.Collections.Generic; |
|
1327,67 | 972,11 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Collections.Generic |
|
+ |
Imports System.Threading |
|
+ | ||
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ | ||
+ |
Class CheckRecent |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
' 既知のメッセージID |
|
+ |
Dim ids As New List(Of String) |
|
+ | ||
+ |
Using client As New PopClient(New Uri("pop://user;auth=ntlm@localhost/")) |
|
+ |
client.Profile.UseTlsIfAvailable = False |
|
+ | ||
+ |
Do |
|
+ |
client.Connect("pass") |
|
+ | ||
+ |
If Not client.ServerCapabilities.Has(PopCapability.Uidl) Then |
|
+ |
' サーバがUIDLをサポートしていない |
|
+ |
Throw New ApplicationException("UIDL incapable") |
|
+ |
End If |
|
+ | ||
+ |
' メールボックスにあるすべてのメッセージを取得 |
|
+ |
For Each message As PopMessageInfo In client.GetMessages(True) |
|
+ |
' 既知のメッセージIDかどうかチェック |
|
+ |
If ids.Contains(message.UniqueId) Then |
|
+ |
' 既知の場合は何もしない |
|
+ |
Else |
|
+ |
' 新着の場合は、メッセージ本文のヘッダのみを取得 |
|
+ |
For Each line As String In message.ReadLines(0) |
|
+ |
' ヘッダのうち"Subject:"で始まる行のみを表示 |
|
+ |
If (line.StartsWith("Subject:", StringComparison.OrdinalIgnoreCase)) Then |
|
+ |
Console.WriteLine("{0}: {1}", message.UniqueId, line) |
|
+ |
End If |
|
+ |
Next |
|
+ | ||
+ |
' 既知のメッセージIDとして追加 |
|
+ |
ids.Add(message.UniqueId) |
|
+ |
End If |
|
+ |
Next |
|
+ | ||
+ |
' いったん切断 |
|
+ |
client.Disconnect() |
|
+ | ||
+ |
' 5分後に再接続する |
|
+ |
Thread.Sleep(TimeSpan.FromMinutes(5.0)) |
|
+ |
Loop |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
この例において、初回の接続の時点ではidsは空なので、メールボックスにあるメッセージはすべて新着として扱われます。 |
この例において、初回の接続の時点ではidsは空なので、メールボックスにあるメッセージはすべて新着として扱われます。 |
|
***メッセージをダウンロードしてパース・デコードする |
***メッセージをダウンロードしてパース・デコードする |
|
メッセージをダウンロードした後、[[works/libs/Smdn.Formats.Mime]]を使ってパース・デコードする例。 |
メッセージをダウンロードした後、[[works/libs/Smdn.Formats.Mime]]を使ってパース・デコードする例。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
1415,7 | 1004,7 | |
new string('=', 32)); |
new string('=', 32)); |
|
// デコードした本文を表示 |
// デコードした本文を表示 |
|
~ |
if (decodedMessage.MimeType.TypeEqualsIgnoreCase("text")) |
if (parsedMessage.MimeType.TypeEqualsIgnoreCase("text")) |
Console.WriteLine(decodedMessage.ReadContentAsText()); |
Console.WriteLine(decodedMessage.ReadContentAsText()); |
|
else |
else |
|
Console.WriteLine("非テキストメッセージです"); |
Console.WriteLine("非テキストメッセージです"); |
|
1424,48 | 1013,9 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ | ||
+ |
Imports Smdn.Net.Pop3 |
|
+ |
Imports Smdn.Net.Pop3.Client |
|
+ |
Imports Smdn.Formats.Mime |
|
+ | ||
+ |
Class DecodeMime |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
Using client As New PopClient(New Uri("pop://user;auth=ntlm@localhost/")) |
|
+ |
client.Profile.UseTlsIfAvailable = False |
|
+ | ||
+ |
client.Connect("pass") |
|
+ | ||
+ |
' すべてのメッセージを取得 |
|
+ |
For Each message As PopMessageInfo In client.GetMessages() |
|
+ |
' メッセージの本文を取得し、MimeMessage.Loadメソッドでパース・デコードした結果を得る |
|
+ |
Dim decodedMessage As MimeMessage = message.ReadAs(Of MimeMessage)(AddressOf MimeMessage.Load) |
|
+ | ||
+ |
' デコードしたメッセージの件名を表示 |
|
+ |
Console.WriteLine("====[{0}: {1}]{2}", |
|
+ |
message.MessageNumber, |
|
+ |
decodedMessage.Headers("Subject").Value, |
|
+ |
New String("="c, 32)) |
|
+ | ||
+ |
' デコードした本文を表示 |
|
+ |
If decodedMessage.MimeType.TypeEqualsIgnoreCase("text") Then |
|
+ |
Console.WriteLine(decodedMessage.ReadContentAsText()) |
|
+ |
Else |
|
+ |
Console.WriteLine("非テキストメッセージです") |
|
+ |
End If |
|
+ |
Next |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ |
}} |
|
+ |
#tabpage-end |
|
**PopWebRequest/PopWebResponse |
**PopWebRequest/PopWebResponse |
|
***&aname(PopWebRequest.sample1){メッセージをダウンロードしてファイルに保存する}; |
***&aname(PopWebRequest.sample1){メッセージをダウンロードしてファイルに保存する}; |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
1486,28 | 1036,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ | ||
+ |
Imports Smdn.Net.Pop3.WebClients |
|
+ | ||
+ |
Class SaveToFile |
|
+ |
Public Shared Sub Main(ByVal args As String()) |
|
+ |
PopWebRequestCreator.RegisterPrefix() |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("user", "pass") |
|
+ | ||
+ |
' メールボックスにある1件目のメッセージをダウンロードしてファイルsample.emlに保存 |
|
+ |
client.DownloadFile("pop://user;AUTH=DIGEST-MD5@localhost/;MSG=1", "sample.eml") |
|
+ |
End Using |
|
+ |
End Sub |
|
+ |
End Class |
|
+ | ||
+ |
}} |
|
+ |
#tabpage-end |
|
同じ処理を[[PopClientで記述した例>#PopClient.sample1]] |
同じ処理を[[PopClientで記述した例>#PopClient.sample1]] |
|
works/libs/Smdn.Net.Pop3/index.wiki.txt
current | previous | |
---|---|---|
44,7 | 44,6 | |
*使い方・サンプルコード |
*使い方・サンプルコード |
|
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとPOP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。 |
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとPOP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。 |
|
+ |
#tabpage(C#) |
|
#code(cs){{ |
#code(cs){{ |
|
using System; |
using System; |
|
using System.Net; |
using System.Net; |
|
66,35 | 65,6 | |
} |
} |
|
} |
} |
|
}} |
}} |
|
+ |
#tabpage(VB) |
|
+ |
#code(vb){{ |
|
+ |
Imports System |
|
+ |
Imports System.Net |
|
+ |
Imports System.Net.Security |
|
+ |
Imports System.Security.Cryptography.X509Certificates |
|
+ | ||
+ |
Imports Smdn.Net.Pop3.WebClients |
|
+ | ||
+ |
Class GpopRetrieveExample |
|
+ |
Public Shared Sub Main() |
|
+ |
PopWebRequestCreator.RegisterPrefix() |
|
+ |
PopSessionManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate) |
|
+ | ||
+ |
Using client As New WebClient() |
|
+ |
client.Credentials = New NetworkCredential("username", "password") |
|
+ |
client.DownloadFile("pops://username@pop.gmail.com/;MSG=1", "message.eml") |
|
+ |
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 |
|
+ |
}} |
|
+ |
#tabpage-end |
|
この例で使用している修飾子(;MSG=1)はPOP URLに対する独自の拡張です。 詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Pop3/doc]]およびデモ用アプリケーション[[works/tools/junk/MRAConnector]], [[works/tools/junk/TundereBird]]をご覧ください。 |
この例で使用している修飾子(;MSG=1)はPOP URLに対する独自の拡張です。 詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Pop3/doc]]およびデモ用アプリケーション[[works/tools/junk/MRAConnector]], [[works/tools/junk/TundereBird]]をご覧ください。 |
|