Descargar email con Powershell

Hace un par de días necesitaba hacer un script de powershell que descargara periódicamente mensajes de un buzón y realizara ciertas acciones dependiendo del contenido del mensaje.

Enviar emails desde .NET es muy sencillo con las clases de System.Net.Mail. Sin embargo, .NET Framework no incluye ninguna clase para poder descargar correo de un servidor POP3.

Después de buscar un rato, encontré OpenPop.NET, una librería que permite conectarse a servidores POP para consultar, descargar y eliminar mensajes. Con ella, descargar el correo es muy sencillo:

Add-type -Path OpenPop.dll

$client = New-Object OpenPop.Pop3.Pop3Client

$client.Connect("pop.gmail.com", 995, $True)
$client.Authenticate($user, $password)

$count = $client.GetMessageCount()
for ($i=1; $i -le $count; $i++)
{
    Write-Host "Procesando mensaje $i"
    $message = $client.GetMessage($i);
    
    $body = $message.FindFirstPlainTextVersion().GetBodyAsText();

    # Hacer lo que sea con el cuerpo del mensaje    
}
$client.Disconnect()
$client.Dispose()

Como véis, no tiene mucho misterio. Lo más complicado realmente fue dar con la librería correcta, pero una vez que la encontré, escribir el script fue cosa de 5 minutos.

2 comentarios en “Descargar email con Powershell

  1. Buenos días. Estoy probando la librería de OpenPop, e hice una aplicación de WinForms que utiliza el usuario, contraseña, puerto y servidor POP3 de Gmail, y al momento de descargar los mensajes, sólo me descarga los mensajes enviados/recibidos del año 2012 para atrás.
    ¿Has probado realizar la descarga de los emails mas recientes/enviados/spam/no leídos, etc?
    Si no es de mucha molestia, te agradecería la respuesta. Y en el caso de que puedas tener código hecho a la mano que (sin compromiso) puedas compartir, también se te agradece.
    Desde ya, muchísimas gracias por tomarte la molestia :)

Comentarios cerrados.