2011-03-03 8 views
6

No puedo recuperar el contenido del cuerpo del correo electrónico.¿Cómo usar IMAP en PHP para recuperar el contenido del cuerpo del correo?

Este es mi código

<?php 
/* connect to server */ 
$hostname = '{myserver/pop3/novalidate-cert}INBOX'; 
$username = 'username'; 
$password = 'password'; 

/* try to connect */ 
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error()); 
//echo $inbox; 
/* grab emails */ 
$emails = imap_search($inbox,'ALL'); 


/* if emails are returned, cycle through each... */ 
if($emails) { 

    /* begin output var */ 
    $output = ''; 

    /* put the newest emails on top */ 
    rsort($emails); 

    /* for every email... */ 
    foreach($emails as $email_number) { 
    //$email_number=$emails[0]; 
//print_r($emails); 
    /* get information specific to this email */ 
    $overview = imap_fetch_overview($inbox,$email_number,0); 
    $message = imap_fetchbody($inbox,$email_number,2); 

    /* output the email header information */ 
    $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">'; 
    $output.= '<span class="subject">'.$overview[0]->subject.'</span> '; 
    $output.= '<span class="from">'.$overview[0]->from.'</span>'; 
    $output.= '<span class="date">on '.$overview[0]->date.'</span>'; 
    $output.= '</div>'; 

    /* output the email body */ 
    $output.= '<div class="body">'.$message.'</div>'; 
    } 

    echo $output; 
} 

/* close the connection */ 
imap_close($inbox); 
?> 

Cuando utilizo a buscar correo electrónico de Gmail, se muestra el contenido del cuerpo del correo electrónico, pero una vez que utilizo mi servidor de correo, no puede recuperar el contenido del cuerpo del correo electrónico.

¿Puede ayudarme a solucionar el problema?

+0

¿Qué servidor de correo estás usando? – Ben

+0

Probado; tu script funciona bien con Gmail como dijiste. Los errores probablemente provienen de su servidor de correo. ¿Hay algún otro detalle que pueda proporcionar? – Ben

+0

Probablemente un duplicado de http://stackoverflow.com/questions/5170489/php5-imap-i-aint-got-no-body – dkarp

Respuesta

38

me había encontrado una solución, error es con esta línea

$message = imap_fetchbody($inbox,$email_number,2); 

Ahora, estoy usando

$message = imap_fetchbody($inbox,$email_number, 1.2); 

Para recibir el contenido del cuerpo en formato de texto/html

A continuación tuve datos dados de las opciones disponibles. Esto podría ser alguien

()Root Message Part (multipart/related) 
(1) The text parts of the message (multipart/alternative) 
(1.1) Plain text version (text/plain) 
(1.2) HTML version (text/html) 
(2) The background stationary (image/gif) 
+0

Gracias, he estado buscando exactamente lo mismo ... Por eso también es bueno comprobar los documentos jaja ... Copio/pego un ejemplo de Internet y esperaba trabajar ... –

+0

busque fetch_structure, u necesita decodificar el mensaje si está codificado. – Andrew

0

El componente de correo de Zeta permite mucho más convenient fetching of mails from IMAP y POP y puede analizar los correos electrónicos entrantes en una estructura de objeto agradable y limpia para que pueda manejarlo fácilmente.

+1

Está usando POP, no IMAP. Compruebe el primer parámetro a la llamada 'imap_open'. – dkarp

+0

Lo siento, me equivoqué. Sin embargo, también funciona con POP: http://incubator.apache.org/zetacomponents/documentation/trunk/Mail/tutorial.html#retrieving-mail-using-pop3 – tobyS

+0

Actualicé mi respuesta para reflejar que IMAP y POP son posibles . – tobyS

Cuestiones relacionadas