Php - читання пошти за допомогою imap або pop3 - стань профі

Php - читання пошти за допомогою imap або pop3 - стань профі

Необхідно прочитати пошту за допомогою протоколів IMAP або POP3,
дозволяють створити поштовий клієнт на веб? основі.

Для вирішення цього завдання треба звернутися до розширення PHP IMAP,
вміє «розмовляти» і на мові IMAP, і на мові POP3:

// відкриваємо IMAP-з'єднання
$ Mail = imap_open ( '', 'username', 'password');
// або відкриваємо POP3-з'єднання
$ Mail = imap_open ( '', 'username', 'password');

// беремо список всіх поштових заголовків
$ Headers = imap_headers ($ mail);

// беремо об'єкт заголовка для останнього повідомлення в поштовій скриньці
$ Last = imap_num_msg ($ mail);
$ Header = imap_header ($ mail, $ last);

// вибираємо тіло для того ж повідомлення
$ Body = imap_body ($ mail, $ last);

// закриваємо з'єднання
imap_close ($ mail);

Що лежить в основі бібліотека, необхідна PHP для підтримки
IMAP і POP3, пропонує, на перший погляд, нескінченна кількість
можливостей, що дозволяють, по суті, написати закінчений
поштовий клієнт. Однак разом з цими можливостями ми отримуємо і більшу складність. Насправді в PHP є 63 різні
функції з іменами, які починаються часткою словом imap, при цьому не враховується, що деякі з них теж розуміють мову POP3 і NNTP.

Однак у своїй основі розмова з поштовим сервером простий. як і в
випадку застосування багатьох інших можливостей PHP, все починається
з відкриття з'єднання і захоплення дескриптора:

В даному випадку відкриваємо IMAP? З'єднання з сервером по імені
mail.server.com на порту 143. Одночасно в якості другого і третього аргументів передаються ім'я користувача і пароль.

Для того щоб відкрити POP3? З'єднання, додайте / pop3 до кінця
рядки з ім'ям сервера і номером порту. POP3 зазвичай працює на
порту 110, тому після імені сервера треба додати: 110:

Щоб зашифрувати ваше з'єднання за допомогою SSL, додайте / ssl
в кінці точно так же, як ви зробили з pop3. Необхідно також переконатися в тому, що ваша інсталяція PHP зібрана з конфігураційним параметром -with-imap-ssl, на додаток до параметру -withimap. Крім того, саму системну бібліотеку IMAP необхідно зібрати з підтримкою SSL. Якщо ви використовуєте сертифікат, підписаний самостійно, і хочете запобігти невдалі спроби перевірки його справжності, додайте також / novalidate-cert. нарешті,
більшість SSL? з'єднань спілкуються або через порт 993, або через
порт 995. Всі ці параметри можуть розташовуватися в довільному порядку, тому такий запис має повне право на існування:

Висновок змінної у фігурні дужки всередині рядка в подвійних
лапках, наприклад, - це спосіб повідомити PHP, яку точно
змінну слід інтерполювати. Тому, щоб передати інтерпольованого змінну в якості першого параметра функції
imap_open (), перетворіть відкриває <в escapeпоследовательность:

$ Server = 'mail.server.com';
$ Port = 993;

$ Mail = imap_open ( "", 'username', 'password');
Відкривши з'єднання, можна задавати поштового сервера питання. Список всіх повідомлень в поштовій скриньці можна отримати, викликавши функцію imap_headers ():

Вона повертає масив, кожен елемент якого являє собою
форматований рядок, відповідну повідомленням:

Є й альтернативний спосіб вилучення повідомлення, який забезпечують функції imap_header () і imap_body (), що дозволяють отримати
заголовок об'єкта і рядок тіла:

$ Header = imap_header ($ message_number);
$ Body = imap_body ($ message_number);

Функція imap_header () повертає об'єкт з декількома полями. Найкорисніші з них - поля subject, fromaddress і udate. Всі поля перераховані в табл. 1.

Елемент body - це просто рядок, але якщо повідомлення складається з декількох частин, наприклад повідомлення представлено і в вигляді простого
тексту, і у вигляді HTML? документа, то елемент $ body містить обидві версії MIME? рядки, що описують їх:

- = _ Part_1046_3914492.1008372096119
Content-Type: text / plain; charset = us-ascii
Content-Transfer-Encoding: 7bit

- = _ Part_1046_3914492.1008372096119
Content-Type: text / html
Content-Transfer-Encoding: 7bit

HTML Message
- = _ Part_1046_3914492.1008372096119-.

Щоб уникнути цього, викликайте функцію imap_fetchstructure () в
комбінації з функцією imap_fetchbody (). Це дозволить з'ясувати, як
відформатоване тіло, і витягти тільки необхідну частину:

// вибираємо текст для повідомлення $ n
$ St = imap_fetchstructure ($ mail, $ n);
if (! empty ($ st-> parts))

for ($ i = 0, $ j = count ($ st-> parts); $ i <$j; $i++) $part = $st->parts [$ i];
if ($ part-> subtype == 'PLAIN')

$ Body = imap_fetchbody ($ mail, $ n, $ i + 1);
>
>
> Else $ body = imap_body ($ mail, $ n));
>

Якщо повідомлення складається з кількох частин, то змінна $ st-> parts містить масив об'єктів, які їх описують. властивість
part містить цілочисельне опис MIME? типу основного тіла.
У табл. 1 наведені цілі числа і відповідні їм MIME? Типи. Властивість subtype містить підтип MIME і показує, до якого
типу належить дана частина - plain, html, png або до якого? небудь
іншому, наприклад octet-stream.

Таблиця 1. Значення IMAP MIME-типів