Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΌΠ΅ΡΠ΅ΡΠ° Π² Hacker News ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ JMAP, . Π Π΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π°, Π·Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ ΠΊΠ°ΠΊ Π΅ ΡΡΡΡΠΎΠ΅Π½.
/ / PD
Π‘ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈ IMAP
ΠΡΠΎΡΠΎΠΊΠΎΠ» Π±Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ ΠΏΡΠ΅Π· 1986 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠ½ΠΎΠ³ΠΎ ΠΎΡ Π½Π΅ΡΠ°ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ°, Π΄Π½Π΅Ρ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ° Π°ΠΊΡΡΠ°Π»Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΡΡΠ° Π±ΡΠΎΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΈ ΡΡΠΌΠΈ β ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΠΈΠΌΠ΅ΠΉΠ» ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
ΠΡΡΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΠΊ. Π ΡΠ»ΡΡΠ°Ρ Ρ IMAP, ΠΈΠΌΠ΅ΠΉΠ»ΠΈΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ. ΠΠΊΠΎ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° ΠΊΠΎΠΏΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ "ΡΠ΅ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈ", ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Π²ΡΠΈΡΠΊΠ°ΡΠ° ΠΏΠΎΡΠ°. Π ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ ΡΠ²ΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΠΊ ΠΈ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ.
Π’ΡΡΠ΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΡΡ ΡΠ°ΠΌΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», Π½ΠΎ ΠΈ Ρ ΠΈΠΌΠ΅ΠΉΠ» ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π΅Π³ΠΎ. ΠΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° IMAP ΡΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π΅ ΠΏΠΎΠ΄Π»Π°Π³Π°Π½ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ β Π°ΠΊΡΡΠ°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π΄Π½Π΅Ρ Π΅ IMAP4. ΠΡΠΈ ΡΠΎΠ²Π° Π·Π° Π½Π΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ β Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΄Π΅Π²Π΅ΡΠ΄Π΅ΡΠ΅Ρ RFC Ρ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½ΠΎ ΠΎΡ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ Π΅ , ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΎ ΠΏΡΠ΅Π· 2019 Π³ΠΎΠ΄ΠΈΠ½Π°.
ΠΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠΏΡΠΎΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ IMAP ΠΈΠ»ΠΈ Π²ΡΠΎΠ±ΡΠ΅ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅ΡΡΡΡ: , , . Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΈΠΌΠ΅ΠΉΠ» ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠ°ΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π°ΠΊΠΎΠ²Π° ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΏΠ°Π·Π°ΡΠ°.
βΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΡ ΠΈΠΌΠ΅ΠΉΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΡΡΡΠ±Π²Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ ΠΈ Π΄Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° Ρ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ°, β ΠΊΠ°Π·Π²Π° Π‘Π΅ΡΠ³Π΅ΠΉ ΠΠ΅Π»ΠΊΠΈΠ½, Π½Π°ΡΠ°Π»Π½ΠΈΠΊ Π½Π° ΠΎΡΠ΄Π΅Π»Π° Π·Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° IaaS ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° . β ΠΠ½Π΅Ρ Π·Π° ΡΠ΅Π·ΠΈ ΡΠ΅Π»ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΠ½ΡΠ½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΊΠ°ΡΠΎ , ΠΈ . Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠΈΡΠ½ΠΈ ΡΡΠ΅Π½ΠΈ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ ΠΈ ΠΎΡΠ²Π°ΡΡ Π½ΠΎΠ²ΠΈ Π²Π΅ΠΊΡΠΎΡΠΈ Π·Π° ΠΊΠΈΠ±Π΅ΡΠ°ΡΠ°ΠΊΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π΅ JMAP. Π’ΠΎΠΉ Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ Π½Π° FastMail ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΈΡ ΡΡΠ²Π΅Ρ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ (IETF). ΠΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° HTTPS, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JSON (ΠΏΠΎ ΡΠ°Π·ΠΈ ΠΏΡΠΈΡΠΈΠ½Π° Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, Π½ΠΎ ΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π΄ΠΈΡΠ° Π·Π°Π΄Π°ΡΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ°) ΠΈ ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΠ°ΡΠ° Π² ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΡΠ²Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, JMAP ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ ΠΈ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Π½ΠΎΠ²ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»
JMAP Π΅ (stateless) ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈΡ ΡΡΡΠ²ΡΡ. Π’Π°Π·ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π² Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π½ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π½Π° Π±Π°ΡΠ΅ΡΠΈΡΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΡΠ°.
ΠΠΌΠ΅ΠΉΠ»ΡΡ Π² JMAP Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ JSON ΡΡΡΡΠΊΡΡΡΠ°. Π’Ρ ΡΡΠ΄ΡΡΠΆΠ° ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ (Internet Message Format), ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π‘ΠΏΠΎΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅, ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π΅ΡΠ½ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ (ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ , ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΡ ΠΈ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅) ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ ΡΡΡΠ²ΡΡΡΡ.
ΠΠ° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΡΡΡ ΡΡΡΠ²ΡΡΠ°, ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° API. ΠΠ° ΡΠΎΠ²Π° ΡΠΎΠΉ ΡΠΎΡΠΌΠΈΡΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ POST Π·Π°ΡΠ²ΠΊΠ°, ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΠΊΠΎΡΡΠΎ ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΠ΅ΡΠΈΠΉΠ½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ Π½Π° JMAP. ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠΌΠ° ΡΠΎΡΠΌΠ°Ρ application/json ΠΈ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ JSON ΠΎΠ±Π΅ΠΊΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°. Π‘ΡΡΠ²ΡΡΡΡ ΡΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ.
Π (ΠΏΡΠ½ΠΊΡ 3) Π°Π²ΡΠΎΡΠΈΡΠ΅ Π΄Π°Π²Π°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡ Π·Π°ΡΠ²ΠΊΠ°:
{
"using": [ "urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail" ],
"methodCalls": [
[ "method1", {
"arg1": "arg1data",
"arg2": "arg2data"
}, "c1" ],
[ "method2", {
"arg1": "arg1data"
}, "c2" ],
[ "method3", {}, "c3" ]
]
}
ΠΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΡΡΠ²ΡΡΡΡ:
{
"methodResponses": [
[ "method1", {
"arg1": 3,
"arg2": "foo"
}, "c1" ],
[ "method2", {
"isBlah": true
}, "c2" ],
[ "anotherResponseFromMethod2", {
"data": 10,
"yetmoredata": "Hello"
}, "c2"],
[ "error", {
"type":"unknownMethod"
}, "c3" ]
],
"sessionState": "75128aab4b1b"
}
ΠΡΠ»Π½Π°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° JMAP Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π’Π°ΠΌ Π°Π²ΡΠΎΡΠΈΡΠ΅ ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π»ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΈ β ΡΠ΅ ΡΠ° Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠΈ ΠΈ ΡΠΏΠΈΡΡΡΠΈ Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ. Π‘ΠΏΠΎΡΠ΅Π΄ Π°Π²ΡΠΎΡΠΈΡΠ΅, ΠΠΎΠ½ΡΠ°ΠΊΡΠΈ ΠΈ ΠΠ°Π»Π΅Π½Π΄Π°ΡΠΈΡΠ΅ ΡΠ° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΈ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ βΡΠ΄ΡΠΎΡΠΎβ. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° JMAP β Π² .

