10. POP3 (Post Office Protocol v3)

El Post Office Protocol v3 (POP3) se definió en la RFC 1939 para que los clientes descarguen mensajes desde un buzón remoto y los almacenen localmente. Su diseño estático lo vuelve apropiado para equipos con conectividad intermitente o capacidad de almacenamiento suficiente.

POP3 prioriza la simplicidad: una vez que el cliente obtiene los mensajes, puede eliminarlos del servidor o dejarlos marcados como leídos según la configuración. Esta filosofía contrasta con IMAP, que mantiene el buzón sincronizado entre múltiples dispositivos.

10.1 Descarga de correos desde el servidor

El cliente se conecta al servidor POP3, se autentica, lista los mensajes disponibles y decide cuáles descargar. Cada mensaje se transfiere completo, por lo que la experiencia depende del ancho de banda y del tamaño de los adjuntos. Tras la descarga, el usuario puede trabajar sin conexión porque los datos residen en su equipo.

Este enfoque funcionó durante la era de los clientes de escritorio como Outlook Express o Eudora, y sigue siendo útil en sistemas de respaldo o archivado automático.

10.2 Flujo de funcionamiento

Una sesión POP3 atraviesa tres estados:

  1. Autorización: el cliente envía USER y PASS para autenticarse.
  2. Transacción: se listan (LIST) y leen (RETR) mensajes, pudiendo marcarlos para borrado (DELE).
  3. Actualización: al salir con QUIT, el servidor elimina definitivamente los mensajes marcados.

Si se produce un error inesperado, el servidor vuelve al estado inicial y descarta los cambios, evitando la pérdida de mensajes.

10.3 Comandos principales

POP3 emplea un conjunto reducido de instrucciones fáciles de interpretar:

  • USER / PASS: credenciales del buzón.
  • STAT: resume la cantidad de mensajes y el tamaño total.
  • LIST [n]: muestra todos los mensajes o uno en particular con su peso en bytes.
  • RETR n: descarga el mensaje n.
  • DELE n: marca el mensaje para borrado al finalizar la sesión.
  • TOP n m: recupera los primeros m renglones del mensaje n, útil para verificar encabezados.
  • UIDL: devuelve identificadores únicos para detectar correos ya descargados.
  • QUIT: cierra la conexión aplicando los cambios.

Cada comando recibe una respuesta +OK o -ERR que informa el resultado y detalla la causa del fallo cuando corresponde.

10.4 Puertos y seguridad

POP3 se ejecuta sobre los siguientes puertos estándares:

Puerto Modo Uso recomendado
110/TCP POP3 sin cifrar. Solo en redes internas seguras, habilitando STARTTLS para proteger credenciales.
995/TCP POP3S con TLS implícito. Configuración preferida en Internet y servicios comerciales.

Muchos proveedores obligan el uso de 995/TCP y certificados válidos para evitar robo de contraseñas y cumplir normativas de privacidad.

10.5 POP3 vs IMAP

Aunque ambos permiten acceder al buzón, sus objetivos difieren:

Criterio POP3 IMAP
Sincronización Centra la información en el cliente. Mantiene el estado en el servidor con carpetas y banderas.
Uso sin conexión Excelente, porque descarga todo el contenido. Depende de lo que cachee el cliente.
Dispositivos múltiples Limitado, puede duplicar o borrar mensajes sin avisar. Permite acceso concurrente ordenado.

Comprender estas diferencias ayuda a elegir el protocolo adecuado al diseñar servicios de correo corporativo.

10.6 Ejemplo de sesión interactiva

Una prueba rápida puede realizarse con openssl s_client para negociar TLS y luego enviar comandos POP3:

openssl s_client -connect pop3.ejemplo.com:995
+OK POP3 server ready
USER laboratorio
+OK
PASS ClaveSecreta!
+OK Logged in.
STAT
+OK 2 34567
LIST
+OK 2 messages
1 12000
2 22567
RETR 1
(mensaje completo)
DELE 1
+OK message 1 deleted
QUIT
+OK Goodbye

Este flujo confirma credenciales, tamaño de buzón y capacidad de borrado antes de configurar un cliente definitivo.

10.7 Configuración en clientes conocidos

Herramientas como Outlook, Thunderbird o clientes móviles permiten elegir POP3 en modo 110/995. Es recomendable activar la opción dejar una copia si se desea combinar POP3 con acceso web, y programar purgas periódicas para liberar espacio en el servidor.

10.8 Diagnóstico con PowerShell

Para validar conectividad puede utilizarse Test-NetConnection y un script que consulte el banner del servicio:

Test-NetConnection -ComputerName pop3.ejemplo.com -Port 995

$client = New-Object System.Net.Sockets.TcpClient("pop3.ejemplo.com", 110)
$stream = $client.GetStream()
$reader = New-Object System.IO.StreamReader($stream)
Write-Output ($reader.ReadLine())
$client.Close()

El primer comando confirma que el puerto 995 está abierto; el segundo obtiene el banner de 110/TCP para verificar que el servicio responda antes de obligar STARTTLS.

10.9 Automatización con Python

Con poplib es posible descargar mensajes de manera programada para archivarlos o generar reportes:

import poplib

servidor = poplib.POP3_SSL("pop3.ejemplo.com", 995)
servidor.user("laboratorio")
servidor.pass_("ClaveSecreta!")
total, tam = servidor.stat()
print(f"Mensajes: {total}, bytes: {tam}")

if total:
    encabezados = servidor.top(1, 5)[1]
    for linea in encabezados:
        print(linea.decode())

servidor.quit()

El script obtiene estadísticas y muestra los primeros renglones del mensaje más reciente, ideal para monitorear buzones destinados a alertas automáticas.

10.10 Buenas prácticas y cierre

Mantener POP3 seguro implica exigir TLS, contraseñas robustas y límites de conexiones para evitar abusos. También conviene habilitar UIDL y registros detallados para detectar clientes que descargan el mismo mensaje repetidas veces. Entender POP3 facilita la convivencia con IMAP y servicios modernos, y permite ofrecer alternativas livianas cuando la sincronización completa no es necesaria.