06 febrero 2014

Purgar / borrar todos los mensajes de un servidor POP3 en PHP

Debido a una configuración incorrecta de la cuenta de correo predeterminada en un dominio, dicho buzón se encontraba con más de 150 mil mensajes la mayoría siendo correo basura.

Borrarlos manualmente desde la interfaz webmail no era una opción, tampoco descargarlos al cliente de correo debido a que eso representaba además del tiempo más de 1GB de tráfico. De igual forma no era posible hacerlo con un shell script por las restricciones del proveedor del alojamiento.

Luego de cierto tiempo de búsqueda encontré una página donde tienen un ejemplo de cómo hacerlo en PHP.

El código se muestra abajo, y lo único que hay que tomar en consideración es que dicho código no está completo y esto es a propósito, haciendo falta asignar los valores para las variables para usuario, contraseña y servidor de correo.

<?php 
    // *** ASIGNAR VARIABLES ***

    $cmd = array();
    $cmd[]  = "USER $username\r\n";
    $cmd[]  = "PASS $password\r\n";
    $cmd[]  = "STAT\r\n";
    $cmd[]  = "QUIT\r\n";

    $port = 110;

    $fp  = fsockopen($server, $port);
    if(!$fp) {
        print("Error connecting to server $server");
    }
    else {
        $ret = fgets($fp, 1024);
        foreach($cmd as $ret) {
            fputs($fp,$ret);
            $line = fgets($fp, 1024);
            print($line."<br>");
            if($ret=="STAT\r\n") {
                $fields = explode(" ",$line);
                $num_mails = $fields[1];
                for($i=1;$i<=$num_mails;$i++) {
                    fputs($fp,"DELE $i\r\n");
                    $line = fgets($fp, 1024);
                }
            }
        }
    }
?>

El resultado sería como se ve a continuación:

Enlace al ejemplo original (en inglés):
Purge / delete all emails from a POP server in PHP