Script esta funcionando, precisa ter o imap configurado no php.ini.
basta configurar a conexão em $mailBoxes, exemplo:
'label' => 'Meu Email', // Nome para identificação
'ativo' => true, //True = Ativo False Inativo
'mailbox' => '{mail.provedor.com.br:143/notls}INBOX', //Dados do provedor de Email
'usuario' => 'email@email.com', // usuario
'senha' => 'senha' // Senha
**Crie uma blank, copie e cole o código abaixo, altere uma das conexões como acima e execute… não tem layout, nem é uma classe foi sendo escrito baseado em exemplos e modelos para teste e ser utilizado em um sistema que vai capturar apenas o assunto e o texto do corpo.
para duvidas ou adicionar algo a mais https://www.php.net/manual/en/book.imap.php
espero que ajude
/**
*
* PHP-IMAP
* Autor : Jair Issa - jissa2@gmail.com
* Pesquisas e ajuda:
* Base principal retirada em https://github.com/thinkholic/php-imap-email-inbox/blob/master/index.php
* https://www.php.net/manual/en/book.imap.php
* http://davidwalsh.name/gmail-php-imap/
* http://www.codediesel.com/php/downloading-gmail-attachments-using-php/
* get_part peguei no stackoverflow (quando encontrar o link/autor incluo)
*/
# IMAP opções para cada tipo de conexão
/**
* --POP3--
* "{localhost:995/pop3/ssl/novalidate-cert}"
* "{localhost:110/pop3/notls}"
* IMAP puro
* "{localhost:993/imap/ssl/novalidate-cert}"
* "{localhost:143/imap/notls}"
* Gmail com POP3 ou IMAP
* "{pop.gmail.com:995/pop3/ssl/novalidate-cert}"
* "{imap.gmail.com:993/imap/ssl/novalidate-cert}"
*/
//Local para armazenar os anexos recebidos nos email´s
$CaminhoAnexos = "anexos/"; //(esta comentado para não ser baixado)
//Com IMAP pode configurar varios email´s para recebimento,
/basta adicionar as configurações e definir em ativo como True ou False
//O INBOX esta como padrão, mas pode-se utilizar outros
$mailBoxes = array(
array(
'label' => 'Gmail',
'ativo' => false,
'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX',
'usuario' => 'email@email.com',
'senha' => 'senha'
),
array(
'label' => 'Email 2',
'ativo' => false,
'mailbox' => '{mail.provedor.com.br:143/notls}INBOX',
'usuario' => 'email@email.com',
'senha' => 'senha'
),
array(
'label' => 'Email 3',
'ativo' => true,
'mailbox' => '{mail.provedor.com.br:143/notls}INBOX',
'usuario' => 'email@email.com',
'senha' => 'senha'
)
);
if (!count($mailBoxes)) {
echo "<p><h1>Configuração inválida</h1></p>";
} else {
foreach ($mailBoxes as $curMailBox) {
echo "<h3>".$curMailBox['label']."</h3>";
if (!$curMailBox['ativo'])
{
echo '<p><b>>>> INATIVO <<<</b></p>';
}
else
{
// IMAP Open
$inbox = @imap_open($curMailBox['mailbox'], $curMailBox['usuario'], $curMailBox['senha']);
if ( $inbox )
{
// recebe somente os ultimos email´s da semana
// para todos usar imap_search($inbox,'ALL');
$emails = imap_search($inbox, 'SINCE '. date('d-M-Y',strtotime("-1 week")));
if (!count($emails))
{
echo '<p>Nenhum email encontrado.</p>';
}
else
{
// ordena
rsort($emails);
foreach($emails as $email)
{
$overview = imap_fetch_overview($inbox,$email,0);
/*echo "<pre>";
print_r($overview);
echo "</pre>";*/
/*
* imap_fetchbody
* 0=> retorna o body da mensagem com o texto que o servidor recebe
* 1=> retorna somente o conteudo da mensagem em plain-text
* 2=> retorna o conteudo da mensagem em html
*php.net opções de retorno
* (empty) - Entire message
* 0 - Message header
* 1 - MULTIPART/ALTERNATIVE
* 1.1 - TEXT/PLAIN
* 1.2 - TEXT/HTML
* 2 - MESSAGE/RFC822 (entire attached message)
* 2.0 - Attached message header
* 2.1 - TEXT/PLAIN
* 2.2 - TEXT/HTML
* 2.3 - file.ext
*/
echo "<hr /><b>Mensagem Texto</b><br>";
$body_1 = ( imap_fetchbody($inbox, $email, 1) );
echo nl2br($body_1);
echo "<hr /><b>FIM Mensagem Texto</b><br>";
//echo "<hr /><b>Mensagem HTML</b><br>";
//Retorna Corpo com codificação
//$body_2 = ( imap_fetchbody($inbox, $email, 2) );
//echo $body_2;
//echo "<br>";
//Retorna Corpo Html Formatado(já decodificado)
$VarRethtml = pegaCorpoEmail($inbox, $email);
//echo "<br>".nl2br($VarRethtml)."<br>";
//echo "<hr /><b>FIM Mensagem HTML</b><br>";
echo "<hr /><b>Cabeçalho</b><br>";
$cabecalho = ( imap_fetchbody($inbox, $email, 0) );
echo nl2br($cabecalho);
echo "<hr /><b>FIM Cabeçalho</b><br>";
echo "<hr />";
// Anexos
$structure = imap_fetchstructure($inbox,$email);
/*echo "<pre>";
print_r($structure);
echo "</pre>";*/
$attachments = array();
if( isset($structure->parts) && count($structure->parts) )
{
for($i = 0; $i < count($structure->parts); $i++)
{
$attachments[$i] = array(
'is_attachment' => false,
'filename' => '',
'name' => '',
'attachment' => ''
);
if($structure->parts[$i]->ifdparameters)
{
foreach($structure->parts[$i]->dparameters as $object)
{
if(strtolower($object->attribute) == 'filename')
{
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters)
{
foreach($structure->parts[$i]->parameters as $object)
{
if(strtolower($object->attribute) == 'name')
{
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment'])
{
$attachments[$i]['attachment'] = imap_fetchbody($inbox, $email, $i+1);
// 3 = BASE64
// 4 = QUOTED-PRINTABLE
if($structure->parts[$i]->encoding == 3)
{
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4)
{
$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
echo "<br>".$overview[0]->seen?"<font color='gren'>LIDA</font>":"<font color='red'>NÃO LIDA</font>";
echo "<br><b>Assunto :</b>".decodeIMAPTexto($overview[0]->subject);
echo "<br><b>De :</b>".decodeIMAPTexto($overview[0]->from);
echo "<br><b>Data :</b>".$overview[0]->date."</b>";
echo "<hr>";
//Recupera Corpo e decodifica
$VarRethtml = pegaCorpoEmail($inbox, $email);
echo nl2br($VarRethtml); //decodificada e Formatada
// Anexos, recupera e salva no diretorio definido
/*foreach($attachments as $attachment)
{
if($attachment['is_attachment'] == 1)
{
$filename = $attachment['name'];
if(empty($filename)) $filename = $attachment['filename'];
if(empty($filename)) $filename = time() . ".dat";
//Caso tiver mesmo nome salva com prefixo.
$fp = fopen($CaminhoAnexos.$email . "-" . $filename, "w+");
fwrite($fp, $attachment['attachment']);
fclose($fp);
echo '<p><a href="'.$email . "-" . $filename.'">'.$filename.'</a></p>';
}
}*/
}
}
imap_close($inbox);
}
else
{
echo "<hr><b><h1>ERRO NA CONEXÃO<br>Retorno : ". imap_last_error()."</h1><hr>";
}
}
}
}
function pegaCorpoEmail($imap,$uid)
{
$body = get_part($imap, $uid, "TEXT/HTML");
// se corpo do HTML estiver vazio tenta colocar o texto no corpo
if ($body == "") {
$body = get_part($imap, $uid, "TEXT/PLAIN");
}
return $body;
}
function get_part($imap, $uid, $mimetype, $structure = false, $partNumber = false)
{
if (!$structure) {
$structure = imap_fetchstructure($imap, $uid);
}
if ($structure) {
if ($mimetype == get_mime_type($structure)) {
if (!$partNumber) {
$partNumber = 1;
}
$textoEmail = imap_fetchbody($imap, $uid, $partNumber);
switch ($structure->encoding) {
case 0:
return imap_8bit ($textoEmail);
case 1:
return imap_8bit ($textoEmail);
case 2:
return imap_binary ($textoEmail);
case 3:
return imap_base64($textoEmail);
case 4:
return imap_qprint($textoEmail);
default:
return $textoEmail;
}
}
// multipart
if ($structure->type == 1) {
foreach ($structure->parts as $index => $subStruct) {
$prefix = "";
if ($partNumber) {
$prefix = $partNumber . ".";
}
$data = get_part($imap, $uid, $mimetype, $subStruct, $prefix . ($index + 1));
if ($data) {
return $data;
}
}
}
}
return false;
}
function get_mime_type($structure)
{
$primaryMimetype = ["TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER"];
if ($structure->subtype) {
return $primaryMimetype[(int)$structure->type] . "/" . $structure->subtype;
}
return "TEXT/PLAIN";
}
function decodeIMAPTexto( $str )
{
$op = '';
$decode_header = imap_mime_header_decode($str);
foreach ($decode_header AS $obj)
{
$op .= htmlspecialchars(rtrim($obj->text, "\t"));
}
return $op;
}