text: #ifndef MAILCORE_MCMESSAGECONSTANTS_H
  
  #define MAILCORE_MCMESSAGECONSTANTS_H
  
  #ifdef __cplusplus
  
  namespace mailcore {
      
      enum ConnectionType {
          ConnectionTypeClear             = 1 << 0,
          ConnectionTypeStartTLS          = 1 << 1,
          ConnectionTypeTLS               = 1 << 2,
      };
      
      enum AuthType {
          AuthTypeSASLNone          = 0,
          AuthTypeSASLCRAMMD5       = 1 << 0,
          AuthTypeSASLPlain         = 1 << 1,
          AuthTypeSASLGSSAPI        = 1 << 2,
          AuthTypeSASLDIGESTMD5     = 1 << 3,
          AuthTypeSASLLogin         = 1 << 4,
          AuthTypeSASLSRP           = 1 << 5,
          AuthTypeSASLNTLM          = 1 << 6,
          AuthTypeSASLKerberosV4    = 1 << 7,
          AuthTypeXOAuth2           = 1 << 8,
          AuthTypeXOAuth2Outlook    = 1 << 9,
      };
      
      enum IMAPFolderFlag {
          IMAPFolderFlagNone        = 0,
          IMAPFolderFlagMarked      = 1 << 0,
          IMAPFolderFlagUnmarked    = 1 << 1,
          IMAPFolderFlagNoSelect    = 1 << 2,
          IMAPFolderFlagNoInferiors = 1 << 3,
          IMAPFolderFlagInbox       = 1 << 4,
          IMAPFolderFlagSentMail    = 1 << 5,
          IMAPFolderFlagStarred     = 1 << 6,
          IMAPFolderFlagAllMail     = 1 << 7,
          IMAPFolderFlagTrash       = 1 << 8,
          IMAPFolderFlagDrafts      = 1 << 9,
          IMAPFolderFlagSpam        = 1 << 10,
          IMAPFolderFlagImportant   = 1 << 11,
          IMAPFolderFlagArchive     = 1 << 12,
          IMAPFolderFlagAll = IMAPFolderFlagAllMail,
          IMAPFolderFlagJunk = IMAPFolderFlagSpam,
          IMAPFolderFlagFlagged = IMAPFolderFlagStarred,
          IMAPFolderFlagFolderTypeMask = IMAPFolderFlagInbox | IMAPFolderFlagSentMail | IMAPFolderFlagStarred | IMAPFolderFlagAllMail |
            IMAPFolderFlagTrash| IMAPFolderFlagDrafts | IMAPFolderFlagSpam | IMAPFolderFlagImportant | IMAPFolderFlagArchive,
      };
      
      enum MessageFlag {
          MessageFlagNone          = 0,
          MessageFlagSeen          = 1 << 0,
          MessageFlagAnswered      = 1 << 1,
          MessageFlagFlagged       = 1 << 2,
          MessageFlagDeleted       = 1 << 3,
          MessageFlagDraft         = 1 << 4,
          MessageFlagMDNSent       = 1 << 5,
          MessageFlagForwarded     = 1 << 6,
          MessageFlagSubmitPending = 1 << 7,
          MessageFlagSubmitted     = 1 << 8,
          MessageFlagMaskAll = MessageFlagSeen | MessageFlagAnswered | MessageFlagFlagged |
          MessageFlagDeleted | MessageFlagDraft | MessageFlagMDNSent | MessageFlagForwarded |
          MessageFlagSubmitPending | MessageFlagSubmitted,
      } ;
      
      enum IMAPMessagesRequestKind {
          IMAPMessagesRequestKindUid           = 0, // This is the default and it's always fetched
          IMAPMessagesRequestKindFlags         = 1 << 0,
          IMAPMessagesRequestKindHeaders       = 1 << 1,
          IMAPMessagesRequestKindStructure     = 1 << 2,
          IMAPMessagesRequestKindInternalDate  = 1 << 3,
          IMAPMessagesRequestKindFullHeaders   = 1 << 4,
          IMAPMessagesRequestKindHeaderSubject = 1 << 5,
          IMAPMessagesRequestKindGmailLabels   = 1 << 6,
          IMAPMessagesRequestKindGmailMessageID = 1 << 7,
          IMAPMessagesRequestKindGmailThreadID  = 1 << 8,
          IMAPMessagesRequestKindExtraHeaders  = 1 << 9,
          IMAPMessagesRequestKindSize          = 1 << 10,
      };
      
      enum IMAPFetchRequestType {
          IMAPFetchRequestTypeUID = 0,
          IMAPFetchRequestTypeSequence = 1
      };
      
      enum IMAPStoreFlagsRequestKind {
          IMAPStoreFlagsRequestKindAdd,
          IMAPStoreFlagsRequestKindRemove,
          IMAPStoreFlagsRequestKindSet,
      };
      
      enum IMAPWorkaround {
          IMAPWorkaroundGmail = 1 << 0,
          IMAPWorkaroundYahoo = 1 << 1,
          IMAPWorkaroundExchange2003 = 1 << 2,
      };
      
      enum IMAPCapability {
          IMAPCapabilityACL,
          IMAPCapabilityBinary,
          IMAPCapabilityCatenate,
          IMAPCapabilityChildren,
          IMAPCapabilityCompressDeflate,
          IMAPCapabilityCondstore,
          IMAPCapabilityEnable,
          IMAPCapabilityIdle,
          IMAPCapabilityId,
          IMAPCapabilityLiteralPlus,
          IMAPCapabilityMultiAppend,
          IMAPCapabilityNamespace,
          IMAPCapabilityQResync,
          IMAPCapabilityQuota,
          IMAPCapabilitySort,
          IMAPCapabilityStartTLS,
          IMAPCapabilityThreadOrderedSubject,
          IMAPCapabilityThreadReferences,
          IMAPCapabilityUIDPlus,
          IMAPCapabilityUnselect,
          IMAPCapabilityXList,
          IMAPCapabilityAuthAnonymous,
          IMAPCapabilityAuthCRAMMD5,
          IMAPCapabilityAuthDigestMD5,
          IMAPCapabilityAuthExternal,
          IMAPCapabilityAuthGSSAPI,
          IMAPCapabilityAuthKerberosV4,
          IMAPCapabilityAuthLogin,
          IMAPCapabilityAuthNTLM,
          IMAPCapabilityAuthOTP,
          IMAPCapabilityAuthPlain,
          IMAPCapabilityAuthSKey,
          IMAPCapabilityAuthSRP,
          IMAPCapabilityXOAuth2,
          IMAPCapabilityGmail,
      };
      
      enum POPCapability {
          POPCapabilityNone,
          POPCapabilityStartTLS,
          POPCapabilityTop,
          POPCapabilityUser,
          POPCapabilityRespCodes,
          POPCapabilityPipelining,
          POPCapabilityUIDL,
          POPCapabilitySASL,
          POPCapabilityAuthAnonymous,
          POPCapabilityAuthCRAMMD5,
          POPCapabilityAuthDigestMD5,
          POPCapabilityAuthExternal,
          POPCapabilityAuthGSSAPI,
          POPCapabilityAuthKerberosV4,
          POPCapabilityAuthLogin,
          POPCapabilityAuthNTLM,
          POPCapabilityAuthOTP,
          POPCapabilityAuthPlain,
          POPCapabilityAuthSKey,
          POPCapabilityAuthSRP,
      };
      
      enum Encoding {
          Encoding7Bit = 0,            // should match MAILIMAP_BODY_FLD_ENC_7BIT
          Encoding8Bit = 1,            // should match MAILIMAP_BODY_FLD_ENC_8BIT
          EncodingBinary = 2,          // should match MAILIMAP_BODY_FLD_ENC_BINARY
          EncodingBase64 = 3,          // should match MAILIMAP_BODY_FLD_ENC_BASE64
          EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE
          EncodingOther = 5,           // should match MAILIMAP_BODY_FLD_ENC_OTHER
          // negative values should be used for other encoding
          EncodingUUEncode = -1
      };
      
      enum IMAPSearchKind {
          IMAPSearchKindAll,
          IMAPSearchKindNone,
          IMAPSearchKindFrom,
          IMAPSearchKindTo,
          IMAPSearchKindCc,
          IMAPSearchKindBcc,
          IMAPSearchKindRecipient,   // Recipient is the combination of To, Cc and Bcc
          IMAPSearchKindSubject,
          IMAPSearchKindContent,
          IMAPSearchKindBody,
          IMAPSearchKindUIDs,
          IMAPSearchKindNumbers,
          IMAPSearchKindHeader,
          IMAPSearchKindRead,
          IMAPSearchKindUnread,
          IMAPSearchKindFlagged,
          IMAPSearchKindUnflagged,
          IMAPSearchKindAnswered,
          IMAPSearchKindUnanswered,
          IMAPSearchKindDraft,
          IMAPSearchKindUndraft,
          IMAPSearchKindDeleted,
          IMAPSearchKindSpam,
          IMAPSearchKindBeforeDate,
          IMAPSearchKindOnDate,
          IMAPSearchKindSinceDate,
          IMAPSearchKindBeforeReceivedDate,
          IMAPSearchKindOnReceivedDate,
          IMAPSearchKindSinceReceivedDate,
          IMAPSearchKindSizeLarger,
          IMAPSearchKindSizeSmaller,
          IMAPSearchKindGmailThreadID,
          IMAPSearchKindGmailMessageID,
          IMAPSearchKindGmailRaw,
          IMAPSearchKindOr,
          IMAPSearchKindAnd,
          IMAPSearchKindNot,
      };
      
      enum ErrorCode {
          ErrorNone, // 0
          ErrorConnection,
          ErrorTLSNotAvailable,
          ErrorParse,
          ErrorCertificate,
          ErrorAuthentication,
          ErrorGmailIMAPNotEnabled,
          ErrorGmailExceededBandwidthLimit,
          ErrorGmailTooManySimultaneousConnections,
          ErrorMobileMeMoved,
          ErrorYahooUnavailable, // 10
          ErrorNonExistantFolder,
          ErrorRename,
          ErrorDelete,
          ErrorCreate,
          ErrorSubscribe,
          ErrorAppend,
          ErrorCopy,
          ErrorExpunge,
          ErrorFetch,
          ErrorIdle, // 20
          ErrorIdentity,
          ErrorNamespace,
          ErrorStore,
          ErrorCapability,
          ErrorStartTLSNotAvailable,
          ErrorSendMessageIllegalAttachment,
          ErrorStorageLimit,
          ErrorSendMessageNotAllowed,
          ErrorNeedsConnectToWebmail,
          ErrorSendMessage, // 30
          ErrorAuthenticationRequired,
          ErrorFetchMessageList,
          ErrorDeleteMessage,
          ErrorInvalidAccount,
          ErrorFile,
          ErrorCompression,
          ErrorNoSender,
          ErrorNoRecipient,
          ErrorNoop,
          ErrorGmailApplicationSpecificPasswordRequired, // 40
          ErrorServerDate,
          ErrorNoValidServerFound,
      };
      
      enum PartType {
          PartTypeSingle,
          PartTypeMessage,
          PartTypeMultipartMixed,
          PartTypeMultipartRelated,
          PartTypeMultipartAlternative,
          PartTypeMultipartSigned,
      };
      
      // Private type - It should not be used directly.
      enum IMAPMessageRenderingType {
          IMAPMessageRenderingTypeHTML,
          IMAPMessageRenderingTypeHTMLBody,
          IMAPMessageRenderingTypePlainText,
          IMAPMessageRenderingTypePlainTextBody,
          IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace,
      };
      
  }
  
  #endif
  
  #endif
  