miércoles, 22 de abril de 2009

Función con Socket TCPClient para Recibir correo en .Net

Buenas!
aquí os dejo una función para poder recibir correo. En el Framework 2.0 de .Net, existe un namespace system.Net.Mail, que funciona muy bien (y sencillo de usar) para enviar correo, pero no para recibirlo. Para ello, nos construimos nosotros la trama y abriendo un socket con el protocolo TCP, podemos conectarnos al servidor de correo y leerlo.

Ahí va:

Sub Recibir()

Dim hostName As String = "pop.servidoredecorreo.com" 'Pon el hostname de tu servidor de correo entrante
Dim userName As String = "GRUPO\Usuario" 'Pon tu Grupo\Usuario
Dim userPassword As String = "Password" ' Pon tu Password

Dim tcpClient As Net.Sockets.TcpClient = New Net.Sockets.TcpClient
Dim messageNumber As String = "1"
Dim returnMessage As String
Dim sTemp As String

Try
tcpClient.Connect(hostName, 110)
Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream()
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
Dim sendBytes As Byte()

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))


sendBytes = System.Text.Encoding.ASCII.GetBytes("User " + userName + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)

sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))


sendBytes = System.Text.Encoding.ASCII.GetBytes("Pass " + userPassword + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)

sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

sendBytes = System.Text.Encoding.ASCII.GetBytes("STAT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)

sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

sendBytes = System.Text.Encoding.ASCII.GetBytes("RETR " + messageNumber + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)

System.Threading.Thread.Sleep(500)

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
returnMessage = System.Text.Encoding.ASCII.GetString(bytes)

Console.WriteLine(returnMessage.ToString)

sendBytes = System.Text.Encoding.ASCII.GetBytes("QUIT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)

tcpClient.Close()
Catch ex As Exception
Console.WriteLine("No se puede recibir correo o el buzon de entrada esta vacio")
End Try

End Sub


Espero que os haya sido útil!
Saludos!!

No hay comentarios:

Publicar un comentario