Dacons LLP Mailit for C/C++ Version 1.0.8

EmaiIMAP.h

Go to the documentation of this file.
00001 
00014 #ifndef __EMAIIMAP_H__
00015 #define __EMAIIMAP_H__
00016 
00017 #include <EmaiTypes.h>
00018 #include <EmaiErrors.h>
00019 #include <EmaiMessage.h>
00020 #include <EmaiProxy.h>
00021 
00022 #ifdef __cplusplus
00023     extern "C" {
00024 #endif
00025 
00026 typedef struct EmaiOpaqueImapSession*           EmaiImapSession;
00027 
00028 
00029 /*
00030 RFC 5301 page 90: sequence-ser, seq-range, seq-number
00031 */
00032 typedef struct EmaiOpaqueImapSequenceSet*       EmaiImapSequenceSet;
00033 
00034 /***************************************************
00035 //
00036 // This section declares the message sequence management
00037 // functionality, which is used with the following IMAP command:
00038 // COPY, FETCH, STORE, UID COPY, UID FETCH, and UID STORE.
00039 //
00040 ***************************************************/
00041 
00050 EMAIAPI(EmaiError)
00051 EmaiImapSequenceSetCreate(
00052         EmaiImapSequenceSet* outSequenceSet,
00053         EmaiOptions inOptions);
00054 
00064 EMAIAPI(EmaiError)
00065 EmaiImapSequenceSetAddNumber(
00066         EmaiImapSequenceSet inSequenceSet,
00067         EmaiUint32 inNumber,
00068         EmaiOptions inOptions);
00069 
00079 EMAIAPI(EmaiError)
00080 EmaiImapSequenceSetRemoveNumber(
00081         EmaiImapSequenceSet inSequenceSet,
00082         EmaiUint32 inNumber,
00083         EmaiOptions inOptions);
00084 
00094 enum
00095 {
00096     EmaiImapMaxSequenceSetNumber        = 0
00097 };
00098 
00109 EMAIAPI(EmaiError)
00110 EmaiImapSequenceSetAddRange(
00111         EmaiImapSequenceSet inSequenceSet,
00112         EmaiUint32 inMinNumber,
00113         EmaiUint32 inMaxNumber,
00114         EmaiOptions inOptions);
00115 
00126 EMAIAPI(EmaiError)
00127 EmaiImapSequenceSetRemoveRange(
00128         EmaiImapSequenceSet inSequenceSet,
00129         EmaiUint32 inMinNumber,
00130         EmaiUint32 inMaxNumber,
00131         EmaiOptions inOptions);
00132 
00142 EMAIAPI(EmaiError)
00143 EmaiImapSequenceSetAddSequenceSet(
00144         EmaiImapSequenceSet inSequenceSet,
00145         EmaiImapSequenceSet inSequenceSetToAdd,
00146         EmaiOptions inOptions);
00147 
00158 EMAIAPI(EmaiError)
00159 EmaiImapSequenceSetRemoveSequenceSet(
00160         EmaiImapSequenceSet inSequenceSet,
00161         EmaiImapSequenceSet inSequenceSetToRemove,
00162         EmaiOptions inOptions);
00163 
00173 EMAIAPI(EmaiError)
00174 EmaiImapSequenceSetGetCount(
00175         EmaiImapSequenceSet inSequenceSet,
00176         EmaiUint32* outCount,
00177         EmaiOptions inOptions);
00178 
00194 EMAIAPI(EmaiError)
00195 EmaiImapSequenceSetGetBounds(
00196         EmaiImapSequenceSet inSequenceSet,
00197         EmaiUint32* outFirstNumber,     /*can be NULL*/
00198         EmaiUint32* outLastNumber,      /*can be NULL*/
00199         EmaiOptions inOptions);
00200 
00201 
00207 enum EmaiEnumImapSequenceSetGetNextNumberOptions
00208 {
00209     EmaiImapForward             = 0,
00210     EmaiImapBackward            = 1
00211 };
00212 
00259 EMAIAPI(EmaiError)
00260 EmaiImapSequenceSetGetNextNumber(
00261         EmaiImapSequenceSet inSequenceSet,
00262         EmaiUint32 inNumber,
00263         EmaiUint32* outNextNumber,
00264         EmaiOptions inOptions);
00265 
00277 EMAIAPI(EmaiError)
00278 EmaiImapSequenceContainsNumber(
00279         EmaiImapSequenceSet inSequenceSet,
00280         EmaiUint32 inNumber,
00281         EmaiOptions inOptions);
00282 
00283 
00284 
00285 /***************************************************
00286 //
00287 // IMAP server response structures: status responses
00288 //
00289 ***************************************************/
00290 
00307 typedef struct
00308 {
00311     EmaiUint32                  flags;
00312 
00315     EmaiStringList              customFlags;
00316 } EmaiFlags;
00317 
00323 typedef struct
00324 {
00326     EmaiUint32                  uidValidity;
00327 
00330     EmaiImapSequenceSet         sourceSequenceSet;
00331 
00333     EmaiImapSequenceSet         destSequenceSet;
00334 } EmaiUidPlus;
00335 
00336 
00349 enum EmaiEnumImapStatusResponseFlags
00350 {
00351     EmaiAnsweredFlag            = 0x01,
00354     EmaiFlaggedFlag             = 0x02,
00357     EmaiDeletedFlag             = 0x04,
00360     EmaiSeenFlag                = 0x08,
00363     EmaiDraftFlag               = 0x10,
00366     EmaiAllowKeywordsFlag       = 0x20,
00372     EmaiRecentFlag              = 0x20
00380 };
00381 
00390 enum EmaiEnumImapStatusResponseCodes
00391 {
00392     /* code is absent in the response text */
00393     EmaiNoCode,                                 
00394     /* code is not recognized by library, check codeText value */
00395     EmaiXUserDefinedCode,                       
00397     /*Refer to chapter 77.1 of the RFC 3501 for more information regarding
00398     response codes*/
00399     EmaiAlertCode,                              
00400     EmaiBadCharsetCode,                         
00401     EmaiCapabilityCode,                         
00402     EmaiParseCode,                              
00403     EmaiPermanentFlagsCode,                     
00404     EmaiReadOnlyCode,                           
00405     EmaiReadWriteCode,                          
00406     EmaiTryCreateCode,                          
00407     EmaiUIDNextCode,                            
00408     EmaiUIDValidityCode,                        
00409     EmaiUnseenCode,                             
00410     EmaiAppendUIDCode,                          
00411     EmaiCopyUIDCode                             
00412 };
00413 
00422 typedef struct
00423 {
00425     EmaiUint32                  code;
00426 
00428     EmaiConstUniCharPtr         codeText;
00429     
00431     union
00432     {
00433         EmaiConstUniCharPtr     text;
00434         EmaiUint32              number;
00435         EmaiUidPlus             uidPlus;
00436         EmaiFlags               permanentFlags;
00437         EmaiStringList          list;
00438     }                           param;
00439 
00440     /* Text which follows optional response code.*/
00441     EmaiConstUniCharPtr         text;
00442 } EmaiResponseText;
00443 
00444 
00451 enum EmaiEnumImapStatusResponseTypes
00452 {
00453     EmaiImapOkResponse,                     
00454     EmaiImapNoResponse,                     
00455     EmaiImapBadResponse,                    
00456     EmaiImapPreauthResponse,                
00457     EmaiImapByeResponse,                    
00459     EmaiTaggedStatusResponse    = 0x80000000,
00462     EmaiImapTaggedOkResponse    = EmaiTaggedStatusResponse | EmaiImapOkResponse
00464 };
00465 
00475 typedef struct
00476 {
00478     EmaiUint32                  responseType;
00479 
00481     EmaiResponseText            responseText;
00482 } EmaiStatusResponse;
00483 
00484 
00485 /***************************************************
00486 //
00487 // IMAP server response structures: server and mailbox status
00488 //
00489 ***************************************************/
00490 
00498 typedef struct
00499 {
00500     EmaiStringList              capabilities;
00501 } EmaiCapabilityResponse;
00502 
00545 enum EmaiEnumImapMailboxAttributes
00546 {
00547     EmaiNoAttributes                = 0x0000,   
00549     /*The following three flags are exclusive*/
00550     EmaiNoselectAttribute           = 0x0001,   
00551     EmaiMarkedAttribute             = 0x0002,   
00552     EmaiUnmarkedAttribute           = 0x0003,   
00553     EmaiStandardAttibutesMask       = 0x0003,
00554 
00555     EmaiNoinferiorsAttribute        = 0x0010,   
00557     /*CHILDREN extension according to RFC3348*/
00558     /*The following two flags are exclusive*/
00559     EmaiHasChildren                 = 0x0100,
00560     EmaiHasNoChildren               = 0x0200,
00561     EmaiChildrenAttibutesMask       = 0x0300
00562 };
00563 
00581 typedef struct
00582 {
00584     EmaiUint32                  attributes;
00585 
00587     EmaiStringList              customAttributes;
00588 
00590     EmaiChar                    delimiter;
00591 
00593     EmaiConstUniCharPtr         mailboxName;
00594 } EmaiListResponse;
00595 
00596 typedef EmaiListResponse        EmaiLsubResponse;
00597 
00603 enum EmaiEnumImapUndefinedStatus
00604 {
00605     EmaiUndefinedStatus         = 0xFFFFFFFF    
00606 };
00607 
00617 typedef struct
00618 {
00619     EmaiConstUniCharPtr         mailboxName;
00620     
00628     EmaiUint32                  messages;
00629 
00631     EmaiUint32                  recent;
00632 
00634     EmaiUint32                  uidNext;
00635 
00637     EmaiUint32                  uidValidity;
00638 
00640     EmaiUint32                  unseen;
00641 } EmaiMailboxStatusResponse;
00642 
00652 typedef struct
00653 {
00655     EmaiImapSequenceSet         messages;
00656 } EmaiSearchResponse;
00657 
00670 typedef EmaiFlags               EmaiFlagsResponse;
00671 
00672 
00673 /***************************************************
00674 //
00675 // IMAP server response structures: mailbox content
00676 //
00677 ***************************************************/
00678 
00685 typedef struct
00686 {
00689     EmaiUint32                  number;
00690 } EmaiNumberResponse;
00691 
00705 typedef EmaiNumberResponse              EmaiExistsResponse;
00706 
00734 typedef EmaiNumberResponse              EmaiRecentResponse;
00735 
00736 
00737 /***************************************************
00738 //
00739 // IMAP server response structures: message status
00740 //
00741 ***************************************************/
00742 
00783 typedef EmaiNumberResponse              EmaiExpungeResponse;
00784 
00790 enum EmaiEnumImapUndefinedOriginValue
00791 {
00792     EmaiUndefinedOriginValue            = 0xFFFFFFFF
00793 };
00794 
00810 typedef struct
00811 {
00813     EmaiConstUniCharPtr         section;
00814 
00816     EmaiUint32                  dataOrigin;
00817 
00818 
00820     EmaiConstCharPtr            data;
00821 
00823     EmaiUint32                  dataLength;
00824 } EmaiBodySectionData;
00825 
00834 typedef struct
00835 {
00837     EmaiConstCharPtr            data;
00838 
00840     EmaiUint32                  dataLength;
00841 } EmaiRFC822Data;
00842 
00852 typedef struct
00853 {
00854     EmaiConstUniCharPtr         date;
00855     EmaiConstUniCharPtr         subject;
00856 
00857     EmaiContactList             from;
00858     EmaiContactList             sender;
00859     EmaiContactList             replyTo;
00860     EmaiContactList             to;
00861     EmaiContactList             cc;
00862     EmaiContactList             bcc;
00863     EmaiConstUniCharPtr         inReplyTo;
00864     
00865     EmaiConstUniCharPtr         messageID;
00866     
00867 } EmaiFetchEnvelopeData;
00868 
00869 
00875 enum EmaiEnumBodyType
00876 {
00877     EmaiMultipartBody,
00878     EmaiBasicBody,
00879     EmaiMessageBody,
00880     EmaiTextBody
00881 };
00882 
00888 typedef struct EmaiBodyStructure
00889 {
00892     EmaiUint32                  bodyType;
00893 
00896     EmaiContentField            contentType;
00897 
00899     EmaiContentField            contentDisposition;
00900 
00902     EmaiStringList              languages;
00903 
00905     EmaiConstCharPtr            locationURI;
00906 
00909     EmaiConstCharPtr            contentMD5;
00910 
00913     EmaiUint32                  size;
00914     EmaiConstUniCharPtr         contentID;
00915     EmaiConstUniCharPtr         contentDescription;
00916     EmaiConstUniCharPtr         contentTransferEncoding;
00917 
00918     union
00919     {
00920         struct
00921         {
00922             EmaiUint32              subPartCount;
00924             const struct EmaiBodyStructure**
00925                                     subParts;
00926         }                       multipart;
00927 
00928         struct
00929         {
00930             /*no additional data*/
00931         }                       basic;
00932         
00933         struct
00934         {
00935             EmaiUint32              lines;
00936         }                       text;
00937         
00938         struct
00939         {
00940             EmaiFetchEnvelopeData   envelope;
00941             EmaiUint32              lines;
00942             const struct EmaiBodyStructure*
00943                                     body;
00944         }                       message;
00945         
00946     } data;
00947     
00948 } EmaiBodyStructure;
00949 
00956 typedef struct
00957 {
00959     EmaiUint32                  messageNumber;
00960 
00962     EmaiFlags                   flags;
00963     
00965     EmaiFetchEnvelopeData       envelope;
00966     
00968     EmaiConstUniCharPtr         internalDate;
00969     
00971     EmaiUint32                  uid;
00972 
00974     EmaiUint32                  rfc822Size;
00975     
00977     EmaiRFC822Data              rfc822;
00979     EmaiRFC822Data              rfc822Header;
00981     EmaiRFC822Data              rfc822Text;
00982     
00984     struct
00985     {
00986         EmaiUint32                  count;
00988         const EmaiBodySectionData*  data;
00989     }                           sections;
00990     
00992     const EmaiBodyStructure*    body;
00993     
00995     const EmaiBodyStructure*    bodyStructure;
00996 
00997 } EmaiFetchResponse;
00998 
00999 
01000 /***************************************************
01001 //
01002 // IMAP server response structures: continue request
01003 //
01004 ***************************************************/
01005 
01011 typedef struct
01012 {
01014     EmaiResponseText            responseText;
01015 } EmaiContinueRequestResponse;
01016 
01017 /***************************************************
01018 //
01019 // IMAP server response structures: response data
01020 //
01021 ***************************************************/
01022 
01031 enum EmaiEnumImapServerResponses
01032 {
01033     EmaiUnrecognizedResponseType,               
01034     EmaiStatusResponseType,                     
01035     EmaiCapabilityResponseType,                 
01036     EmaiListResponseType,                       
01037     EmaiLsubResponseType,                       
01038     EmaiMailboxStatusResponseType,              
01039     EmaiSearchResponseType,                     
01040     EmaiFlagsResponseType,                      
01041     EmaiExistsResponseType,                     
01042     EmaiRecentResponseType,                     
01043     EmaiExpungeResponseType,                    
01044     EmaiFetchResponseType,                      
01045     EmaiContinueRequestResponseType             
01046 };
01047 
01054 typedef struct
01055 {
01058     EmaiUint32                  version;
01059 
01061     EmaiConstCharPtr            response;
01063     EmaiUint32                  responseSize;
01065     EmaiUint32                  responseType;
01066     
01068     union
01069     {
01070         EmaiStatusResponse          status;
01071         EmaiCapabilityResponse      capability;
01072         EmaiListResponse            list;
01073         EmaiLsubResponse            lsub;
01074         EmaiMailboxStatusResponse   mailboxStatus;
01075         EmaiSearchResponse          search;
01076         EmaiFlagsResponse           flags;
01077         EmaiExistsResponse          exists;
01078         EmaiRecentResponse          recent;
01079         EmaiExpungeResponse         expunge;
01080         EmaiFetchResponse           fetch;
01081         EmaiContinueRequestResponse continueRequest;
01082     }                           data;
01083 } EmaiResponse;
01084 
01085 
01086 /***************************************************
01087 //
01088 // Function for communicating with IMAP server
01089 //
01090 ***************************************************/
01091 
01097 enum EmaiEnumImapCallbackData
01098 {
01099     EmaiImapSelectorNormal                      = 0,
01100     EmaiImapSelectorSending,
01101     EmaiImapSelectorReceiving,
01102     EmaiImapSelectorServerError,
01103 };
01104 
01110 enum EmaiEnumImapOperationCode
01111 {
01112     EmaiImapConnectingToServer      = 0,
01113     EmaiImapConnectedToServer,
01114     EmaiImapAuthenticating,
01115     EmaiImapAuthenticated,
01116     EmaiImapCreatingMailbox,
01117     EmaiImapMailboxCreated,
01118     EmaiImapDeletingMailbox,
01119     EmaiImapMailboxDeleted,
01120     EmaiImapSubsribingMailbox,
01121     EmaiImapMailboxSubscribed,
01122     EmaiImapUnSubsribingMailbox,
01123     EmaiImapMailboxUnSubscribed,
01124     EmaiImapRenamingMailbox,
01125     EmaiImapMailboxRenamed,
01126     EmaiImapRetrievingMailboxList,
01127     EmaiImapMailboxListRetrieved,
01128     EmaiImapExaminingMailbox,
01129     EmaiImapMailboxExamined,
01130     EmaiImapRetrievingMailboxStatus,
01131     EmaiImapMailboxStatusRetrieved,
01132     EmaiImapSelectingMailbox,
01133     EmaiImapMailboxSelected,
01134     EmaiImapClosingMailbox,
01135     EmaiImapMailboxClosed,
01136     EmaiImapChecking,
01137     EmaiImapChecked,
01138     EmaiImapAppendingMessage,
01139     EmaiImapMessageAppended,
01140     EmaiImapSearchingMessages,
01141     EmaiImapMessageSearchFinished,
01142     EmaiImapFetchingMessages,
01143     EmaiImapMessagesFetched,
01144     EmaiImapCopyingMessages,
01145     EmaiImapMessagesCopied,
01146     EmaiImapStoringMessagesData,
01147     EmaiImapMessagesDataStored,
01148     EmaiImapExpungingMessages,
01149     EmaiImapMessagesExpunged,
01150     EmaiImapSendingNOOP,
01151     EmaiImapNOOPSent,
01152     EmaiImapClosingConnection,
01153     EmaiImapConnectionClosed
01154 };
01155 
01156 
01162 typedef struct
01163 {
01166     EmaiUint32                  version;
01167 
01168     EmaiUint32                  selector;
01169     union
01170     {
01172         struct
01173         {
01174             EmaiUint32          operationCode;
01175         } normal;
01176 
01178         struct
01179         {
01180             EmaiUint32          sentSize;
01181             EmaiUint32          totalSize;
01182         } sending;
01183 
01185         struct
01186         {
01187             EmaiUint32          receivedSize;
01188             EmaiUint32          totalSize;
01189         } receiving;
01190 
01192         struct
01193         {
01194             EmaiConstCharPtr    serverReply;
01195             EmaiUint32          replyCode;
01196         } serverError;
01197     } data;
01198 } EmaiImapCallbackData;
01199 
01203 typedef EMAICALLBACKAPI(EmaiError, EmaiImapStatusCallback)(
01204         EmaiImapSession inSession,
01205         const EmaiImapCallbackData* inData,
01206         void* inUserData);
01207 
01213 typedef struct
01214 {
01217     EmaiUint32                  version;
01218 
01223     EmaiConstUniCharPtr         sourceMailboxName;
01224 
01227     EmaiConstUniCharPtr         destMailboxName;
01228 
01230     EmaiUint32                  appendedMessageCount;
01231 
01234     const EmaiMessage*          appendedMessages;
01235     
01236 } EmaiImapCommandData;
01237 
01253 typedef EMAICALLBACKAPI(void, EmaiImapResponseCallback)(
01254         EmaiImapSession inSession,
01255         const EmaiImapCommandData* inCommandData,
01256         const EmaiResponse* inResponse,
01257         void* inUserData);
01258 
01259 
01265 enum EmaiEnumImapUseSSLOption
01266 {
01268     EmaiImapUseSSLOption                    = 0x01
01269 };
01270 
01287 EMAIAPI(EmaiError)
01288 EmaiImapSessionCreate(
01289         EmaiImapSession* outSession,
01290         EmaiImapResponseCallback inResponseCallback,
01291         void* inResponseUserData,
01292         EmaiImapStatusCallback inStatusCallback,        /*can be NULL*/
01293         void* inStatusUserData,
01294         EmaiUint32 inTimeout,
01295         EmaiOptions inOptions);
01296 
01297 
01304 enum EmaiEnumImapPorts
01305 {
01306     EmaiDefaultImapPort                 = 143,
01307     EmaiDefaultImapSSLPort              = 993
01308 };
01309 
01325 EMAIAPI(EmaiError)
01326 EmaiImapConnect(
01327         EmaiImapSession inSession,
01328         EmaiConstUniCharPtr inMailServer,
01329         short inPort,
01330         EmaiOptions inOptions);
01331 
01349 EMAIAPI(EmaiError)
01350 EmaiImapConnectEx(
01351         EmaiImapSession inSession,
01352         EmaiConstUniCharPtr inMailServer,
01353         short inPort,
01354         const EmaiProxyInfo* inProxyInfo,
01355         void* inUserData,
01356         EmaiOptions inOptions);
01357 
01368 EMAIAPI(EmaiError)
01369 EmaiImapDisconnect(
01370         EmaiImapSession inSession,
01371         EmaiOptions inOptions);
01372 
01386 EMAIAPI(EmaiError)
01387 EmaiImapNoop(
01388         EmaiImapSession inSession,
01389         EmaiOptions inOptions);
01390 
01401 EMAIAPI(EmaiError)
01402 EmaiImapCancel(
01403         EmaiImapSession inSession,
01404         EmaiOptions inOptions);
01405 
01412 enum EmaiEnumImapAuthModes
01413 {
01415     EmaiIMAPAuthAutomatic,
01416     
01418     EmaiIMAPAuthLogin,
01419 
01421     EmaiIMAPAuthPlain,
01422     
01424     EmaiIMAPAuthCramMD5,
01425     
01427     EmaiIMAPAuthNTLM,
01428     
01430     EmaiIMAPAuthLoginCommand
01431 };
01432 
01450 EMAIAPI(EmaiError)
01451 EmaiImapAuthenticate(
01452         EmaiImapSession inSession,
01453         EmaiConstUniCharPtr inAccount,
01454         EmaiConstUniCharPtr inPassword,
01455         EmaiOptions inOptions);
01456 
01477 EMAIAPI(EmaiError)
01478 EmaiImapSelectMailbox(
01479         EmaiImapSession inSession,
01480         EmaiConstUniCharPtr inMailbox,
01481         EmaiOptions inOptions);
01482 
01500 EMAIAPI(EmaiError)
01501 EmaiImapExamineMailbox(
01502         EmaiImapSession inSession,
01503         EmaiConstUniCharPtr inMailbox,
01504         EmaiOptions inOptions);
01505 
01523 EMAIAPI(EmaiError)
01524 EmaiImapCreateMailbox(
01525         EmaiImapSession inSession,
01526         EmaiConstUniCharPtr inMailbox,
01527         EmaiOptions inOptions);
01528 
01545 EMAIAPI(EmaiError)
01546 EmaiImapDeleteMailbox(
01547         EmaiImapSession inSession,
01548         EmaiConstUniCharPtr inMailbox,
01549         EmaiOptions inOptions);
01550 
01575 EMAIAPI(EmaiError)
01576 EmaiImapRenameMailbox(
01577         EmaiImapSession inSession,
01578         EmaiConstUniCharPtr inMailbox,
01579         EmaiConstUniCharPtr inNewMailboxName,
01580         EmaiOptions inOptions);
01581 
01598 EMAIAPI(EmaiError)
01599 EmaiImapSubscribeMailbox(
01600         EmaiImapSession inSession,
01601         EmaiConstUniCharPtr inMailbox,
01602         EmaiOptions inOptions);
01603 
01620 EMAIAPI(EmaiError)
01621 EmaiImapUnsubscribeMailbox(
01622         EmaiImapSession inSession,
01623         EmaiConstUniCharPtr inMailbox,
01624         EmaiOptions inOptions);
01625 
01648 EMAIAPI(EmaiError)
01649 EmaiImapListMailboxes(
01650         EmaiImapSession inSession,
01651         EmaiConstUniCharPtr inReferenceName,
01652         EmaiConstUniCharPtr inWildcardedMailboxName,
01653         EmaiOptions inOptions);
01654 
01672 EMAIAPI(EmaiError)
01673 EmaiImapListSubscribedMailboxes(
01674         EmaiImapSession inSession,
01675         EmaiConstUniCharPtr inReferenceName,
01676         EmaiConstUniCharPtr inWildcardedMailboxName,
01677         EmaiOptions inOptions);
01678 
01686 enum EmaiEnumImapMailboxStatus
01687 {
01688     /* The number of messages in the mailbox*/
01689     EmaiMessagesNumber                      = 0x01,
01690     /* The number of messages with the \\Recent flag set*/
01691     EmaiRecentMessages                      = 0x02,
01692     /* The next unique identifier value of the mailbox*/
01693     EmaiUidNext                             = 0x04,
01694     /* The unique identifier validity value of the mailbox*/
01695     EmaiUidValidity                         = 0x08,
01696     /* The number of messages which do not have the \\Seen flag set*/
01697     EmaiUnseenMessages                      = 0x10,
01698     
01699     EmaiAllStatusData                       = EmaiMessagesNumber | EmaiRecentMessages |
01700                                     EmaiUidNext | EmaiUidValidity | EmaiUnseenMessages
01701 };
01702 
01725 EMAIAPI(EmaiError)
01726 EmaiImapMailboxStatus(
01727         EmaiImapSession inSession,
01728         EmaiConstUniCharPtr inMailbox,
01729         EmaiOptions inOptions);
01730 
01757 EMAIAPI(EmaiError)
01758 EmaiImapAppendMessage(
01759         EmaiImapSession inSession,
01760         EmaiConstUniCharPtr inMailbox,
01761         const EmaiFlags* inMessageFlags,    /*can be NULL*/
01762         EmaiConstUniCharPtr inDateTime,     /*can be NULL*/
01763         EmaiMessage inMessage,
01764         EmaiOptions inOptions);
01765 
01785 EMAIAPI(EmaiError)
01786 EmaiImapCheck(
01787         EmaiImapSession inSession,
01788         EmaiOptions inOptions);
01789 
01804 EMAIAPI(EmaiError)
01805 EmaiImapCloseMailbox(
01806         EmaiImapSession inSession,
01807         EmaiOptions inOptions);
01808 
01815 enum EmaiEnumImapExpungeOptions
01816 {
01821     EmaiImapNoCustomExpungeOption                   = 0x01,
01822 };
01823 
01862 EMAIAPI(EmaiError)
01863 EmaiImapExpunge(
01864         EmaiImapSession inSession,
01865         EmaiImapSequenceSet inMessageUIDSequence,   /*can be NULL*/
01866         EmaiOptions inOptions);
01867 
01880 enum EmaiEnumImapUIDOptions
01881 {
01885     EmaiImapUIDOption                   = 0x01,
01886 };
01887 
01896 enum EmaiEnumImapSearchOptions
01897 {
01899     EmaiSearchAll,
01900     EmaiSearchAnswered,
01901     EmaiSearchDeleted,
01902     EmaiSearchDraft,
01903     EmaiSearchFlagged,
01904     EmaiSearchNew,
01905     EmaiSearchOld,
01906     EmaiSearchRecent,
01907     EmaiSearchSeen,
01908     EmaiSearchUnanswered,
01909     EmaiSearchUndeleted,
01910     EmaiSearchUndraft,
01911     EmaiSearchUnflagged,
01912     EmaiSearchUnseen,
01913 
01915     EmaiSearchMessageSequence,
01916     EmaiSearchUid,
01917 
01919     EmaiSearchBefore,
01920     EmaiSearchOn,
01921     EmaiSearchSince,
01922     EmaiSearchSentBefore,
01923     EmaiSearchSentOn,
01924     EmaiSearchSentSince,
01925 
01927     EmaiSearchBcc,
01928     EmaiSearchBody,
01929     EmaiSearchCc,
01930     EmaiSearchTo,
01931     EmaiSearchFrom,
01932     EmaiSearchKeyword,
01933     EmaiSearchSubject,
01934     EmaiSearchText,
01935     EmaiSearchUnkeyword,
01936 
01938     EmaiSearchHeader,
01939 
01941     EmaiSearchLarger,
01942     EmaiSearchSmaller,
01943 
01945     EmaiSearchNot,
01946 
01948     EmaiSearchOr,
01949 
01951     EmaiSearchKeyList
01952 };
01953 
01961 typedef struct EmaiSearchingKey
01962 {
01964     EmaiUint32                  selector;
01965     union
01966     {
01967         EmaiConstUniCharPtr     searchingString;
01968 
01969         EmaiImapSequenceSet     messageSequence;
01970 
01971         EmaiConstUniCharPtr     dateString;
01972 
01973         struct
01974         {
01975             EmaiConstUniCharPtr name;
01976             EmaiConstUniCharPtr searchingString;
01977         } headerField;
01978         
01979         EmaiUint32              number;
01980         
01982         const struct EmaiSearchingKey*  searchingKey;
01983         
01985         const struct EmaiSearchingKey*  searchingKeys;
01986 
01987         struct
01988         {
01989             EmaiUint32              count;
01991             const struct EmaiSearchingKey*  searchingKeys;
01992         } keyList;
01993     } param;
01994 } EmaiSearchingKey;
01995 
02002 enum EmaiEnumImapSearching
02003 {
02004     EmaiSearchingCriteriaType,
02005     EmaiSearchingKeysType
02006 };
02007 
02016 typedef struct
02017 {
02020     EmaiUint32                  version;
02021 
02024     EmaiUint32                  characterSet;
02025 
02029     EmaiUint32                  selector;       
02030     
02031     union
02032     {
02033         /*selector == EmaiSearchingCriteriaType*/
02034         EmaiConstUniCharPtr     searchingCriteria;
02035 
02036         /*selector == EmaiSearchingKeysType*/
02037         struct
02038         {
02039             EmaiUint32                  count;
02041             const EmaiSearchingKey*     keys;
02042         }                       searchingKeys;
02043     } data;
02044 } EmaiSearchingCriteria;
02045 
02070 EMAIAPI(EmaiError)
02071 EmaiImapSearch(
02072         EmaiImapSession inSession,
02073         const EmaiSearchingCriteria* inSearchingCriteria,/*can be NULL*/
02074         EmaiOptions inOptions);
02075 
02084 enum EmaiEnumImapFetchAttribute
02085 {
02087     EmaiFetchEnvelope,
02088     EmaiFetchFlags,
02089     EmaiFetchInternalDate,
02090     EmaiFetchRFC822,
02091     EmaiFetchRFC822Header,
02092     EmaiFetchRFC822Size,
02093     EmaiFetchRFC822Text,
02094     EmaiFetchBody,
02095     EmaiFetchBodyStructure,
02096     EmaiFetchUid,
02097 
02099     EmaiFetchBodySection,
02100 
02102     EmaiFetchBodyPeek
02103 };
02104 
02110 typedef struct
02111 {
02113     EmaiUint32                  selector;
02114     union
02115     {
02122         struct
02123         {
02125             EmaiConstUniCharPtr section;
02127             EmaiConstUniCharPtr partial;
02128         } data;
02129     } param;
02130 } EmaiFetchMessageAttribute;
02131 
02140 enum EmaiEnumImapDataFetchOptions
02141 {
02143     EmaiDataFetchAll,
02144 
02146     EmaiDataFetchFull,
02147 
02149     EmaiDataFetchFast,
02150 
02152     EmaiDataFetchAttr,
02153 
02155     EmaiDataFetchString
02156 };
02157 
02165 typedef struct
02166 {
02169     EmaiUint32                  version;
02170 
02172     EmaiUint32                  selector;
02173     union
02174     {
02175         struct
02176         {
02177             EmaiUint32                  attributeCount;
02178             const EmaiFetchMessageAttribute*
02179                                         attributes;
02180         }                       attr;
02181         
02182         EmaiConstUniCharPtr     data;
02183     } param;
02184 } EmaiFetchMessageData;
02185 
02205 EMAIAPI(EmaiError)
02206 EmaiImapFetch(
02207         EmaiImapSession inSession,
02208         EmaiImapSequenceSet inMessageSequence,
02209         const EmaiFetchMessageData* inMessageData,
02210         EmaiOptions inOptions);
02211 
02218 enum EmaiEnumImapStoreOptions
02219 {
02221     EmaiStoreSetFlags,
02222     EmaiStoreAddFlags,
02223     EmaiStoreRemoveFlags,
02224     
02225     EmaiStoreSilent             = 0x10
02226 };
02227 
02237 enum EmaiEnumImapDataStoreOptions
02238 {
02240     EmaiDataStoreAttr,
02241 
02243     EmaiDataStoreString
02244 };
02245 
02253 typedef struct
02254 {
02257     EmaiUint32                  version;        
02258 
02260     EmaiUint32                  selector;
02261     union
02262     {
02263         struct
02264         {
02266             EmaiUint32                  options;
02267 
02269             EmaiFlags                   flags;
02270         }                       attr;
02271 
02273         EmaiConstUniCharPtr     data;
02274     } param;
02275 } EmaiStoreMessageData;
02276 
02295 EMAIAPI(EmaiError)
02296 EmaiImapStore(
02297         EmaiImapSession inSession,
02298         EmaiImapSequenceSet inMessageSequence,
02299         const EmaiStoreMessageData* inMessageData,
02300         EmaiOptions inOptions);
02301 
02329 EMAIAPI(EmaiError)
02330 EmaiImapCopy(
02331         EmaiImapSession inSession,
02332         EmaiImapSequenceSet inMessageSequence,
02333         EmaiConstUniCharPtr inMailbox,
02334         EmaiOptions inOptions);
02335 
02336 #ifdef __cplusplus
02337     }
02338 #endif
02339 
02340 #endif /*__EMAIIMAP_H__*/