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
)


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow