IMAP協議學習


服務器監聽端口:143

一次IMAP4rev1連接組成:

1、建立客戶端到服務器的網絡連接;

2、服務器初始歡迎;

3、剩下就是重復客戶端、服務器的交互, 交互基本形式為:

  客戶端發送命令

  服務器返回請求數據

  服務器返回完成響應

  

  客戶端命令引發操作。每個客戶端命令以一個標識作為前綴(典型的有字母、數字構成的短字符串,如:A0001,A0002,等等)――它稱為“標簽”。客戶端為每個命令生成不同的“標簽”,也稱每個客戶端命令都是標簽化的。

  IMAP4rev1服務器端的協議接收端,從客戶端讀取命令行,解析該命令行及其參數,並傳送服務器數據(非標簽化,以*或+開頭)及一個服務器命令(標簽化,有與客戶端請求命令相同的前綴)完成結果的響應。

協議概述:

一旦客戶端和服務器間的連接建立完成,一個IMAP4rev1連接就會處於4種狀態中的某一種。
1.未認證狀態 :在未認證狀態下,大多數命令在得到許可前,客戶端必須提供認證證書。若非連接已經是預認證了的,一個連接開始時,就進入了未認證狀態。
2. 認證狀態 :在認證狀態下,客戶端是認證了的,它必須先於影響郵件的命令被許可前,選擇一個郵箱以訪問。當一個預認證連接開始,被認可的認證證書已經提供,選擇一個郵箱發生錯誤后,或者一個成功的CLOSE命令后,就進入了認證狀態。
3. 選中狀態 :在一個選中狀態,一個郵箱被選中以訪問。當一個郵箱被成功選中時,就進入了這個狀態。
4. 注銷狀態 :在注銷狀態下,連接正在被終止。一個客戶端請求(通過LOGOUT命令),或者客戶端、服務器的單方面動作,都會導致進入這個狀態。

之所以提及到狀態,是因為IMAP協議的很多指令只有在處於某種狀態下才會有效。下面我就為大家羅列一下指令的作用的權限吧。

1.在任何狀態下都有效的指令(全局命令):CAPALIBILY,NOOP,LOGOUT。

2.未認證狀態下有效的指令(未認證狀態命令):STARTTLS,AUTHENTICATE,LOGIN和全局命令。

3.認證狀態下有效的指令(認證狀態命令):SELECT,EXAMINE,CREATE,DELETE,RENAME,SUBSCRIBE,UNSUBSCRIBE,LIST,LSUB,STATUS,APPEND和全局命令

4.在選中狀態下有效的指令(選中狀態指令):CHECK,CLOSE,EXPUNGE,SEARCH,FETCH,STORE,COPY,UID和全局命令、認證狀態命令

IMAP命令、響應、語法:

固定格式,可直接參考IMAP協議RFC3501中文文檔 6、7、9章;

實例:

一個用telnet操作imap命令的實例

  1 * OK Coremail System IMap Server Ready(126com[75c606d72bf436dfbce6e08e565f41f7])
  2 
  3 C1 LOGIN username@126.com "password"
  4 
  5 C1 OK LOGIN completed
  6 
  7 C2 CAPABILITY
  8 
  9 * CAPABILITY IMAP4rev1 XLIST SPECIAL-USE ID LITERAL+ STARTTLS XAPPLEPUSHSERVICE UIDPLUS X-CM-EXT-1
 10 
 11 C2 OK CAPABILITY completed
 12 
 13 C3 LIST "" *
 14 
 15 * LIST () "/" "INBOX"
 16 
 17 * LIST (\Drafts) "/" "&g0l6P3ux-"
 18 
 19 * LIST (\Sent) "/" "&XfJT0ZAB-"
 20 
 21 * LIST (\Trash) "/" "&XfJSIJZk-"
 22 
 23 * LIST (\Junk) "/" "&V4NXPpCuTvY-"
 24 
 25 * LIST () "/" "&dcVr0pCuTvY-"
 26 
 27 * LIST () "/" "&V4NXPnux-"
 28 
 29 * LIST () "/" "&U9GQAQ-"
 30 
 31 C3 OK LIST Completed
 32 
 33 C4 LSUB "" *
 34 
 35 C4 OK LSUB Completed
 36 
 37 C5 NOOP
 38 
 39 C5 OK NOOP completed
 40 
 41 C6 STATUS "INBOX" (MESSAGES RECENT UIDVALIDITY)
 42 
 43 * STATUS "INBOX" (MESSAGES 32 RECENT 0 UIDVALIDITY 1)
 44 
 45 C6 OK STATUS completed
 46 
 47 C7 STATUS "&g0l6P3ux-" (MESSAGES RECENT UIDVALIDITY)
 48 
 49 * STATUS "&g0l6P3ux-" (MESSAGES 1 RECENT 0 UIDVALIDITY 2)
 50 
 51 C7 OK STATUS completed
 52 
 53 C8 STATUS "&XfJT0ZAB-" (MESSAGES RECENT UIDVALIDITY)
 54 
 55 * STATUS "&XfJT0ZAB-" (MESSAGES 8 RECENT 0 UIDVALIDITY 3)
 56 
 57 C8 OK STATUS completed
 58 
 59 C9 STATUS "&XfJSIJZk-" (MESSAGES RECENT UIDVALIDITY)
 60 
 61 * STATUS "&XfJSIJZk-" (MESSAGES 0 RECENT 0 UIDVALIDITY 4)
 62 
 63 C9 OK STATUS completed
 64 
 65 C10 STATUS "&V4NXPpCuTvY-" (MESSAGES RECENT UIDVALIDITY)
 66 
 67 * STATUS "&V4NXPpCuTvY-" (MESSAGES 0 RECENT 0 UIDVALIDITY 5)
 68 
 69 C10 OK STATUS completed
 70 
 71 C11 NOOP
 72 
 73 C11 OK NOOP completed
 74 
 75 C12 SELECT "INBOX"
 76 
 77 * 32 EXISTS
 78 
 79 * 0 RECENT
 80 
 81 * OK [UIDVALIDITY 1] UIDs valid
 82 
 83 * FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
 84 
 85 * OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
 86 
 87 C12 OK [READ-WRITE] SELECT completed
 88 
 89 C13 FETCH 1:32 (UID)
 90 
 91 * 1 FETCH (UID 1407140116)
 92 
 93 * 2 FETCH (UID 1407140117)
 94 
 95 * 3 FETCH (UID 1407140118)
 96 
 97 * 4 FETCH (UID 1407140119)
 98 
 99 * 5 FETCH (UID 1407140120)
