IMAP — elektron xatlarni pochta serverida saqlagan holda ko‘rish, papkalarga ajratish va bir nechta qurilmada sinxron ishlash uchun mo‘ljallangan protokol. Uning to‘liq nomi Internet Message Access Protocol hisoblanadi.
IMAPda serverdagi mailbox asosiy nusxa hisoblanadi. Telefon, noutbuk, desktop dastur va webmail bir xil xatlar, papkalar va o‘qilgan holatini ko‘rishi mumkin.
SMTP xatni yuboradi. IMAP esa qabul qilingan xatlarni foydalanuvchiga boshqarib beradi.
IMAP modeli
IMAP foydalanuvchiga serverdagi mailbox bilan masofadan ishlash imkonini beradi.
Asosiy imkoniyatlar:
- papkalar ro‘yxatini olish;
- papka yaratish va o‘chirish;
- xatlar sarlavhasini ko‘rish;
- xat body qismini yuklash;
- attachmentni alohida olish;
- xatni o‘qilgan deb belgilash;
- flag qo‘yish;
- xatni ko‘chirish yoki nusxalash;
- server tomonida qidirish;
- yangi xatni tez aniqlash;
- bir nechta qurilma holatini sinxronlashtirish.
Client barcha xatlarni doim to‘liq yuklab olishi shart emas. Bu katta mailbox va mobil tarmoq uchun muhim.
Ulanish holatlari
IMAP sessiyasi bir necha holatdan o‘tadi.
Non-authenticated
Client serverga ulangan, lekin foydalanuvchi hali tasdiqlanmagan.
Bu holatda:
Authenticated
Foydalanuvchi tasdiqlangan, lekin aniq mailbox tanlanmagan.
Selected
Client INBOX yoki boshqa mailboxni tanlagan. Endi xatlar bilan ishlash buyruqlari mavjud.
Logout
Sessiya yopiladi va server ulanishni tugatadi.
Buyruq va javoblar
IMAP matnli buyruq protokoli. Har client buyrug‘i alohida tag bilan boshlanadi.
Misol:
C: A001 CAPABILITY
S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN
S: A001 OK CAPABILITY completed
C: A002 LOGIN [email protected] password
S: A002 OK LOGIN completed
C: A003 SELECT INBOX
S: * 42 EXISTS
S: * 3 RECENT
S: A003 OK SELECT completed
Tag clientga bir nechta buyruq javoblarini ajratishga yordam beradi.
Server javoblari:
OK— amal muvaffaqiyatli;NO— buyruq tushunilgan, ammo bajarilmadi;BAD— sintaksis yoki protokol xatosi;BYE— server sessiyani yopmoqda;*— untagged status yoki ma’lumot;+— davom ettirish so‘rovi.
Mailbox
IMAP papkani mailbox deb ataydi. INBOX maxsus mailbox bo‘lib, nomi case-insensitive hisoblanadi.
Boshqa papkalar:
- Sent;
- Drafts;
- Trash;
- Spam;
- Archive;
- foydalanuvchi yaratgan papkalar.
Papka ierarxiyasi delimiter orqali ifodalanadi. Masalan:
Projects/UzbekDevs
Projects/Archive
Delimiter serverga qarab / yoki boshqa belgi bo‘lishi mumkin.
Xabar tartib raqami
Selected mailbox ichida har xat message sequence numberga ega.
Sequence number mailbox holatiga bog‘liq:
- xat o‘chirilsa raqamlar o‘zgarishi mumkin;
- yangi xat qo‘shilganda son ortadi;
- boshqa client EXPUNGE qilsa raqamlar siljishi mumkin.
Shu sababli uzoq muddatli identifikatsiya uchun faqat sequence numberga tayanish xavfli.
UID
Har mailbox ichidagi xatga Unique Identifier beriladi. UID sequence numberga qaraganda barqarorroq.
UID bilan ishlash:
UID FETCH
UID STORE
UID COPY
UID SEARCH
Mailbox UIDVALIDITY qiymatiga ham ega. Server mailboxni qayta yaratib, eski UIDlar ma’nosini yo‘qotsa, UIDVALIDITY o‘zgaradi. Client lokal cache ni yangilashi kerak.
UID global emas. Bir xat boshqa papkaga ko‘chirilsa, yangi mailboxda boshqa UID olishi mumkin.
Flags
IMAP xat holatini flaglar orqali saqlaydi.
Standart flaglar:
| Flag | Mazmuni |
|---|---|
\Seen |
Xat o‘qilgan |
\Answered |
Xatga javob berilgan |
\Flagged |
Muhim yoki belgilangan |
\Deleted |
O‘chirish uchun belgilangan |
\Draft |
Qoralama |
\Recent |
Server sessiyasiga yaqinda kelgan xat |
Server custom keywordlarni ham qo‘llashi mumkin.
Bir qurilmada xat \Seen qilinsa, boshqa IMAP client ham o‘qilgan holatni ko‘radi.
FETCH
FETCH xatning kerakli qismini olish uchun ishlatiladi.
Client quyidagilarni alohida so‘rashi mumkin:
- envelope;
- headerlar;
- body structure;
- matnli body;
- HTML body;
- attachment;
- xat hajmi;
- internal date;
- flags.
Masalan, telefon dasturi avval faqat jo‘natuvchi, mavzu va sana ma’lumotini oladi. Foydalanuvchi xatni ochganda body, attachment bosilganda esa fayl yuklanadi.
Bu yondashuv trafik va lokal storage sarfini kamaytiradi.
BODYSTRUCTURE va MIME
Elektron xat multipart MIME tuzilishiga ega bo‘lishi mumkin.
Misol:
multipart/mixed
├── multipart/alternative
│ ├── text/plain
│ └── text/html
└── application/pdf
IMAP BODYSTRUCTURE orqali clientga xat qismlarini ko‘rsatadi. Client kerakli partni alohida oladi.
Shu sababli 50 MB attachmentli xat ro‘yxatda ko‘rinishi uchun attachmentni darhol yuklash shart emas.
STORE
STORE xat flaglarini o‘zgartiradi.
Misollar:
\Seenqo‘shish;\Flaggedolib tashlash;\Deletedbelgilash;- custom label qo‘shish.
Bir nechta client bir mailbox bilan ishlaganda flag yangilanishlari serverda saqlanadi.
O‘chirish va EXPUNGE
IMAPning klassik modelida xat darhol o‘chirilmasligi mumkin.
- Xatga
\Deletedflagi qo‘yiladi. EXPUNGEbuyrug‘i\Deletedbelgilangan xatlarni mailboxdan butunlay olib tashlaydi.
Bu ikki bosqich xatni vaqtincha belgilash imkonini beradi. Biroq boshqa client EXPUNGE qilsa sequence numberlar o‘zgarishi mumkin.
Yangi kengaytmalarda aniq UIDni xavfsizroq expunge qilish va MOVE buyrug‘i mavjud bo‘lishi mumkin.
COPY va MOVE
COPY xatni boshqa mailboxga nusxalaydi. Asl xat o‘z joyida qoladi.
Klassik IMAPda ko‘chirish:
- COPY;
- asl xatga
\Deleted; - EXPUNGE
orqali bajarilgan.
MOVE kengaytmasi buni bitta mantiqiy amal sifatida bajaradi va race conditionlarni kamaytiradi.
SEARCH
IMAP server tomonida qidirish imkonini beradi.
Mezonlar:
- jo‘natuvchi;
- qabul qiluvchi;
- subject;
- sana;
- flag;
- body matni;
- hajm;
- UID;
- o‘qilgan yoki o‘qilmagan holat.
Server qidiruvni bajargani uchun client barcha xatlarni lokal yuklab olishi shart emas. Qidiruv tezligi server indeksiga va mailbox hajmiga bog‘liq.
IDLE
Oddiy pollingda client har ma’lum vaqtda yangi xat borligini so‘raydi. IDLE kengaytmasi ulanishni ochiq saqlab, serverga o‘zgarish haqida darhol xabar berish imkonini beradi.
- yangi xat kelganini;
- xat o‘chirilganini;
- flag o‘zgarganini
tez bilishi mumkin.
Mobil push tizimi har doim bevosita IMAP IDLE bo‘lavermaydi. Ilova ishlab chiqaruvchining alohida push serveri va operatsion tizim notification xizmatidan foydalanishi mumkin.
IMAP portlari
| Port | Vazifasi |
|---|---|
| 143 | Oddiy IMAP; STARTTLS orqali himoyalanishi mumkin |
| 993 | TLS boshidan yoqilgan IMAPS |
Login va xat mazmunini himoyalanmagan kanal orqali yuborish xavfli. Zamonaviy server TLSni majburiy qiladi.
Autentifikatsiya
IMAP quyidagi usullardan foydalanishi mumkin:
- login va parol;
- SASL mexanizmlari;
- OAuth 2.0 token;
- client sertifikati;
- platformaga xos single sign-on.
Ko‘p pochta provayderlari oddiy parol o‘rniga OAuth token yoki application password talab qiladi. Bu foydalanuvchining asosiy parolini uchinchi tomon dasturiga bermaslikka yordam beradi.
Bir nechta qurilmada sinxronlash
IMAPning asosiy afzalligi serverdagi umumiy holatdir.
Masalan:
- telefon xatni o‘qilgan deb belgilaydi;
- noutbuk shu flagni ko‘radi;
- webmail xatni Archive papkasiga ko‘chiradi;
- desktop client papka o‘zgarishini sinxronlashtiradi.
Client lokal cache saqlashi mumkin. Oflayn holatda xatlar o‘qiladi va o‘zgarishlar keyin serverga yuboriladi. Conflict holatlarini client UID, MODSEQ va boshqa kengaytmalar yordamida boshqarishi mumkin.
Quota
Server mailbox hajmi uchun quota belgilashi mumkin.
Quota to‘lsa:
- yangi xat yetkazilmasligi;
- attachment yuklanmasligi;
- papkaga nusxalash ishlamasligi;
- server ogohlantirish yuborishi
mumkin.
IMAP quota kengaytmasi clientga foydalanilgan va ruxsat etilgan hajmni ko‘rsatishi mumkin.
IMAP va POP3
| Jihat | IMAP | POP3 |
|---|---|---|
| Asosiy nusxa | Serverda | Ko‘pincha lokal qurilmada |
| Papkalar | Server tomonida boshqariladi | Standart protokolda yo‘q |
| Flag sinxronizatsiyasi | Bor | Juda cheklangan |
| Bir nechta qurilma | Mos | Noqulayroq |
| Qisman yuklash | Keng imkoniyat | Cheklangan |
| Server qidiruvi | Bor | Yo‘q |
| Oflayn ishlash | Lokal cache bilan | Yuklangan xatlar bilan |
POP3 sodda yuklab olish uchun, IMAP esa zamonaviy ko‘p qurilmali mailbox boshqaruvi uchun mos.
Diagnostika
IMAP muammosida quyidagilar tekshiriladi:
- port 143 yoki 993;
- TLS sertifikat;
- autentifikatsiya;
- mailbox quota;
- papka subscription;
- UIDVALIDITY;
- client cache;
- server loglari;
- IDLE timeout;
- katta attachment;
- max connection limiti;
- OAuth token muddati;
- firewall yoki proxy.
Clientdagi xat soni serverdagi son bilan mos kelmasa, UID, papka holati, filter va lokal cache qayta ko‘riladi.
Bog‘liq tushunchalar
Email, Mailbox, SMTP, POP3, UID, UIDVALIDITY, Flags, FETCH, STORE, SEARCH, IDLE, EXPUNGE, MIME, TLS