/ / PD
ΠΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²ΠΈ
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π°, ΡΠΎΠΉ Π²Π΅ΡΠ΅ ΡΠ΅ Π²Π½Π΅Π΄ΡΡΠ²Π° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΎΡΠΊΡΠΈΡΠΈΡ ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈ ΡΡΡΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° JMAP Π²Π΅ΡΡΠΈΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΎΡ FastMail ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡ Π° ΡΡΡΠ²ΡΡΠ΅Π½ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ Π·Π° Π½ΠΎΠ²ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π° Perl, Π° Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° JMAP .
ΠΎΡΠ°ΠΊΠ²Π°Ρ, ΡΠ΅ Π² Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° JMAP ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° ΠΈΠ·Π²Π΅ΡΡΠ½Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΎΡ Open-Xchange, ΡΡΠ·Π΄Π°Π²Π°ΡΠΈ IMAP ΡΡΡΠ²ΡΡ Π·Π° Linux ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΠΊΡΠΌ Π½ΠΎΠ²ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΡΠΎΡΡ Π½Π° ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ Π² ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° , ΡΠΎΡΠΌΠΈΡΠ°Π½Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΎΡ IETF ΠΈ FastMail ΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π²ΠΈΠΆΠ΄Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ Π½ΠΎΠ² ΠΎΡΠΊΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ²ΡΠΎΡΠΈΡΠ΅ Π½Π° JMAP ΡΠ΅ Π½Π°Π΄ΡΠ²Π°Ρ, ΡΠ΅ Π² Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ΅ Π²Π½Π΅Π΄ΡΡΡ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ».
ΠΠ°ΡΠΈΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ:
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