100 
101 * 6 FETCH (UID 1407140121)
102 
103 * 7 FETCH (UID 1407140122)
104 
105 * 8 FETCH (UID 1407140123)
106 
107 * 9 FETCH (UID 1407140124)
108 
109 * 10 FETCH (UID 1407140125)
110 
111 * 11 FETCH (UID 1407140126)
112 
113 * 12 FETCH (UID 1407140127)
114 
115 * 13 FETCH (UID 1407140128)
116 
117 * 14 FETCH (UID 1407140129)
118 
119 * 15 FETCH (UID 1407140130)
120 
121 * 16 FETCH (UID 1407140131)
122 
123 * 17 FETCH (UID 1407140132)
124 
125 * 18 FETCH (UID 1407140133)
126 
127 * 19 FETCH (UID 1407140134)
128 
129 * 20 FETCH (UID 1407140135)
130 
131 * 21 FETCH (UID 1407140136)
132 
133 * 22 FETCH (UID 1407140137)
134 
135 * 23 FETCH (UID 1407140138)
136 
137 * 24 FETCH (UID 1407140139)
138 
139 * 25 FETCH (UID 1407140140)
140 
141 * 26 FETCH (UID 1407140141)
142 
143 * 27 FETCH (UID 1407140142)
144 
145 * 28 FETCH (UID 1407140143)
146 
147 * 29 FETCH (UID 1407140144)
148 
149 * 30 FETCH (UID 1407140145)
150 
151 * 31 FETCH (UID 1407140146)
152 
153 * 32 FETCH (UID 1407140147)
154 
155 C13 OK Fetch completed
156 
157 C14 NOOP
158 
159 C14 OK NOOP completed
160 
161 C15 SELECT "&g0l6P3ux-"
162 
163 * 1 EXISTS
164 
165 * 0 RECENT
166 
167 * OK [UIDVALIDITY 2] UIDs valid
168 
169 * FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
170 
171 * OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
172 
173 C15 OK [READ-WRITE] SELECT completed
174 
175 C16 FETCH 1:1 (UID)
176 
177 * 1 FETCH (UID 1407141539)
178 
179 C16 OK Fetch completed
180 
181 C17 NOOP
182 
183 C17 OK NOOP completed
184 
185 C18 SELECT "&XfJT0ZAB-"
186 
187 * 8 EXISTS
188 
189 * 0 RECENT
190 
191 * OK [UIDVALIDITY 3] UIDs valid
192 
193 * FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
194 
195 * OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
196 
197 C18 OK [READ-WRITE] SELECT completed
198 
199 C19 FETCH 1:8 (UID)
200 
201 * 1 FETCH (UID 1407140524)
202 
203 * 2 FETCH (UID 1407140525)
204 
205 * 3 FETCH (UID 1407140526)
206 
207 * 4 FETCH (UID 1407140527)
208 
209 * 5 FETCH (UID 1407140528)
210 
211 * 6 FETCH (UID 1407140529)
212 
213 * 7 FETCH (UID 1407140530)
214 
215 * 8 FETCH (UID 1407140531)
216 
217 C19 OK Fetch completed
218 
219 C20 NOOP
220 
221 C20 OK NOOP completed
222 
223 C21 SELECT "&XfJSIJZk-"
224 
225 * 0 EXISTS
226 
227 * 0 RECENT
228 
229 * OK [UIDVALIDITY 4] UIDs valid
230 
231 * FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
232 
233 * OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
234 
235 C21 OK [READ-WRITE] SELECT completed
236 
237 C22 NOOP
238 
239 C22 OK NOOP completed
240 
241 C23 SELECT "&V4NXPpCuTvY-"
242 
243 * 0 EXISTS
244 
245 * 0 RECENT
246 
247 * OK [UIDVALIDITY 5] UIDs valid
248 
249 * FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
250 
251 * OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
252 
253 C23 OK [READ-WRITE] SELECT completed
254 
255 * OK Coremail System IMap Server Ready(126com[75c606d72bf436dfbce6e08e565f41f7])
IMAP COMMANDS


 

參考資料:IMAP協議RFC3501中文文檔

     IMAP協議指令學習以及代碼(C/C++)示例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM