2010-07-02 14 views
29

Estoy tratando de buscar un correo de POP3 (Estoy utilizando el servidor de correo POP3 y yo estoy tratando de buscar el contenido electrónico y almacenar en una tabla de base de datos para mi proyecto.), Pero no puede encontrar ningún script PHP para eso, todos son solo para IMAP.electrónico Obtención de un servidor POP3 usando PHP

¿Sabes cómo recuperar el correo de un servidor POP3?

Gracias.

Respuesta

30

Sorprendentemente, PHP's imap library también se puede utilizar para trabajar con buzones de correo POP3. La mayoría de las funciones avanzadas de IMAP no funcionarán, por supuesto (por ejemplo, carpetas o recuperar partes de mensajes), pero se implementa la funcionalidad POP3 básica.

La diferencia principal es la cadena de opciones que estás pasando a imap_open - citar que la 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 justo vela - no necesitará más de imap_open, imap_num_msg, imap_body, imap_delete e imap_close para el acceso POP3 básico.

1

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

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

5

PHP's IMAP functions puede hacer frente a las dos casillas IMAP y POP3.

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

Se advirtió, sin embargo, que algunas funciones IMAP no funcionarán correctamente con el protocolo POP.

hay una User Contributed Note que proporciona un fragmento interesante. Es posible que desee echarle un vistazo. No puedo decir nada sobre su calidad, pero desde la superficie, se ve bien.


A continuación, la nota contribuido:

Para todas las personas que vienen aquí orando por:

1) una forma-muerto fácil de leer archivos adjuntos MIME, o

2) de una manera-muerto 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); 
} 
+1

Pocos errores en este ejemplo de código (reemplace $ imap por $ connection en pop3_stat); devuelve $ respuesta en pop3_list ..... – philippe

3

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

Cuestiones relacionadas