|
メールを受信するには? メールサーバーにログインする必要があるようです。 そのメールサーバーが提供している方式にあわす必要があるようで POP3が、一般的のようです。 POP3は、TCP/IPのポート番号110で行うことが多いようです。 では、やってみましょう。 「新しいプロジェクト」で、「Windowsフォームアプリケーション」を選択します。 受信用の関数と送信用の関数を用意
通常JISコードなので、エンコード(文字コード)をJISにしておく。
データ送信用の関数
Private Sub SendDataM(ByRef ns As System.Net.Sockets.NetworkStream, ByVal msg As String)
'文字コードを指定する
'Dim enc_asc As System.Text.Encoding = System.Text.Encoding.ASCII
Dim enc_jis As System.Text.Encoding = System.Text.Encoding.GetEncoding("ISO-2022-JP")
Dim msgBytes As Byte() = enc_jis.GetBytes(msg & vbCrLf)
ns.Write(msgBytes, 0, msgBytes.Length)
End Sub
データ受信用の関数
Private Sub DataRecvM(ByRef ns As System.Net.Sockets.NetworkStream, ByRef resMsg As String)
'文字コードを指定する
'Dim enc_asc As System.Text.Encoding = System.Text.Encoding.ASCII
Dim enc_jis As System.Text.Encoding = System.Text.Encoding.GetEncoding("ISO-2022-JP")
Dim ms As New System.IO.MemoryStream
Dim resBytes(4096) As Byte
Dim resSize As Integer
Do While ns.DataAvailable
'データを受信する
resSize = ns.Read(resBytes, 0, resBytes.Length)
'受信したデータを蓄積する
ms.Write(resBytes, 0, resSize)
Loop
resMsg = enc_jis.GetString(ms.ToArray())
ms.Close()
End Sub
ソケットをオープンしてコマンドを送信すれば、結果が取得できる。
Dim mm_socket As System.Net.Sockets.TcpClient = New System.Net.Sockets.TcpClient(mp_host, mp_port)
Dim ns As System.Net.Sockets.NetworkStream = mm_socket.GetStream()
DataRecvM(ns, resMsg)
SendDataM(ns, "USER " & mp_user)
DataRecvM(ns, resMsg)
SendDataM(ns, "PASS " & mp_pw)
DataRecvM(ns, resMsg)
SendDataM(ns, "LIST")
DataRecvM(ns, resMsg)
SendDataM(ns, "RETR 1")
DataRecvM(ns, resMsg)
SendDataM(ns, "QUIT")
DataRecvM(ns, resMsg)
ns.Close()
mm_socket.Close()
実際の受信処理では、LISTコマンドの結果により、RETRコマンドを調整する必要があります。
(POPサーバーのコマンドは、専門サイト等で、お調べ願います。抜粋) メールを送信するには? SMTPサーバーに接続する必要があるようです。 SMTPサーバーは、TCP/IPのポート番号25で行うことが多いようです。 基本的な受信用の関数と送信用の関数は、受信と同じです。
送信の場合、メールの本文(ヘッダー含む)を送信する必要から別の関数を用意。
Private Sub SendDataMData(ByRef ns As System.Net.Sockets.NetworkStream, ByVal msg As String)
'文字コードを指定する
'Dim enc_asc As System.Text.Encoding = System.Text.Encoding.ASCII
Dim enc_jis As System.Text.Encoding = System.Text.Encoding.GetEncoding("ISO-2022-JP")
Dim msgBytes As Byte() = enc_jis.GetBytes(msg & vbCrLf & "." & vbCrLf)
ns.Write(msgBytes, 0, msgBytes.Length)
End Sub
ソケットをオープンしてコマンドを送信すれば、メール送信が出来る。
Dim mm_socket As System.Net.Sockets.TcpClient = New System.Net.Sockets.TcpClient(mp_host, mp_port)
Dim ns As System.Net.Sockets.NetworkStream = mm_socket.GetStream()
DataRecvM(ns, resMsg)
SendDataM(ns, "HELO MAIL")
DataRecvM(ns, resMsg)
SendDataM(ns, "MAIL FROM: <" & mp_From & ">")
DataRecvM(ns, resMsg)
SendDataM(ns, "RCPT TO: <" & mp_To & ">")
DataRecvM(ns, resMsg)
SendDataM(ns, "DATA")
DataRecvM(ns, resMsg)
SendDataMData(ns, mp_data)
DataRecvM(ns, resMsg)
SendDataM(ns, "QUIT")
DataRecvM(ns, resMsg)
ns.Close()
mm_socket.Close()
|