DoboWiki
Top
> .NETプログラミング研究/12 をテンプレートにして作成
.NETプログラミング研究/12 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第12号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第12号 [#f09746d4]
**.NET Tips [#z6bd4a84]
***POP3メールサーバーからメールを受信する [#uc0638db]
#column(注意){{
この記事の最新版は「[[POP3メールサーバーからメールを受信...
}}
.NET Frameworkでは、System.Web.Mail.SmtpMailクラスを使用...
しかし残念ながら、メールの受信はそう簡単ではありません。P...
以下にTcpClientクラスを使用してPOP3メールサーバーからすべ...
-[[IETF RFC Page>http://www.ietf.org/rfc]]
-[[Post Office Protocol - Version 3>http://www.ietf.org/r...
もしちゃんと勉強するつもりがなく、それでもメールを受信し...
-[[Baba Centerfolds>http://www.hi-ho.ne.jp...
以上のように初心者の方には全く勧められませんが、ごく簡単...
#code(csharp){{
using System;
using System.Text;
using System.Net.Sockets;
namespace Dobon.Net.Mail
{
public class Pop3Mail
{
//エントリポイント
public static void Main()
{
string[] mails;
mails = Receive("localhost", 110, "userid", "...
Console.ReadLine();
}
/// <summary>
/// POP3サーバーからメールをすべて受信する
/// </summary>
/// <param name="hostName">POP3サーバー名</param>
/// <param name="portNumber">POP3サーバーのポート...
/// <param name="userId">ユーザーID</param>
/// <param name="passWord">パスワード</param>
/// <param name="deleteMails">メールを削除するか<...
/// <returns>取得したメールの配列</returns>
public static string[] Receive(string hostName,
int portNumber,
string userId,
string passWord,
bool deleteMails)
{
string[] mails;
string msg = "";
NetworkStream stream;
//TcpClientの作成
TcpClient client = new TcpClient();
//タイムアウトの設定
client.ReceiveTimeout = 10000;
client.SendTimeout = 10000;
try
{
//サーバーに接続
client.Connect(hostName, portNumber);
//ストリームの取得
stream = client.GetStream();
//受信
msg = ReceiveData(stream);
//USERの送信
SendData(stream, "USER " + userId +"\r\n");
//受信
msg = ReceiveData(stream);
//PASSの送信
SendData(stream, "PASS " + passWord +"\r\...
//受信
msg = ReceiveData(stream);
//STATの送信
SendData(stream, "STAT\r\n");
//受信
msg = ReceiveData(stream);
//メール数の取得
int mailsCount = int.Parse(msg.Split(' ')...
mails = new string[mailsCount];
//すべてのメールの内容を受信
for (int i = 1; i <= mailsCount; i++)
{
//RETRの送信(メール本文を受信)
SendData(stream, "RETR " + i.ToString...
//受信
msg = ReceiveData(stream, true);
mails[i - 1] = msg.Substring(msg.Inde...
//メールを削除するか
if (deleteMails)
{
//DELEの送信(メールに削除マーク...
SendData(stream, "DELE " + i.ToSt...
//受信
msg = ReceiveData(stream);
}
}
//QUITの送信
SendData(stream, "QUIT\r\n");
//受信
msg = ReceiveData(stream);
}
catch
{
throw;
}
finally
{
//切断
client.Close();
}
return mails;
}
//データを受信する
private static string ReceiveData(
NetworkStream stream,
bool multiLines,
int bufferSize,
Encoding enc)
{
byte[] data = new byte[bufferSize];
int len;
string msg = "";
//すべて受信する
//(無限ループに陥る恐れあり)
do
{
//受信
len = stream.Read(data, 0, data.Length);
//文字列に変換する
msg += enc.GetString(data, 0, len);
}
while (stream.DataAvailable ||
((!multiLines || msg.StartsWith("-ERR")) &&
!msg.EndsWith("\r\n")) ||
(multiLines && !msg.EndsWith("\r\n.\r\n")...
//"-ERR"を受け取った時は例外をスロー
if (msg.StartsWith("-ERR"))
throw new ApplicationException("Received ...
//表示
Console.Write("S: " + msg);
return msg;
}
private static string ReceiveData(NetworkStream s...
bool multiLines,
int bufferSize)
{
return ReceiveData(stream, multiLines, buffer...
Encoding.GetEncoding(50220));
}
private static string ReceiveData(NetworkStream s...
bool multiLines)
{
return ReceiveData(stream, multiLines, 256);
}
private static string ReceiveData(NetworkStream s...
{
return ReceiveData(stream, false);
}
//データを送信する
private static void SendData(NetworkStream stream,
string msg,
Encoding enc)
{
//byte型配列に変換
byte[] data = enc.GetBytes(msg);
//送信
stream.Write(data, 0, data.Length);
//表示
Console.Write("C: " + msg);
}
private static void SendData(NetworkStream stream,
string msg)
{
SendData(stream, msg, Encoding.ASCII);
}
}
}
}}
#code(vbnet){{
'C#のコードを'C# to VB.NET Translator'で変換し、修正した...
'http://www.aspalliance.com/aldotnet/examples/translate.a...
Imports System
Imports System.Text
Imports System.Net.Sockets
Namespace Dobon.Net.Mail
Public Class Pop3Mail
'エントリポイント
Public Shared Sub Main()
Dim mails() As String
mails = Receive("localhost", 110, "userid", "...
Console.ReadLine()
End Sub 'Main
'/ <summary>
'/ POP3サーバーからメールをすべて受信する
'/ </summary>
'/ <param name="hostName">POP3サーバー名</param>
'/ <param name="portNumber">POP3サーバーのポート...
'/ <param name="userId">ユーザーID</param>
'/ <param name="passWord">パスワード</param>
'/ <param name="deleteMails">メールを削除するか</...
'/ <returns>取得したメールの配列</returns>
Public Shared Function Receive( _
ByVal hostName As String, _
ByVal portNumber As Integer, _
ByVal userId As String, _
ByVal passWord As String, _
ByVal deleteMails As Boolean) As String()
Dim mails() As String
Dim msg As String = ""
Dim stream As NetworkStream
'TcpClientの作成
Dim client As New TcpClient
'タイムアウトの設定
client.ReceiveTimeout = 10000
client.SendTimeout = 10000
Try
'サーバーに接続
client.Connect(hostName, portNumber)
'ストリームの取得
stream = client.GetStream()
'受信
msg = ReceiveData(stream)
'USERの送信
SendData(stream, "USER " + userId + vbCrLf)
'受信
msg = ReceiveData(stream)
'PASSの送信
SendData(stream, "PASS " + passWord + vbC...
'受信
msg = ReceiveData(stream)
'STATの送信
SendData(stream, "STAT" + vbCrLf)
'受信
msg = ReceiveData(stream)
'メール数の取得
Dim mailsCount As Integer = _
Integer.Parse(msg.Split(" "c)(1))
mails = New String(mailsCount) {}
'すべてのメールの内容を受信
Dim i As Integer
For i = 1 To mailsCount
'RETRの送信(メール本文を受信)
SendData(stream, "RETR " + i.ToString...
'受信
msg = ReceiveData(stream, True)
mails((i - 1)) = _
msg.Substring((msg.IndexOf(vbCrLf...
'メールを削除するか
If deleteMails Then
'DELEの送信(メールに削除マークを...
SendData(stream, "DELE " + i.ToSt...
'受信
msg = ReceiveData(stream)
End If
Next i
'QUITの送信
SendData(stream, "QUIT" + vbCrLf)
'受信
msg = ReceiveData(stream)
Catch
Finally
'切断
client.Close()
End Try
Return mails
End Function 'Receive
'データを受信する
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean, _
ByVal bufferSize As Integer, _
ByVal enc As Encoding) As String
Dim data(bufferSize) As Byte
Dim len As Integer
Dim msg As String = ""
'すべて受信する
'(無限ループに陥る恐れあり)
Do
'受信
len = stream.Read(data, 0, data.Length)
'文字列に変換する
msg += enc.GetString(data, 0, len)
Loop While stream.DataAvailable Or _
((Not multiLines Or msg.StartsWith("-ERR"...
Not msg.EndsWith(vbCrLf)) Or _
(multiLines And Not msg.EndsWith(vbCrLf +...
'"-ERR"を受け取った時は例外をスロー
If msg.StartsWith("-ERR") Then
Throw New ApplicationException("Received ...
End If
'表示
Console.Write(("S: " + msg))
Return msg
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean, _
ByVal bufferSize As Integer) As String
Return ReceiveData(stream, multiLines, buffer...
Encoding.GetEncoding(50220))
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean) As String
Return ReceiveData(stream, multiLines, 256)
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream) As String
Return ReceiveData(stream, False)
End Function 'ReceiveData
'データを送信する
Private Overloads Shared Sub SendData( _
ByVal stream As NetworkStream, _
ByVal msg As String, _
ByVal enc As Encoding)
'byte型配列に変換
Dim data As Byte() = enc.GetBytes(msg)
'送信
stream.Write(data, 0, data.Length)
'表示
Console.Write(("C: " + msg))
End Sub 'SendData
Private Overloads Shared Sub SendData( _
ByVal stream As NetworkStream, _
ByVal msg As String)
SendData(stream, msg, Encoding.ASCII)
End Sub 'SendData
End Class 'Pop3Mail
End Namespace 'Dobon.Net.Mail
}}
**ピンポイントリンク [#d2384479]
***C#のコードをVB.NETへ変換する(及びその逆) [#od439a9b]
前回の補足と修正
前回、C#のコードをVB.NETのコードへ、VB.NETのコードをC#の...
まず前回「[[Convert C# to VB .NET>http://www.kamalpatel.n...
に関して、
「日本語を含むコードを変換しようとすると、エラーになるこ...
と書きましたが、これは間違いのようで、実際には";"の前で改...
さらに前回は「Convert C# to VB .NET」と「[[C# to VB.NET T...
のどちらが優れているか分からないと書きましたが、何度とな...
例えば上記「.NET Tips」で紹介したコードを「Convert C# to ...
また、C#からVB.NETのコードへの変換で役に立つツールに関し...
-[[VBCS翻訳機>http://santamartaofthepeace.hp.infoseek.co....
この「VBCS翻訳機」や前回紹介した「[[Convert Visual Basic ...
を使ってみると、正直なところ、C#からVB.NETへの変換ツール...
**コメント [#qab4ce34]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-07-14 (月) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第12号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第12号 [#f09746d4]
**.NET Tips [#z6bd4a84]
***POP3メールサーバーからメールを受信する [#uc0638db]
#column(注意){{
この記事の最新版は「[[POP3メールサーバーからメールを受信...
}}
.NET Frameworkでは、System.Web.Mail.SmtpMailクラスを使用...
しかし残念ながら、メールの受信はそう簡単ではありません。P...
以下にTcpClientクラスを使用してPOP3メールサーバーからすべ...
-[[IETF RFC Page>http://www.ietf.org/rfc]]
-[[Post Office Protocol - Version 3>http://www.ietf.org/r...
もしちゃんと勉強するつもりがなく、それでもメールを受信し...
-[[Baba Centerfolds>http://www.hi-ho.ne.jp...
以上のように初心者の方には全く勧められませんが、ごく簡単...
#code(csharp){{
using System;
using System.Text;
using System.Net.Sockets;
namespace Dobon.Net.Mail
{
public class Pop3Mail
{
//エントリポイント
public static void Main()
{
string[] mails;
mails = Receive("localhost", 110, "userid", "...
Console.ReadLine();
}
/// <summary>
/// POP3サーバーからメールをすべて受信する
/// </summary>
/// <param name="hostName">POP3サーバー名</param>
/// <param name="portNumber">POP3サーバーのポート...
/// <param name="userId">ユーザーID</param>
/// <param name="passWord">パスワード</param>
/// <param name="deleteMails">メールを削除するか<...
/// <returns>取得したメールの配列</returns>
public static string[] Receive(string hostName,
int portNumber,
string userId,
string passWord,
bool deleteMails)
{
string[] mails;
string msg = "";
NetworkStream stream;
//TcpClientの作成
TcpClient client = new TcpClient();
//タイムアウトの設定
client.ReceiveTimeout = 10000;
client.SendTimeout = 10000;
try
{
//サーバーに接続
client.Connect(hostName, portNumber);
//ストリームの取得
stream = client.GetStream();
//受信
msg = ReceiveData(stream);
//USERの送信
SendData(stream, "USER " + userId +"\r\n");
//受信
msg = ReceiveData(stream);
//PASSの送信
SendData(stream, "PASS " + passWord +"\r\...
//受信
msg = ReceiveData(stream);
//STATの送信
SendData(stream, "STAT\r\n");
//受信
msg = ReceiveData(stream);
//メール数の取得
int mailsCount = int.Parse(msg.Split(' ')...
mails = new string[mailsCount];
//すべてのメールの内容を受信
for (int i = 1; i <= mailsCount; i++)
{
//RETRの送信(メール本文を受信)
SendData(stream, "RETR " + i.ToString...
//受信
msg = ReceiveData(stream, true);
mails[i - 1] = msg.Substring(msg.Inde...
//メールを削除するか
if (deleteMails)
{
//DELEの送信(メールに削除マーク...
SendData(stream, "DELE " + i.ToSt...
//受信
msg = ReceiveData(stream);
}
}
//QUITの送信
SendData(stream, "QUIT\r\n");
//受信
msg = ReceiveData(stream);
}
catch
{
throw;
}
finally
{
//切断
client.Close();
}
return mails;
}
//データを受信する
private static string ReceiveData(
NetworkStream stream,
bool multiLines,
int bufferSize,
Encoding enc)
{
byte[] data = new byte[bufferSize];
int len;
string msg = "";
//すべて受信する
//(無限ループに陥る恐れあり)
do
{
//受信
len = stream.Read(data, 0, data.Length);
//文字列に変換する
msg += enc.GetString(data, 0, len);
}
while (stream.DataAvailable ||
((!multiLines || msg.StartsWith("-ERR")) &&
!msg.EndsWith("\r\n")) ||
(multiLines && !msg.EndsWith("\r\n.\r\n")...
//"-ERR"を受け取った時は例外をスロー
if (msg.StartsWith("-ERR"))
throw new ApplicationException("Received ...
//表示
Console.Write("S: " + msg);
return msg;
}
private static string ReceiveData(NetworkStream s...
bool multiLines,
int bufferSize)
{
return ReceiveData(stream, multiLines, buffer...
Encoding.GetEncoding(50220));
}
private static string ReceiveData(NetworkStream s...
bool multiLines)
{
return ReceiveData(stream, multiLines, 256);
}
private static string ReceiveData(NetworkStream s...
{
return ReceiveData(stream, false);
}
//データを送信する
private static void SendData(NetworkStream stream,
string msg,
Encoding enc)
{
//byte型配列に変換
byte[] data = enc.GetBytes(msg);
//送信
stream.Write(data, 0, data.Length);
//表示
Console.Write("C: " + msg);
}
private static void SendData(NetworkStream stream,
string msg)
{
SendData(stream, msg, Encoding.ASCII);
}
}
}
}}
#code(vbnet){{
'C#のコードを'C# to VB.NET Translator'で変換し、修正した...
'http://www.aspalliance.com/aldotnet/examples/translate.a...
Imports System
Imports System.Text
Imports System.Net.Sockets
Namespace Dobon.Net.Mail
Public Class Pop3Mail
'エントリポイント
Public Shared Sub Main()
Dim mails() As String
mails = Receive("localhost", 110, "userid", "...
Console.ReadLine()
End Sub 'Main
'/ <summary>
'/ POP3サーバーからメールをすべて受信する
'/ </summary>
'/ <param name="hostName">POP3サーバー名</param>
'/ <param name="portNumber">POP3サーバーのポート...
'/ <param name="userId">ユーザーID</param>
'/ <param name="passWord">パスワード</param>
'/ <param name="deleteMails">メールを削除するか</...
'/ <returns>取得したメールの配列</returns>
Public Shared Function Receive( _
ByVal hostName As String, _
ByVal portNumber As Integer, _
ByVal userId As String, _
ByVal passWord As String, _
ByVal deleteMails As Boolean) As String()
Dim mails() As String
Dim msg As String = ""
Dim stream As NetworkStream
'TcpClientの作成
Dim client As New TcpClient
'タイムアウトの設定
client.ReceiveTimeout = 10000
client.SendTimeout = 10000
Try
'サーバーに接続
client.Connect(hostName, portNumber)
'ストリームの取得
stream = client.GetStream()
'受信
msg = ReceiveData(stream)
'USERの送信
SendData(stream, "USER " + userId + vbCrLf)
'受信
msg = ReceiveData(stream)
'PASSの送信
SendData(stream, "PASS " + passWord + vbC...
'受信
msg = ReceiveData(stream)
'STATの送信
SendData(stream, "STAT" + vbCrLf)
'受信
msg = ReceiveData(stream)
'メール数の取得
Dim mailsCount As Integer = _
Integer.Parse(msg.Split(" "c)(1))
mails = New String(mailsCount) {}
'すべてのメールの内容を受信
Dim i As Integer
For i = 1 To mailsCount
'RETRの送信(メール本文を受信)
SendData(stream, "RETR " + i.ToString...
'受信
msg = ReceiveData(stream, True)
mails((i - 1)) = _
msg.Substring((msg.IndexOf(vbCrLf...
'メールを削除するか
If deleteMails Then
'DELEの送信(メールに削除マークを...
SendData(stream, "DELE " + i.ToSt...
'受信
msg = ReceiveData(stream)
End If
Next i
'QUITの送信
SendData(stream, "QUIT" + vbCrLf)
'受信
msg = ReceiveData(stream)
Catch
Finally
'切断
client.Close()
End Try
Return mails
End Function 'Receive
'データを受信する
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean, _
ByVal bufferSize As Integer, _
ByVal enc As Encoding) As String
Dim data(bufferSize) As Byte
Dim len As Integer
Dim msg As String = ""
'すべて受信する
'(無限ループに陥る恐れあり)
Do
'受信
len = stream.Read(data, 0, data.Length)
'文字列に変換する
msg += enc.GetString(data, 0, len)
Loop While stream.DataAvailable Or _
((Not multiLines Or msg.StartsWith("-ERR"...
Not msg.EndsWith(vbCrLf)) Or _
(multiLines And Not msg.EndsWith(vbCrLf +...
'"-ERR"を受け取った時は例外をスロー
If msg.StartsWith("-ERR") Then
Throw New ApplicationException("Received ...
End If
'表示
Console.Write(("S: " + msg))
Return msg
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean, _
ByVal bufferSize As Integer) As String
Return ReceiveData(stream, multiLines, buffer...
Encoding.GetEncoding(50220))
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream, _
ByVal multiLines As Boolean) As String
Return ReceiveData(stream, multiLines, 256)
End Function 'ReceiveData
Private Overloads Shared Function ReceiveData( _
ByVal stream As NetworkStream) As String
Return ReceiveData(stream, False)
End Function 'ReceiveData
'データを送信する
Private Overloads Shared Sub SendData( _
ByVal stream As NetworkStream, _
ByVal msg As String, _
ByVal enc As Encoding)
'byte型配列に変換
Dim data As Byte() = enc.GetBytes(msg)
'送信
stream.Write(data, 0, data.Length)
'表示
Console.Write(("C: " + msg))
End Sub 'SendData
Private Overloads Shared Sub SendData( _
ByVal stream As NetworkStream, _
ByVal msg As String)
SendData(stream, msg, Encoding.ASCII)
End Sub 'SendData
End Class 'Pop3Mail
End Namespace 'Dobon.Net.Mail
}}
**ピンポイントリンク [#d2384479]
***C#のコードをVB.NETへ変換する(及びその逆) [#od439a9b]
前回の補足と修正
前回、C#のコードをVB.NETのコードへ、VB.NETのコードをC#の...
まず前回「[[Convert C# to VB .NET>http://www.kamalpatel.n...
に関して、
「日本語を含むコードを変換しようとすると、エラーになるこ...
と書きましたが、これは間違いのようで、実際には";"の前で改...
さらに前回は「Convert C# to VB .NET」と「[[C# to VB.NET T...
のどちらが優れているか分からないと書きましたが、何度とな...
例えば上記「.NET Tips」で紹介したコードを「Convert C# to ...
また、C#からVB.NETのコードへの変換で役に立つツールに関し...
-[[VBCS翻訳機>http://santamartaofthepeace.hp.infoseek.co....
この「VBCS翻訳機」や前回紹介した「[[Convert Visual Basic ...
を使ってみると、正直なところ、C#からVB.NETへの変換ツール...
**コメント [#qab4ce34]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-07-14 (月) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]