|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
Суть задачи: получить непрочитанные сообщения с помощью протокола IMAP (в POP3, к сожалению, нет возможности работать с флагами). Взаимодействие с различными почтовиками типа Outlook не рассматривается. Пишем свой "почтовик", собирающий непрочитанные сообщения. В работе использую Winsock. На данный момент программа реализована следующим образом: с помощью IMAP в переменную записываем количество новых (непрочитанных) сообщений, затем с помощью POP3 получаем эти сообщения с сервера. У каждого сообщения есть свой последовательный номер. Еще вопрос: как вообще получает с сервера сообщения Outlook по IMAP ведь там нет команды передачи в отличие от POP3? зарание благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 14:55 |
|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
получение сообщений с аттачментами ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 15:13 |
|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
Практически никакой разницы с POP3. Я однажды почти доделал, тестировал на mail.ru и наткнулся на странность, когда команда предназначенная письму с номером х, так же применялась и к письму с номером х+1. Я спрашивал у mail.ru, баг это или фича, но никто не соизволил ответить. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 15:42 |
|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
Antonariy, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2012, 10:48 |
|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
Решил свою задачу так: Winsock1.Connect "ХХХ.ХХХ.ХХХ.ХХХ", 143 Do Until received: DoEvents: Loop If sckError Then MsgBox "An error occured trying to connect to server": Exit Sub sendMsg "AUTH LOGIN username password" If sckError Then MsgBox "Error": Exit Sub sendMsg "А142 SELECT INBOX" If sckError Then MsgBox "Error": Exit Sub sendMsg "Д042 STATUS INBOX (MESSAGES UNSEEN)" x_all = InStr(Message$, "(MESSAGES "): b_all = InStrRev(Message$, " UNSEEN") Messages_server = Val(Mid$(Message$, x_all + 10, b_all - (x_all + 10))) x_new = InStr(Message$, "UNSEEN "): b_new = InStrRev(Message$, ")") Messages_new = Val(Mid$(Message$, x_new + 7, b_new - (x_new + 7))) If Len(Dir("C:\WINDOWS\Temp\Delo", vbDirectory)) = 0 Then MkDir "C:\WINDOWS\Temp\Delo" If Len(Dir("C:\WINDOWS\Temp\Delo\EML", vbDirectory)) = 0 Then MkDir "C:\WINDOWS\Temp\Delo\EML" If Messages_new > 0 Then For a = (Messages_server - Messages_new) + 1 To Messages_server Winsock1.Tag = "FETCH" Open "C:\WINDOWS\Temp\Delo\EML\" & a & "-eMail.eml" For Binary Access Write As #1 sendMsg "А654 FETCH " & a & " BODY[]" Next Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Winsock1.GetData Message$ Select Case Winsock1.Tag Case "FETCH" Put #1, , Message$ If InStr(Message$, "А654 OK Fetch completed.") Then Close 1 Winsock1.Tag = "" received = True End If Case Else sckError = (InStr(Message$, "BAD") <> 0) received = True End Select End Sub Sub sendMsg(m$) DoEvents Winsock1.SendData m$ + vbCrLf received = False Do Until received DoEvents Loop End Sub Private Sub Form_Load() Winsock1.Tag = "" Winsock1.Close End Sub Private Sub Winsock1_Close() Winsock1.Close End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 09:45 |
|
Получение непрочитанных сообщений с помощью IMAP
|
|||
---|---|---|---|
#18+
If Messages_new > 0 Then For a = (Messages_server - Messages_new) + 1 To Messages_server Winsock1.Tag = "FETCH" Open "C:\WINDOWS\Temp\Delo\EML\" & a & "-eMail.eml" For Binary Access Write As #1 sendMsg "А654 FETCH " & a & " BODY[]" Next End If ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 09:47 |
|
|
start [/forum/topic.php?fid=60&msg=37734162&tid=2157931]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 403ms |
total: | 516ms |
0 / 0 |