✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

IMAP iekš PHP

2004. gada 14. septembrī, komentāru vēl nav

Pēc pāris stundu ilgas cīņas ar PHP un IMAP protokolu, tika noskaidrots, kā var realizēt t.s. user-defined message flags. Kāpēc tas vajadzīgs? Tāpēc, ka jebkuram IMAP serverim ir predefinēti pieci sistēmas flagi, kurus var piešķirt vēstulei. Tie ir Seen, Answered, Flagged, Deleted un Draft.

Šie sistēmas flagi ar laiku kļūst par īsu. Teiksim, ja nu es vēlos atzīmēt kādu vēstuli, lai vēlāk pie tās atgrieztos? It kā varētu izmantot Flagged, nosaucot to lietotāja galā par svarīgs, taču tas nav labākais veids. Kā izrādās, viss realizējas stipri vienkāršāk, lai arī ar pāris problēmiņām (PHP IMAP interfeisa realizācijā).

Kā izriet no RFC 2060, jebkurai vēstulei jebkurš lietotājs var piešķirt savus flagus. Teiksim, PHP versijā tas būtu:

imap_setflag_full($mbox, $uid, 'Mansflags', ST_UID)

Itin vai viss ir dikti jauki, taču, kā izrādās, ka funkcijas imap_headerinfo($mbox, $msgid) rezultātā šie lietotāja definētie flagi nekādi neparādās...

Turpinot investigāciju, nolēmu pamēģināt funkciju imap_headers($mbox), kas nav pati optimālākā resursu ziņā, bet strādā, jo atgriež kaut ko līdzīgu masīvam, kurš sastāv no teksta rindām. Piem.:

    A     1)29-Jun-2004 Bļamba         {Mansflags} RE: test (1352 chars)

Kā redzam, mums ir teksta rinda, kurā Pirms tēmas parādās mūsu specifiskais flags (figūriekavās). Attiecīgi, atliek tikai izrakt messāges kārtas numuru, pārbaudīt, vai pirms tēmas neir {Mansflags} un basta. Jāatcerās, ka masīva indekss nebūt neatbilst tam, ko dēvē par vēstules sequence number.

Teksta rindas formāts ir aptuveni sekojošs:

<SYSTEM FLAGS ABBREVIATED> <MSGNO>) <DATE> {<LIST OF CUSTOM FLAGS>} <SUBJECT> (<LENGTH OF MESSAGE IN CHARS>)

P.S. Tas var mainīties atkarībā no IMAP servera. Konkrētais piemērs strādā ar Cyrus IMAPD.

P.P.S. Jāatzīst, ka nebūt nav grūti šādi spēlēties ar nabaga saņēmēju, sūtot vēstules ar tēmām {Mansflags} You are owned!, bet tas jau ir atkarīgs no tā, kā esi uztaisījis iepriekšminētās funkcijas imap_headers() rezultātu apstrādi :)

Un galu galā lietotājs ir laimīgs, jo viņam tiek nodrošināta papildus funkcionalitāte. Šis, protams, attiecas uz tiem izstrādātājiem, kuri veido un uztur savus IMAP klientus plašākai vai šaurākai lietošanai.

Tu atbildi augstāk redzamajam komentāram. Atcelt