· 11 years ago · Aug 11, 2015, 06:46 PM
19 IDLE
2+ idling
3
4#pragma once
5#include "MailCore/Mailcore.h"
6class IdleIMAPManager : public mailcore::Object, public mailcore::OperationCallback
7{
8public:
9 mailcore::IMAPAsyncSession * idleSession;
10 mailcore::IMAPIdleOperation * idleOperation;
11 int lastKnownUid = 1;
12
13 IdleIMAPManager(mailcore::IMAPAsyncSession * session, int lastKnownUid);
14 ~IdleIMAPManager();
15 void operationFinished(mailcore::Operation * op);
16 void startIMAPInboxListener();
17};
18
19#include "stdafx.h"
20
21IdleIMAPManager::IdleIMAPManager(mailcore::IMAPAsyncSession * session, int lastKnownUid) {
22 if (session != nullptr) {
23 IdleIMAPManager::idleSession = session;
24 IdleIMAPManager::lastKnownUid = lastKnownUid;
25 IdleIMAPManager::idleOperation = IdleIMAPManager::idleSession->idleOperation(MCSTR("INBOX"), IdleIMAPManager::lastKnownUid);
26 IdleIMAPManager::idleOperation->setCallback(this);
27 }
28 else {
29 std::cout << "IdleIMAPManager Error: Session is invalidn";
30 }
31}
32
33
34IdleIMAPManager::~IdleIMAPManager()
35{
36}
37
38void IdleIMAPManager::operationFinished(mailcore::Operation * op) {
39 printf("n============ IMAP IDLE OPERATION FIRED =========n");
40}
41
42void IdleIMAPManager::startIMAPInboxListener() {
43 if (IdleIMAPManager::idleOperation == nullptr) {
44 std::cout << "nError: Inbox listener not createdn";
45 exit(1);
46 }
47 else {
48 IdleIMAPManager::idleOperation->start();
49 }
50}
51
52class IdleLogger : public mailcore::ConnectionLogger {
53 void log(void * sender, mailcore::ConnectionLogType logType, mailcore::Data * buffer) {
54 std::string logfile = "C:\Users\...\idlelog";
55 std::ofstream log;
56 log.open(logfile, std::ios::binary | std::ios::app);
57 if (log.is_open()) {
58 if (buffer != nullptr) {
59 log.write(buffer->bytes(), buffer->length());
60 }
61 log.close();
62 }
63 else {
64 std::cout << "nLogger error: Could not open log file" << std::endl;
65 }
66 }
67};
68
69static void win32MainLoop(void)
70{
71 MSG msg;
72 while (GetMessage(&msg, NULL, 0, 0))
73 {
74 TranslateMessage(&msg);
75 DispatchMessage(&msg);
76 }
77}
78
79int main(int argc, _TCHAR* argv[])
80{
81 mailcore::AutoreleasePool * pool = new mailcore::AutoreleasePool();
82 mailcore::IMAPAsyncSession * session = new mailcore::IMAPAsyncSession();
83 //Create IDLE Session
84 session->setHostname(MCSTR("imap.gmail.com"));
85 session->setPort(993);
86 session->setUsername(MCSTR("******@gmail.com"));
87 session->setPassword(MCSTR("*******"));
88 session->setConnectionType(mailcore::ConnectionTypeTLS);
89 IdleLogger * connectionLog = new IdleLogger();
90 session->setConnectionLogger(connectionLog);
91
92 IdleIMAPManager idler = IdleIMAPManager(session, (int)420);
93 idler.startIMAPInboxListener();
94 win32MainLoop();
95 pool->release();
96 return 0;
97}
98
99* OK Gimap ready for requests from xx.xx.xxx.xxx i50mb118414577qgi
1001 CAPABILITY
101* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=XOAUTH
1021 OK Thats all she wrote! i50mb118414577qgi
1032 LOGIN "*******@gmail.com" "*******"
104* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS
1052 OK **********@gmail.com authenticated (Success)
1063 COMPRESS DEFLATE
1073 OK Success
1084 ENABLE CONDSTORE
109* ENABLED CONDSTORE
1104 OK Success
1115 NAMESPACE
112* NAMESPACE (("" "/")) NIL NIL
1135 OK Success
1146 ID NIL
115* ID ("name" "GImap" "vendor" "Google, Inc." "support-url" "http://support.google.com/mail" "version" "gmail_imap_150804.04_p0" "remote-host" "xx.xx.xxx.xxx")
1166 OK Success
1177 SELECT INBOX
118* FLAGS (Answered Flagged Draft Deleted Seen $NotPhishing $Phishing)
119* OK [PERMANENTFLAGS (Answered Flagged Draft Deleted Seen $NotPhishing $Phishing *)] Flags permitted.
120* OK [UIDVALIDITY 1] UIDs valid.
121* 106 EXISTS
122* 0 RECENT
123* OK [UIDNEXT 444] Predicted next UID.
124* OK [HIGHESTMODSEQ 36560]
1257 OK [READ-WRITE] INBOX selected. (Success)
1268 UID FETCH 420:* (UID)
127* 83 FETCH (UID 420 MODSEQ (35048))
128* 84 FETCH (UID 421 MODSEQ (35052))
129* 85 FETCH (UID 422 MODSEQ (35055))
130* 86 FETCH (UID 423 MODSEQ (35054))
131* 87 FETCH (UID 424 MODSEQ (35050))
132* 88 FETCH (UID 425 MODSEQ (35103))
133* 89 FETCH (UID 426 MODSEQ (35147))
134* 90 FETCH (UID 427 MODSEQ (35191))
135* 91 FETCH (UID 428 MODSEQ (35236))
136* 92 FETCH (UID 429 MODSEQ (35517))
137* 93 FETCH (UID 430 MODSEQ (35797))
138* 94 FETCH (UID 431 MODSEQ (35771))
139* 95 FETCH (UID 432 MODSEQ (35745))
140* 96 FETCH (UID 433 MODSEQ (35557))
141* 97 FETCH (UID 434 MODSEQ (36078))
142* 98 FETCH (UID 435 MODSEQ (36226))
143* 99 FETCH (UID 436 MODSEQ (36225))
144* 100 FETCH (UID 437 MODSEQ (36227))
145* 101 FETCH (UID 438 MODSEQ (36550))
146* 102 FETCH (UID 439 MODSEQ (36548))
147* 103 FETCH (UID 440 MODSEQ (36546))
148* 104 FETCH (UID 441 MODSEQ (36547))
149* 105 FETCH (UID 442 MODSEQ (36549))
150* 106 FETCH (UID 443 MODSEQ (36551))
1518 OK Success
1529 IDLE
153+ idling