Recuperar correo desde un servidor POP3 usando php


Estoy tratando de obtener un correo de POP3 (estoy usando el servidor de correo POP3 y estoy tratando de obtener el contenido del correo y almacenarlo en una tabla de base de datos para mi proyecto.), pero no puedo encontrar ningún script PHP para eso, todos son solo para IMAP.

¿Sabe cómo obtener correo de un servidor POP3?

Gracias.

 31
Author: Piskvor, 2010-07-02

4 answers

Sorprendentemente, La biblioteca imap de PHP también se puede usar para trabajar con buzones POP3. La mayoría de las funciones avanzadas de IMAP no funcionarán, por supuesto (por ejemplo, carpetas o buscar partes de mensajes), pero la funcionalidad básica de POP3 está implementada.

La principal diferencia es la cadena de opciones que estás pasando a imap_open - para citar esa página:

// To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");

Aparte de eso, es una navegación justa: no necesitará más que imap_open, imap_num_msg, imap_body, imap_delete e imap_close para acceso POP3 básico.

 33
Author: Piskvor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-02 10:58:11

Las funciones IMAP de PHP pueden tratar con cajas IMAP y POP3.

Estas funciones le permiten operar con el protocolo IMAP, así como con los métodos de acceso NNTP, POP3 y buzón local.

Tenga en cuenta, sin embargo, que algunas funciones IMAP no funcionarán correctamente con el protocolo POP.

Hay una Nota aportada por el Usuario que proporciona un fragmento interesante. Tal vez quieras echarle un vistazo. No puedo decir nada sobre su calidad, pero desde la superficie, se ve bien.


A continuación, la Nota Aportada:

Por toda la gente que viene aquí orando por:

1) una manera muy fácil de leer archivos adjuntos MIME, o

2) una manera muy fácil de acceder a las carpetas POP3

No busque más.

function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false)
{
    $ssl=($ssl==false)?"/novalidate-cert":"";
    return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass));
}
function pop3_stat($connection)        
{
    $check = imap_mailboxmsginfo($connection);
    return ((array)$check);
}
function pop3_list($connection,$message="")
{
    if ($message)
    {
        $range=$message;
    } else {
        $MC = imap_check($connection);
        $range = "1:".$MC->Nmsgs;
    }
    $response = imap_fetch_overview($connection,$range);
    foreach ($response as $msg) $result[$msg->msgno]=(array)$msg;

    return $result;
}
function pop3_retr($connection,$message)
{
    return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT));
}
function pop3_dele($connection,$message)
{
    return(imap_delete($connection,$message));
}
function mail_parse_headers($headers)
{
    $headers=preg_replace('/\r\n\s+/m', '',$headers);
    preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
    foreach ($matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
    return($result);
}
function mail_mime_to_array($imap,$mid,$parse_headers=false)
{
    $mail = imap_fetchstructure($imap,$mid);
    $mail = mail_get_parts($imap,$mid,$mail,0);
    if ($parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]);
    return($mail);
}
function mail_get_parts($imap,$mid,$part,$prefix)
{    
    $attachments=array();
    $attachments[$prefix]=mail_decode_part($imap,$mid,$part,$prefix);
    if (isset($part->parts)) // multipart
    {
        $prefix = ($prefix == "0")?"":"$prefix.";
        foreach ($part->parts as $number=>$subpart) 
            $attachments=array_merge($attachments, mail_get_parts($imap,$mid,$subpart,$prefix.($number+1)));
    }
    return $attachments;
}
function mail_decode_part($connection,$message_number,$part,$prefix)
{
    $attachment = array();

    if($part->ifdparameters) {
        foreach($part->dparameters as $object) {
            $attachment[strtolower($object->attribute)]=$object->value;
            if(strtolower($object->attribute) == 'filename') {
                $attachment['is_attachment'] = true;
                $attachment['filename'] = $object->value;
            }
        }
    }

    if($part->ifparameters) {
        foreach($part->parameters as $object) {
            $attachment[strtolower($object->attribute)]=$object->value;
            if(strtolower($object->attribute) == 'name') {
                $attachment['is_attachment'] = true;
                $attachment['name'] = $object->value;
            }
        }
    }

    $attachment['data'] = imap_fetchbody($connection, $message_number, $prefix);
    if($part->encoding == 3) { // 3 = BASE64
        $attachment['data'] = base64_decode($attachment['data']);
    }
    elseif($part->encoding == 4) { // 4 = QUOTED-PRINTABLE
        $attachment['data'] = quoted_printable_decode($attachment['data']);
    }
    return($attachment);
}
 7
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 09:38:34

Puede usar la clase de cliente de correo electrónico pop3 que puede Acceder a los buzones de correo electrónico utilizando el protocolo POP3. Obtendrá cada parte del cuerpo del correo electrónico y puede almacenarlo en la base de datos, incluso puede recuperar archivos adjuntos sin eliminar el correo original en la bandeja de entrada. Para más información ir a http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html

 3
Author: Shrishail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-28 10:11:02

SI tiene una compilación PHP con soporte IMAP, sería fácil, consulte la documentación de IMAP (especialmente los comentarios en esta página) en http://php.net/manual/en/book.imap.php

ACTUALIZACIÓN: para aclarar mi respuesta - como se ve en los comentarios y la referencia de funciones, las funciones PHP imap_* se pueden usar también para pop3.

 1
Author: Tomasz Struczyński,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-05 10:13:16