Dacons LLP Mailit for C/C++ Version 1.0.8

EmaiPOP3.hpp

Go to the documentation of this file.
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 // Pop3StatusCallback class implemetation
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         //do not pass exceptions in library
00398         error = EmaiErrUnknown;
00399     }
00400     return error;
00401 }
00402 
00403 inline
00404 Pop3StatusCallback::~Pop3StatusCallback()
00405 {
00406 }
00407 
00408 /*
00409 // MessageInfoList class implemetation
00410 */
00411 inline
00412 MessageInfoList::MessageInfoList(
00413         EmaiConstUniCharPtr inFullFilePath,
00414         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiMessagesForDownload*/
00441     )
00442 {
00443     CheckErrorCode(EmaiPop3MessageInfoListEvaluateSubList(mObject,
00444                     inDays, inOptions));
00445 }
00446 
00447 inline EmaiUint32
00448 MessageInfoList::GetCount(
00449         EmaiOptions inOptions /*= EmaiMessagesForDownload*/
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 /*= EmaiMessagesForDownload*/
00463     )
00464 {
00465     CheckErrorCode(EmaiPop3MessageInfoListGetInfo(mObject,
00466                     inMessageIndex, &outInfo, inOptions));
00467 }
00468 
00469 inline void
00470 MessageInfoList::MarkMessageReceived(
00471         EmaiUint32 inMessageIndex,
00472         EmaiOptions inOptions /*= EmaiMessageIndexInList*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00495     )
00496 {
00497     CheckErrorCode(EmaiPop3MessageInfoListResetHistory(mObject,
00498                     inAccount, inServer, inOptions));
00499 }
00500 /*
00501 // Pop3Session class implemetation
00502 */
00503 inline
00504 Pop3Session::Pop3Session(
00505         Pop3StatusCallback& inStatusCallback,
00506         EmaiUint32 inTimeout,
00507         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiDefaultPop3Port*/,
00554         EmaiOptions inOptions /*= EmaiNullOptions*/
00555     )
00556 {
00557     CheckErrorCode(EmaiPop3Connect(mObject, inMailServer, inPort, inOptions));
00558 }
00559 
00560 inline void
00561 Pop3Session::ConnectEx(
00562         EmaiConstUniCharPtr inMailServer,
00563         short inPort /*= EmaiDefaultPop3Port*/,
00564         const EmaiProxyInfo* inProxyInfo /*= NULL*/,
00565         void* inUserData,
00566         EmaiOptions inOptions /*= EmaiNullOptions*/
00567     )
00568 {
00569     CheckErrorCode(EmaiPop3ConnectEx(mObject, inMailServer, inPort, inProxyInfo, inUserData, inOptions));
00570 }
00571 
00572 inline void
00573 Pop3Session::Disconnect(
00574         EmaiOptions inOptions /*= EmaiNullOptions*/
00575     )
00576 {
00577     CheckErrorCode(EmaiPop3Disconnect(mObject, inOptions));
00578 }
00579 
00580 inline void
00581 Pop3Session::Authenticate(
00582         EmaiConstUniCharPtr inAccount,
00583         EmaiConstUniCharPtr inPassword,
00584         EmaiOptions inOptions /*= EmaiPOP3AuthAutomatic*/
00585     )
00586 {
00587     CheckErrorCode(EmaiPop3Authenticate(mObject, inAccount,
00588                             inPassword, inOptions));
00589 }
00590 
00591 inline void
00592 Pop3Session::RetrieveMessageList(
00593         MessageInfoList& inMessageInfoList,
00594         EmaiOptions inOptions /*= EmaiNullOptions*/
00595     )
00596 {
00597     CheckErrorCode(EmaiPop3RetrieveMessageList(mObject, inMessageInfoList,
00598                             inOptions));
00599 }
00600 
00601 inline Message
00602 Pop3Session::RetrieveMessage(
00603         EmaiUint32 inMessageNumber,
00604         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00617     )
00618 {
00619     CheckErrorCode(EmaiPop3DeleteMessage(mObject, inMessageNumber, inOptions));
00620 }
00621 
00622 inline void
00623 Pop3Session::Reset(
00624         EmaiOptions inOptions /*= EmaiNullOptions*/
00625     )
00626 {
00627     CheckErrorCode(EmaiPop3Reset(mObject, inOptions));
00628 }
00629 
00630 inline void
00631 Pop3Session::Cancel(
00632         EmaiOptions inOptions /*= EmaiNullOptions*/
00633     )
00634 {
00635     CheckErrorCode(EmaiPop3Cancel(mObject, inOptions));
00636 }
00637 
00638 inline void
00639 Pop3Session::Noop(
00640         EmaiOptions inOptions /*= EmaiNullOptions*/
00641     )
00642 {
00643     CheckErrorCode(EmaiPop3Noop(mObject, inOptions));
00644 }
00645 
00646 
00647 }
00648 
00649 
00650 #endif /*__EMAIPOP3_HPP__*/