メールを受信するには? メールサーバーにログインする必要があるようです。 そのメールサーバーが提供している方式にあわす必要があるようで 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() |