Estoy ahora por crear un Script que lea un inbox y los correos que allá encuentre los guarde en una carpeta como correos que son. Es decir, que coja los correos, los lea y los guarde tal como están en un archivo .eml cada correo.
Por ahora abro correctamente la bandeja de correos usando la función imap_open tal como veréis en el ejemplo. Leo los correos también correctamente porque haciendo echo $message; logro ver el mensaje por pantalla pero sin embargo la función imap_savebody no me funciona correctamente. ¿Qué estoy haciendo mal? No logro ver el fallo.
Gracias!
<?
//** Setting for connecting to the mailbox **\\
$mailserver = 'host';
$port = '143';
$user = 'domain\user';
$pass = 'pwpw';
$mbox=imap_open("{".$mailserver.":".$port."/imap/notls/novalidate-cert}INBOX/Test_Inbox", $user, $pass) or die(var_dump(imap_errors()));
//Connecting to the mailbox end\\
if ($hdr = imap_check($mbox))
{
//Contamos los correos por si lo necesitamos
$msgCount = $hdr->Nmsgs;
}
else
{
echo "Failed to get mail";
}
$result = imap_search($mbox, 'ALL', SE_UID);
$output='';
//var_dump($result);
if ($result == false)
{
$output.='<tr><td colspan=3 class="white_centered" style="width:100%">There are currently no e-mails to show here</td></tr>';
}
$i=1;
$j=1;
foreach($result as $uid)
{
//echo $uid;
/* get information specific to this email */
$overview = imap_fetch_overview($mbox,$uid,FT_UID);
$overview2 = imap_headerinfo($mbox,$i);
//var_dump($overview2);
$message = imap_body($mbox,$uid,FT_UID);
$s = imap_fetchstructure($mbox,$uid,FT_UID);
$part = $s->parts[1];
//var_dump($s);
if ($s->encoding==4)
$message = quoted_printable_decode($message);
elseif ($s->encoding==3)
$message = base64_decode($message);
//Este echo funciona y puedo ver dos mensajes de prueba que tengo en ese INBOX/Test_Inbox
$echo $message;
//ESTA PARTE ES LA QUE NO FUNCIONA CORRECTAMENTE
//*******************************************//
//Asigno nombres genéricos a los correos, en el futuro podría usar un ID o bien el propio asunto del correo ($overview[0]->subject)
$File = "mail".$j.".eml";
$Handle = fopen($File, 'w');
stream_filter_append($handle, 'convert.base64-decode', STREAM_FILTER_WRITE);
imap_savebody($mbox, $handle, $uid, "", FT_UID);
//fwrite($Handle, imap_body($mbox,$uid,FT_UID));
fclose($Handle);
$j++;
}
//echo $output;*/
//$mbox=imap_open("{".$mailserver.":".$port."/imap/notls/novalidate-cert}INBOX/Inbox2", $user, $pass) or die(var_dump(imap_errors()));
imap_close($mbox, CL_EXPUNGE);
imap_close($mbox);
?>