IMAP i konta pocztowe POP3

Jak za pomocą protokołu IMAP połączyć się z naszą pocztą

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());
	}
?>
blog comments powered by Disqus

Kategorie

Strony