Szukaj…
Zainstaluj rozszerzenie IMAP
Aby korzystać z funkcji IMAP w PHP, musisz zainstalować rozszerzenie IMAP:
Debian / Ubuntu z PHP5
sudo apt-get install php5-imap
sudo php5enmod imap
Debian / Ubuntu z PHP7
sudo apt-get install php7.0-imap
Dystrybucja oparta na YUM
sudo yum install php-imap
Mac OS X z php5.6
brew reinstall php56 --with-imap
Łączenie ze skrzynką pocztową
Aby cokolwiek zrobić z kontem IMAP, najpierw musisz się z nim połączyć. Aby to zrobić, musisz podać niektóre wymagane parametry:
- Nazwa lub adres IP serwera pocztowego
- Port, z którym chcesz się połączyć
- IMAP to 143 lub 993 (bezpieczny)
- POP to 110 lub 995 (bezpieczny)
- SMTP to 25 lub 465 (bezpieczny)
- NNTP to 119 lub 563 (bezpieczny)
- Flagi połączeń (patrz poniżej)
Flaga | Opis | Opcje | Domyślna |
---|---|---|---|
/service=service | Z jakiej usługi skorzystać | imap, pop3, nntp, smtp | imap |
/user=user | zdalna nazwa użytkownika do logowania na serwerze | ||
/authuser=user | użytkownik zdalnego uwierzytelnienia; jeśli określono, jest to nazwa użytkownika, którego hasło jest używane (np. administrator) | ||
/anonymous | zdalny dostęp jako anonimowy użytkownik | ||
/debug | rejestruj dane telemetryczne protokołu w dzienniku debugowania aplikacji | niepełnosprawny | |
/secure | nie przesyłaj hasła w postaci zwykłego tekstu przez sieć | ||
/norsh | nie używaj rsh ani ssh do ustanawiania wstępnie uwierzytelnionej sesji IMAP | ||
/ssl | użyj Secure Socket Layer do zaszyfrowania sesji | ||
/validate-cert | certyfikaty z serwera TLS / SSL | włączone | |
/novalidate-cert | nie sprawdzaj poprawności certyfikatów z serwera TLS / SSL, potrzebnych, jeśli serwer używa certyfikatów z podpisem własnym. UŻYWAJ OSTROŻNIE | niepełnosprawny | |
/tls | wymusza użycie start-TLS do szyfrowania sesji i odrzuca połączenie z serwerami, które go nie obsługują | ||
/notls | nie rób start-TLS w celu szyfrowania sesji, nawet z serwerami, które ją obsługują | ||
/readonly | poproś o otwarcie skrzynki pocztowej tylko do odczytu (tylko IMAP; ignorowane na NNTP i błąd z SMTP i POP3) |
Twój ciąg połączenia będzie wyglądał mniej więcej tak:
{imap.example.com:993/imap/tls/secure}
Pamiętaj, że jeśli którykolwiek ze znaków w ciągu połączenia jest inny niż ASCII, należy go zakodować za pomocą utf7_encode ($ string) .
Aby połączyć się ze skrzynką pocztową, używamy polecenia imap_open, które zwraca wartość zasobu wskazującą na strumień:
<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
echo "Failed to connect to server";
}
Wyświetl wszystkie foldery w skrzynce pocztowej
Po nawiązaniu połączenia ze skrzynką pocztową warto zajrzeć do środka. Pierwszym przydatnym poleceniem jest imap_list . Pierwszy parametr to zasób uzyskany z imap_open
, drugi to ciąg skrzynki pocztowej, a trzeci to niewyraźny ciąg wyszukiwania ( *
służy do dopasowania dowolnego wzorca).
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*");
if ($folders === false) {
echo "Failed to list folders in mailbox";
} else {
print_r($folders);
}
Dane wyjściowe powinny wyglądać podobnie do tego
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX
[1] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
[2] => {imap.example.com:993/imap/tls/secure}INBOX.Drafts
[3] => {imap.example.com:993/imap/tls/secure}INBOX.Junk
[4] => {imap.example.com:993/imap/tls/secure}INBOX.Trash
)
Możesz użyć trzeciego parametru do filtrowania tych wyników w następujący sposób:
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");
A teraz wynik zawiera tylko wpisy o .Sent
w nazwie:
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)
Uwaga : użycie *
jako wyszukiwania rozmytego spowoduje rekurencyjne zwrócenie wszystkich dopasowań. Jeśli użyjesz %
, zwróci tylko dopasowania z określonego folderu bieżącego.
Znajdowanie wiadomości w skrzynce pocztowej
Możesz zwrócić listę wszystkich wiadomości ze skrzynki pocztowej za pomocą imap_headers .
<?php
$headers = imap_headers($mailbox);
Wynikiem jest tablica ciągów o następującym wzorze:
[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)
Oto próbka tego, jak mogłaby wyglądać każda linia:
A 1)19-Aug-2016 [email protected] Message Subject (1728 chars)
D 2)19-Aug-2016 [email protected] RE: Message Subject (22840 chars)
U 3)19-Aug-2016 [email protected] RE: RE: Message Subject (1876 chars)
N 4)19-Aug-2016 [email protected] RE: RE: RE: Message Subje (1741 chars)
Symbol | Flaga | Znaczenie |
---|---|---|
ZA | Odpowiedział | Odpowiedź została udzielona na |
re | Usunięte | Wiadomość została usunięta (ale nie usunięta) |
fa | Taflowy | Wiadomość jest oflagowana / zwrócona na uwagę |
N. | Nowy | Wiadomość jest nowa i nie została wyświetlona |
R | Niedawny | Wiadomość jest nowa i została widziana |
U | nieprzeczytane | Wiadomość nie została przeczytana |
X | Wersja robocza | Wiadomość jest wersją roboczą |
Pamiętaj, że uruchomienie tego połączenia może zająć sporo czasu i może zwrócić bardzo dużą listę.
Alternatywą jest ładowanie pojedynczych wiadomości w razie potrzeby. Do każdego e-maila przypisany jest identyfikator od 1 (najstarszy) do wartości imap_num_msg($mailbox)
.
Istnieje wiele funkcji umożliwiających bezpośredni dostęp do wiadomości e-mail, ale najprostszym sposobem jest użycie imap_header
który zwraca uporządkowane informacje nagłówka:
<?php
$header = imap_headerinfo($mailbox , 1);
stdClass Object
(
[date] => Wed, 19 Oct 2011 17:34:52 +0000
[subject] => Message Subject
[message_id] => <04b80ceedac8e74$51a8d50dd$0206600a@user1687763490>
[references] => <[email protected]>
[toaddress] => Some One Else <[email protected]>
[to] => Array
(
[0] => stdClass Object
(
[personal] => Some One Else
[mailbox] => someonelse
[host] => example.com
)
)
[fromaddress] => Some One <[email protected]>
[from] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[reply_toaddress] => Some One <[email protected]>
[reply_to] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[senderaddress] => Some One <[email protected]>
[sender] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[Recent] =>
[Unseen] =>
[Flagged] =>
[Answered] =>
[Deleted] =>
[Draft] =>
[Msgno] => 1
[MailDate] => 19-Oct-2011 17:34:48 +0000
[Size] => 1728
[udate] => 1319038488
)