Witam
Od pewnego czasu męczę się z pobraniem podstawowych informacji o mailach w PHP korzystając z POP3.
Korzystam z funkcji imap_*, które obsługują również POP3.
Problem w tym, że przez POP3 zawsze pobierane są wszystkie maile a nie tylko nowe - dlatego zmuszony byłem wyciąć zachowane na serwie maile aby przyspieszyć i tak strasznie wolne ściąganie informacji o mailach.
Drugim problemem jest to, że zawsze ściąga się cały mail a nie sam nagłówek - dochodzi do tego, że jeśli np. w pierwszej skrzynce, pierwszy mail będzie spory, np. 2MB to dostanę "Fatal error: Maximum execution time of 30 seconds exceeded" i skrypt się zakończy - więc nie spełni swojej funkcji (pokazanie nowych maili).
Pomijam już, że koszmarnie długo trwa sprawdzanie nowych maili (nawet jak nie ma żadnych), ale dlaczego nie można ściągnąć samych nagłówków?
Próbowałem zarówno tak:
$headers = imap_headers($mbox);
if ($headers == false)
echo "Call failed<br />\n";
else
foreach($headers as $header)
print "$header<br>\n";
}
jak i tak (z tego korzystam bo jest bardziej elastyczne):
$num = imap_num_msg($mbox)
for ($i = $num; $i >= 1; $i--)
{
$naglowek = imap_headerinfo($mbox, $i, 80, 80);
//tu wyświetlam niektóre pola $naglowek
}
Samo łączenie wygląda tak:
$mbox = imap_open('{poczta.interia.pl:110/pop3}INBOX', 'jakis user', 'jakies haslo');
Więc w sumie mam 2 pytania:
ważniejsze: jak ściągnąć tylko informacje o mailach tak aby duża treść któregoś nie powodowała timeout?
drugorzędne: jak ściągnąć tylko nowe maile lub nowsze od jakiejś daty? Jest funkcja
imap_search($mbox, 'SINCE 05-Jul-2005');
lecz działa tylko przy połączeniu IMAP a nie POP3 (niestety, większość serwerów nie obsługuje IMAP dlatego to nie wchodzi w rachubę :/).
Również zwiększenie czasu timeout dla php nie jest rozwiązaniem, bo mogę nie mieć możliwości tego zmienić (na jakimś serwerze z php).
Czekam na propozycje :)