Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

William Espindola

[Resolvido] imap_header

Recommended Posts

Ola pessoal!

 

Estou tentando usar o imap_header para contar quantas mensagens estão lidas e quantas não estão lidas, mas não estou conseguindo entender com funciona:

 

Ex: atualmente tenho uma menssagem que esta lida na mailbox, porém idependente de esta lida ou não o resultado é: Recent: N

 

Pensei em usar o imap_search porém parece que esta ao contrario, se eu pesquiso pelas mensagens "SEEN" que seria lida, e minha menssagem esta lida retorna vazio, mas se eu presquiso por "UNSEEN" ai ele retorna que tem uma mensagem. Será que não estou entendendo o uso das funções ?

 

Uso com imap_header:

$header = imap_headerinfo($mbox, 1); 
echo "Recent: " . $header->Recent . " | Unseen: " . $header->Unseen . "<br />";

Uso com imap_search:

//pesquisa lidas
$seen = imap_search($mbox, 'SEEN');
print_r ($seen;

//pesquisa não lidas
$unseen = imap_search($mbox, 'UNSEEN');
print_r ($unseen);

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que as propriedade Recent e Unseen provenientes do objeto gerado retornam?

 

Dê um var_dump() nelas porque, pelo que pude ver na documentação da função, apenas ecoar seus valores, se presentes, nãoseria bem o que você está procurando.

 

Tá certo que eu nunca usei essa função antes né, mas ainda assim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que entendi também vi na documentação, mas confesso que não estou entendendo completamente:

 

  • Recent - R if recent and seen, N if recent and not seen, ' ' if not recent.
  • Unseen - U if not seen AND not recent, ' ' if seen OR not seen and recent

 

Pois idependente se a mensagen esta lida ou não sempre retorna o mesmo resultado:

 

Recent: N | Unseen: " "

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era bem aí que eu queria chegar.

 

Ao que parece imap_header() vai te dar uma forma de saber se é ou não é aquilo que você espera, mas quem vai preparar o meio de campo para mostrar ao usuário, é você, manualmente.

 

Então, ao invés de ecoar o resultado, você condiciona. Vamos ver um exemplo que vai negritar uma mensagem não lida:

 

$header = imap_headerinfo($mbox, 1);

printf( ( $header -> Recent == 'N' ? '<strong>%s</strong>' : '%s' ), 'Variável do Título da Mensagem' );

Onde está Variável do Título da Mensagem você, obviamente subsititui pela forma adequada para que o título da mesma apareça.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto consegui resolver, mas não com a função impa_header(), e sim com a função imap_fetch_overview(), é muito mais simples.

Tá ai algumas funções que utilizei uma para fazer o que eu precisava:

 

//faz a conexão com a caixa de e-mail.
public function mbox_open(){
	$mbox = imap_open("{".$this->serverName."}INBOX", "".$this->userName."", "".$this->password."") or die("can't connect: " . imap_last_error());
	return $mbox;
}
//função que retorna o overview do cabeçalho do email
public function overview($num) {
	$result = imap_fetch_overview($this->mbox_open(), "1:".$num."");
	return($result ? $result :$this->SetError("No results overview"));
}
//uma funçãozinha para retornar os error da minha aplicação.
public function SetError($error){
	return($this->error=$error);
}
//aqui eu obitive todos os UIDs, números de sequencia, e os subjecs dos e-mail que estão na caixa de e-mail que não estão lidos e nem marcados como deletados. 
foreach ($ReadMail->overview($num_msg) as $object) {
	if( "{$object->seen}" == 0 && "{$object->deleted}" == 0){
		$subject[] = explode(":",trim("{$object->subject}"));
		$array[] = "{$object->uid}";
		$msgno[] = "{$object->msgno}";
	}
}

IMAP

Valeu pela ajuda galera! :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.