RkBlog

Hardware, programming and astronomy tutorials and reviews.

IMAP i konta pocztowe POP3

PHP oferuje dostęp do kont pocztowych poprzez protokół IMAP. Dzięki niemu możemy np. zalogować się na nasze konto pocztowe dostępne poprzez POP3. Obsługa protokołu IMAP jest bardzo prosta, a listę wszystkich funkcji wraz z opisami i przykładami znajdziemy w dokumentacji na php.net.

Podstawową kwestią jest dostęp do funkcji IMAP. Niektóre serwery (np. darmowe) mogą nie mieć takiej opcji. Warto więc w skryptach sprawdzać czy funkcja istnieje, np.:
IF(!function_exists('imap_open')) { die('BRAK funkcji IMAP'); }
Jeżeli funkcje IMAP są dostępne to możemy spróbować połączyć się z serwerem poczty:
<?php
IF($mbox = imap_open("{NAZWA_SERWERA:110/pop3}INBOX", 'LOGIN', 'HASŁO'))
	{
	echo 'Połączenie nawiązane';
	imap_close($mbox);
	}
else
	{
	print_r(imap_errors());
	}
Funkcja imap_open służy do otwierania strumienia. Podać musimy adres serwera (np. pop3.poczta.gazeta.pl) i nasz login/hasło do konta poczty. Funkcja zwróci true jeżeli połączenie się powiedzie. imap_close zamyka strumień i powinna być stosowana zawsze, gdy kończymy operacje na poczcie. Funkcja imap_errors jest bardzo przydatna gdyż zwraca tablicę z błędami pojawiającymi się podczas połączenia. Bardzo przydatna podczas tworzenia i testowania aplikacji (a i w wersji ostatecznej obsługa błędów jest obowiązkowa...).

By wylistować listę emaili możemy skorzystać z funkcji imap_headers($strumień), która to zwraca tablicę... Przed imap_close w powyższym przykładzie wstaw:
print_r(imap_headers($mbox));
Jak odczytać treść danej wiadomości - imap_body($strumień, NUMER_EMAILA); (notka: numeracja "generowane" przez imap_headers jest o 1 mniejsza niż numery emaili). By skasować wiadomość stosujemy imap_delete o takich samych argumentach co imap_body, lecz funkcja ta tylko "oznacza" wiadomości do kasacji, lecz ich nie usuwa. By usunąć wszystkie tak oznakowane wiadomości stosujemy np. funkcję imap_expunge($strumień);

Przykłady

Pobieranie listy wiadomości:
<?php
echo '<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" /><pre>';
IF($mbox = imap_open("{NAZWA_SERWERA:110/pop3}INBOX", 'LOGIN', 'HASŁO'))
	{
	echo 'Połączenie nawiązane';
	$check = imap_mailboxmsginfo($mbox);
	IF(is_numeric($check->Nmsgs))
		{
		for($i = 1; $i <= $check->Nmsgs; $i++)
			{
			print_r(imap_fetch_overview($mbox, $i, 0));
			}
		}
	imap_close($mbox);
	}
else
	{
	print_r(imap_errors());
	}
?>
Dla każdej wiadomości zostanie wyświetlona tablica z danymi zawierająca m.in. tytuł wiadomości.

Wyświetlenie treści pierwszej wiadomości:
<?php
echo '<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" /><pre>';
IF($mbox = imap_open("{NAZWA_SERWERA:110/pop3}INBOX", 'LOGIN', 'HASŁO'))
	{
	highlight_string(imap_body($mbox, 1));
	imap_close($mbox);
	}
else
	{
	print_r(imap_errors());
	}
?>
RkBlog

Podstawy PHP, 14 July 2008, Piotr Maliński

Comment article