00001
00014 #ifndef __EMAIPOP3_HPP__
00015 #define __EMAIPOP3_HPP__
00016
00017 #include <EmaiPOP3.h>
00018 #include <EmaiMessage.hpp>
00019
00025 namespace Emai
00026 {
00027
00034 class Pop3StatusCallback
00035 {
00036 friend class Pop3Session;
00044 virtual EmaiError OnOperation(
00045 Pop3Session& inSession,
00046 EmaiUint32 inOperationCode) = 0;
00047
00056 virtual EmaiError OnDataReceived(
00057 Pop3Session& inSession,
00058 EmaiUint32 inReceivedSize,
00059 EmaiUint32 inTotalSize) = 0;
00060
00069 virtual EmaiError OnServerError(
00070 Pop3Session& inSession,
00071 EmaiConstCharPtr inServerReply,
00072 EmaiUint32 inReplyCode) = 0;
00073 public:
00074 virtual ~Pop3StatusCallback();
00075
00076 protected:
00077 static EmaiError StatusCallback(
00078 EmaiPop3Session inSession,
00079 const EmaiPop3CallbackData* inData,
00080 void* inUserData);
00081 };
00082
00087 class MessageInfoList : public Object<EmaiPop3MessageInfoList>
00088 {
00089 protected:
00090
00091 typedef Object<EmaiPop3MessageInfoList> Parent;
00092
00094 MessageInfoList();
00096 MessageInfoList(
00097 const MessageInfoList&);
00098
00099 public:
00100
00101 MessageInfoList(
00102 EmaiConstUniCharPtr inFullFilePath,
00103 EmaiOptions inOptions = EmaiNullOptions);
00104
00105 MessageInfoList(
00106 const void* inMessageListData,
00107 EmaiUint32 inMessageListDataSize,
00108 EmaiOptions inOptions = EmaiNullOptions);
00109
00110 ~MessageInfoList();
00111
00112 void EvaluateSublist(
00113 EmaiUint32 inDays,
00114 EmaiOptions inOptions = EmaiMessagesForDownload);
00115
00123 EmaiUint32 GetCount(
00124 EmaiOptions inOptions = EmaiMessagesForDownload);
00125
00138 void GetInfo(
00139 EmaiUint32 inMessageIndex,
00140 EmaiMessageInfo& outInfo,
00141 EmaiOptions inOptions = EmaiMessagesForDownload);
00142
00153 void MarkMessageReceived(
00154 EmaiUint32 inMessageIndex,
00155 EmaiOptions inOptions = EmaiMessageIndexInList);
00156
00166 void GetMessageInfoListData(
00167 const void** outData,
00168 EmaiUint32& outDataSize,
00169 EmaiOptions inOptions = EmaiNullOptions);
00170
00180 void ResetInfoList(
00181 EmaiConstUniCharPtr inAccount,
00182 EmaiConstUniCharPtr inServer,
00183 EmaiOptions inOptions = EmaiNullOptions);
00184 };
00185
00190 class Pop3Session : public Object<EmaiPop3Session>
00191 {
00192 protected:
00193
00194 typedef Object<EmaiPop3Session> Parent;
00195
00197 Pop3Session();
00198
00199 public:
00200
00201 Pop3Session(
00202 Pop3StatusCallback& inStatusCallback,
00203 EmaiUint32 inTimeout,
00204 EmaiOptions inOptions = EmaiNullOptions);
00205 Pop3Session(
00206 EmaiPop3StatusCallback inStatusCallback,
00207 void* inUserData,
00208 EmaiUint32 inTimeout,
00209 EmaiOptions inOptions = EmaiNullOptions);
00210
00211 Pop3Session(
00212 const Pop3Session& inCopy);
00213 Pop3Session(
00214 EmaiPop3Session inSession,
00215 bool inAddRef);
00216
00217 ~Pop3Session();
00218
00230 void Connect(
00231 EmaiConstUniCharPtr inMailServer,
00232 short inPort = EmaiDefaultPop3Port,
00233 EmaiOptions inOptions = EmaiNullOptions);
00234
00248 void ConnectEx(
00249 EmaiConstUniCharPtr inMailServer,
00250 short inPort = EmaiDefaultPop3Port,
00251 const EmaiProxyInfo* inProxyInfo = NULL,
00252 void* inUserData = NULL,
00253 EmaiOptions inOptions = EmaiNullOptions);
00254
00262 void Disconnect(
00263 EmaiOptions inOptions = EmaiNullOptions);
00264
00278 void Authenticate(
00279 EmaiConstUniCharPtr inAccount,
00280 EmaiConstUniCharPtr inPassword,
00281 EmaiOptions inOptions = EmaiPOP3AuthAutomatic);
00282
00296 void RetrieveMessageList(
00297 MessageInfoList& inMessageInfoList,
00298 EmaiOptions inOptions = EmaiNullOptions);
00299
00311 Message RetrieveMessage(
00312 EmaiUint32 inMessageNumber,
00313 EmaiOptions inOptions = EmaiNullOptions);
00314
00323 void DeleteMessage(
00324 EmaiUint32 inMessageNumber,
00325 EmaiOptions inOptions = EmaiNullOptions);
00326
00334 void Reset(
00335 EmaiOptions inOptions = EmaiNullOptions);
00336
00344 void Cancel(
00345 EmaiOptions inOptions = EmaiNullOptions);
00346
00355 void Noop(
00356 EmaiOptions inOptions = EmaiNullOptions);
00357 };
00358
00359
00360
00361
00362 inline EmaiError
00363 Pop3StatusCallback::StatusCallback(
00364 EmaiPop3Session inSession,
00365 const EmaiPop3CallbackData* inData,
00366 void* inUserData
00367 )
00368 {
00369 Pop3StatusCallback* callback = reinterpret_cast<Pop3StatusCallback*>(inUserData);
00370 EmaiError error = EmaiErrNoErr;
00371 try
00372 {
00373 if (callback != NULL)
00374 {
00375 Pop3Session session(inSession, true);
00376 switch (inData->selector)
00377 {
00378 case EmaiPop3SelectorNormal:
00379 error = callback->OnOperation(session, inData->data.normal.operationCode);
00380 break;
00381 case EmaiPop3SelectorReceiving:
00382 error = callback->OnDataReceived(session, inData->data.receiving.receivedSize,
00383 inData->data.receiving.totalSize);
00384 break;
00385 case EmaiPop3SelectorServerError:
00386 error = callback->OnServerError(session, inData->data.serverError.serverReply,
00387 inData->data.serverError.replyCode);
00388 break;
00389 default:
00390 error = EmaiErrUnknown;
00391 break;
00392 }
00393 }
00394 }
00395 catch (...)
00396 {
00397
00398 error = EmaiErrUnknown;
00399 }
00400 return error;
00401 }
00402
00403 inline
00404 Pop3StatusCallback::~Pop3StatusCallback()
00405 {
00406 }
00407
00408
00409
00410
00411 inline
00412 MessageInfoList::MessageInfoList(
00413 EmaiConstUniCharPtr inFullFilePath,
00414 EmaiOptions inOptions
00415 )
00416 {
00417 CheckErrorCode(EmaiPop3MessageInfoListCreateFromFile(&mObject,
00418 inFullFilePath, inOptions));
00419 }
00420
00421 inline
00422 MessageInfoList::MessageInfoList(
00423 const void* inMessageListData,
00424 EmaiUint32 inMessageListDataSize,
00425 EmaiOptions inOptions
00426 )
00427 {
00428 CheckErrorCode(EmaiPop3MessageInfoListCreateFromData(&mObject,
00429 inMessageListData, inMessageListDataSize, inOptions));
00430 }
00431
00432 inline
00433 MessageInfoList::~MessageInfoList()
00434 {
00435 }
00436
00437 inline void
00438 MessageInfoList::EvaluateSublist(
00439 EmaiUint32 inDays,
00440 EmaiOptions inOptions
00441 )
00442 {
00443 CheckErrorCode(EmaiPop3MessageInfoListEvaluateSubList(mObject,
00444 inDays, inOptions));
00445 }
00446
00447 inline EmaiUint32
00448 MessageInfoList::GetCount(
00449 EmaiOptions inOptions
00450 )
00451 {
00452 EmaiUint32 count = 0;
00453 CheckErrorCode(EmaiPop3MessageInfoListGetCount(mObject,
00454 &count, inOptions));
00455 return count;
00456 }
00457
00458 inline void
00459 MessageInfoList::GetInfo(
00460 EmaiUint32 inMessageIndex,
00461 EmaiMessageInfo& outInfo,
00462 EmaiOptions inOptions
00463 )
00464 {
00465 CheckErrorCode(EmaiPop3MessageInfoListGetInfo(mObject,
00466 inMessageIndex, &outInfo, inOptions));
00467 }
00468
00469 inline void
00470 MessageInfoList::MarkMessageReceived(
00471 EmaiUint32 inMessageIndex,
00472 EmaiOptions inOptions
00473 )
00474 {
00475 CheckErrorCode(EmaiPop3MessageInfoMarkMessageReceived(mObject,
00476 inMessageIndex, inOptions));
00477 }
00478
00479 inline void
00480 MessageInfoList::GetMessageInfoListData(
00481 const void** outData,
00482 EmaiUint32& outDataSize,
00483 EmaiOptions inOptions
00484 )
00485 {
00486 CheckErrorCode(EmaiPop3MessageInfoListGetHistoryData(mObject,
00487 outData, outDataSize, inOptions));
00488 }
00489
00490 inline void
00491 MessageInfoList::ResetInfoList(
00492 EmaiConstUniCharPtr inAccount,
00493 EmaiConstUniCharPtr inServer,
00494 EmaiOptions inOptions
00495 )
00496 {
00497 CheckErrorCode(EmaiPop3MessageInfoListResetHistory(mObject,
00498 inAccount, inServer, inOptions));
00499 }
00500
00501
00502
00503 inline
00504 Pop3Session::Pop3Session(
00505 Pop3StatusCallback& inStatusCallback,
00506 EmaiUint32 inTimeout,
00507 EmaiOptions inOptions
00508 )
00509 {
00510 CheckErrorCode(EmaiPop3SessionCreate(&mObject,
00511 &Pop3StatusCallback::StatusCallback, &inStatusCallback,
00512 inTimeout, inOptions));
00513 }
00514
00515 inline
00516 Pop3Session::Pop3Session(
00517 EmaiPop3StatusCallback inStatusCallback,
00518 void* inUserData,
00519 EmaiUint32 inTimeout,
00520 EmaiOptions inOptions
00521 )
00522 {
00523 CheckErrorCode(EmaiPop3SessionCreate(&mObject,
00524 inStatusCallback, inUserData,
00525 inTimeout, inOptions));
00526 }
00527
00528 inline
00529 Pop3Session::Pop3Session(
00530 const Pop3Session& inCopy
00531 ):
00532 Parent(inCopy)
00533 {
00534 }
00535
00536 inline
00537 Pop3Session::Pop3Session(
00538 EmaiPop3Session inSession,
00539 bool inAddRef
00540 ):
00541 Parent(inSession, inAddRef)
00542 {
00543 }
00544
00545 inline
00546 Pop3Session::~Pop3Session()
00547 {
00548 }
00549
00550 inline void
00551 Pop3Session::Connect(
00552 EmaiConstUniCharPtr inMailServer,
00553 short inPort ,
00554 EmaiOptions inOptions
00555 )
00556 {
00557 CheckErrorCode(EmaiPop3Connect(mObject, inMailServer, inPort, inOptions));
00558 }
00559
00560 inline void
00561 Pop3Session::ConnectEx(
00562 EmaiConstUniCharPtr inMailServer,
00563 short inPort ,
00564 const EmaiProxyInfo* inProxyInfo ,
00565 void* inUserData,
00566 EmaiOptions inOptions
00567 )
00568 {
00569 CheckErrorCode(EmaiPop3ConnectEx(mObject, inMailServer, inPort, inProxyInfo, inUserData, inOptions));
00570 }
00571
00572 inline void
00573 Pop3Session::Disconnect(
00574 EmaiOptions inOptions
00575 )
00576 {
00577 CheckErrorCode(EmaiPop3Disconnect(mObject, inOptions));
00578 }
00579
00580 inline void
00581 Pop3Session::Authenticate(
00582 EmaiConstUniCharPtr inAccount,
00583 EmaiConstUniCharPtr inPassword,
00584 EmaiOptions inOptions
00585 )
00586 {
00587 CheckErrorCode(EmaiPop3Authenticate(mObject, inAccount,
00588 inPassword, inOptions));
00589 }
00590
00591 inline void
00592 Pop3Session::RetrieveMessageList(
00593 MessageInfoList& inMessageInfoList,
00594 EmaiOptions inOptions
00595 )
00596 {
00597 CheckErrorCode(EmaiPop3RetrieveMessageList(mObject, inMessageInfoList,
00598 inOptions));
00599 }
00600
00601 inline Message
00602 Pop3Session::RetrieveMessage(
00603 EmaiUint32 inMessageNumber,
00604 EmaiOptions inOptions
00605 )
00606 {
00607 EmaiMessage message = NULL;
00608 CheckErrorCode(EmaiPop3RetrieveMessage(mObject, &message,
00609 inMessageNumber, inOptions));
00610 return Message(message, false);
00611 }
00612
00613 inline void
00614 Pop3Session::DeleteMessage(
00615 EmaiUint32 inMessageNumber,
00616 EmaiOptions inOptions
00617 )
00618 {
00619 CheckErrorCode(EmaiPop3DeleteMessage(mObject, inMessageNumber, inOptions));
00620 }
00621
00622 inline void
00623 Pop3Session::Reset(
00624 EmaiOptions inOptions
00625 )
00626 {
00627 CheckErrorCode(EmaiPop3Reset(mObject, inOptions));
00628 }
00629
00630 inline void
00631 Pop3Session::Cancel(
00632 EmaiOptions inOptions
00633 )
00634 {
00635 CheckErrorCode(EmaiPop3Cancel(mObject, inOptions));
00636 }
00637
00638 inline void
00639 Pop3Session::Noop(
00640 EmaiOptions inOptions
00641 )
00642 {
00643 CheckErrorCode(EmaiPop3Noop(mObject, inOptions));
00644 }
00645
00646
00647 }
00648
00649
00650 #endif