epoc32/include/imapset.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
--- a/epoc32/include/imapset.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/imapset.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,708 @@
-imapset.h
+// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __IMAPSET_H__
+#define __IMAPSET_H__
+
+ 
+
+
+#include <msvuids.h>
+#include <miutset.h>
+
+class TBearerTypes;
+class TImImap4GetPartialMailInfo;
+
+/** Default IMAP4 server port number. */
+const TUint32 KIMAPDefaultPortNumber = 143;
+
+/** Default inbox refresh rate in seconds. */
+const TInt KImapDefaultInboxSyncRate = 300;
+
+/** Default idle timeout in seconds. */
+const TInt KImapDefaultIdleTimeout = 1740;
+
+/** Default fetch size in bytes. */
+const TUint KImapDefaultFetchSizeBytes = 20480;
+
+
+
+/** @deprecated */
+const TInt32 KImImapSynchroniseAll = -1;
+
+/** @deprecated */
+const TInt32 KImImapSynchroniseNone	= 0;
+
+
+/**
+Describes the folder subscription synchronisation strategy.
+
+This specifies whether the local or remote folder subscription flags, or a
+combination of both, are used to determine which mailboxes are synchronised.
+For an overview of the synchronisation process, see CImap4ClientMtm.
+
+@see CImImap4Settings::SetSynchronise()
+@see CImImap4Settings::Synchronise()
+
+@publishedAll
+@released
+*/
+enum TFolderSyncType
+	{
+	/** Folders that are marked for subscription either locally or remotely are synchronised. */
+	EUseCombination=0,
+	/** Only folders marked for subscription locally are synchronised. */
+	EUseLocal,
+	/** Only folders marked for subscription remotely are synchronised. */
+	EUseRemote
+	};
+
+
+/**
+Specifies methods of synchronising IMAP4 subscription information with a server. 
+
+Subscription settings that have been set on folders on the local device, and 
+subscription settings that have been set on the corresponding mailboxes on the 
+remote server can be synchronised, as part of the synchronisation process
+(see the overview for CImap4ClientMtm).
+
+@see CImImap4Settings::SetSubscribe()
+@see CImImap4Settings::Subscribe()
+
+@publishedAll
+@released
+*/
+enum TFolderSubscribeType
+	{
+	/** Do not alter local or remote subscription information. */
+	EUpdateNeither=0,
+	/** Update local copy of subscription information when it is received from the 
+	remote IMAP4 server at the beginning of the mail session. */
+	EUpdateLocal,
+	/** Update remote copy of subscription information so that it matches the local 
+	subscription information. */
+	EUpdateRemote,
+	/** Merge local and remote subscription information, store updated information 
+	on the remote server and store merged data on the local message store. */
+	EUpdateBoth
+	};
+
+
+/**
+Defines which components of a message to fetch when copying or moving from
+a server. 
+
+@see CImImap4Settings::SetGetMailOptions()
+@see CImImap4Settings::GetMailOptions()
+
+@publishedAll
+@released
+*/
+enum TImap4GetMailOptions
+	{
+	/** Get message headers. */
+	EGetImap4EmailHeaders,
+	/** Get message body. */
+	EGetImap4EmailBodyText,
+	/** Get message body and attachments. */
+	EGetImap4EmailBodyTextAndAttachments,
+	/** Get message attachments. */
+	EGetImap4EmailAttachments,
+	/** Get message body, including non-plain or non-HTML alternative text parts (or attachments). */
+	EGetImap4EmailBodyAlternativeText
+	};
+
+/**
+Defines which components of a message should be fetched partially when 
+fetching the message from a server.
+
+@see
+CImImap4Settings
+
+@publishedAll
+@released
+*/
+enum TImImap4PartialMailOptions
+	{
+	/** No size limits, full message to be fetched.*/
+	ENoSizeLimits,
+	/** Get body text only. 
+	Gets text/plain part only if text/plain part size + text/html part size
+	is greater than body text size limit.
+	Gets text/plain part and text/html part if text/plain part size + text/html part size
+	is less than body text size limit of the message.*/
+	EBodyTextOnly,
+	/** Gets all the attachments less than attachment size limit.*/
+	EAttachmentsOnly,
+	/**  Gets the body text less than or equal to body text size limit and attachments 
+	less than or equal to attachment size limit.*/
+	EBodyTextAndAttachments,
+	/** Gets the body text less than total size limit and also attachments whose size 
+	is within total size limit minus fetched body parts.*/
+	ECumulative,
+	/** Gets the body text less than total size limit and all non-HTML text attachments whose size
+	is within total size limit minus fetched body parts.*/	
+	EBodyAlternativeText
+	}; 
+
+/**
+Flags to indicate what type of IMAP4 progress information is being returned. 
+
+@publishedAll
+@released
+*/
+enum TImap4ProgressType
+	{
+	/** Progress information is an TImap4GenericProgress object. */
+	EImap4GenericProgressType,
+	/** Progress information is an TImap4SyncProgress object. */
+	EImap4SyncProgressType
+	};
+
+
+class TImap4GenericProgress
+/**
+Progress information for an IMAP4 get operation.
+
+For the 'get mail when already connected' operations, the progress state can 
+be obtained from TImap4GenericProgress::iState. In the case of the 'connect 
+and get mail and disconnect' and 'connect and get mail and stay online', the 
+actual progress defined in TImap4GenericProgress::iState will be of the form 
+of 'Copy New Mail', 'Populating Message Selection' etc. The sub-operation 
+state can then be obtained in the form of 'Connecting', 'Fetching', 'Disconnecting' 
+etc. from TImap4GenericProgress::iImap4SubStateProgress.
+
+@see
+CImImap4GetMail 
+
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C TInt ConnectionState() const;
+	IMPORT_C TInt ConnectionIAP() const;
+
+public:
+	/** Operation type. */
+	enum TImap4GenericProgressOp
+		{
+	/** Connect operation. */
+		EConnect,
+	/** Disconnect operation. */
+		EDisconnect, 
+	/** Sync operation. */
+		ESync,
+	/** Select operation. */
+		ESelect,		
+	/** Copy messages to local operation. */
+		ECopyToLocal,
+	/** Copy messages within remote server operation. */
+		ECopyWithinService,
+	/** Copy messages from local operation. */
+		ECopyFromLocal,
+	/** Move messages to local operation. */
+		EMoveToLocal,
+	/** Move messages within remote server operation. */
+		EMoveWithinService,
+	/** Move messages from local operation. */
+		EMoveFromLocal,
+	/** Message population operation. */
+		EPopulate,		
+	/** Delete operation. */
+		EDelete,		
+	/** Offline delete operation. */
+		EOffLineDelete,
+	/** Offline undelete operation. */
+		EOffLineUndelete,
+	/** Offline delete operation. */
+		EOffLineCopyToLocal,
+	/** Offline move messages to local operation. */
+		EOffLineMoveToLocal,
+	/** Offline copy messages from local operation. */
+		EOffLineCopyFromLocal,
+	/** Offline move messages from local operation. */
+		EOffLineMoveFromLocal,
+	/** Offline copy messages within remote server operation. */
+		EOffLineCopyWithinService,
+	/** Offline move messages within remote server operation. */
+		EOffLineMoveWithinService,
+	/** Offline message population operation. */
+		EOffLinePopulate
+		};
+
+	/** Operation state information. */
+	enum TImap4GenericProgressState
+		{
+	/** Disconnected. */
+		EDisconnected,
+	/** Connecting. */
+		EConnecting,
+	/** Idle. */
+		EIdle,
+	/** Selecting the folder to use. */
+		ESelecting,
+	/** Fetching messages to mirror server. */
+		EFetching,
+	/** Appending local messages to remote server. */
+		EAppending,
+	/** Copying local messages to local or within service. */
+		ECopying,
+	/** Deleting an item, including expunging a folder. */
+		EDeleting,
+	/** Synchronising folder after an operation. */
+		ESyncing,
+	/** Disconnecting. */
+		EDisconnecting,
+	/** Sync already in progress. */
+		EBusy,
+	/** CImImap4GetMail move operation in progress. */
+		EMoving,
+	/** CImImap4GetMail copy new mail operation in progress. */
+		ECopyNewMail,
+	/** CImImap4GetMail move new mail operation in progress. */
+		EMoveNewMail,
+	/** CImImap4GetMail copy selected messages operation in progress. */
+		ECopyMailSelection,
+	/** CImImap4GetMail move selected messages operation in progress. */
+		EMoveMailSelection,
+	/** CImImap4GetMail copy all messages operation in progress. */
+		ECopyAllMail,
+	/** CImImap4GetMail move all messages operation in progress. */
+		EMoveAllMail,
+	/** CImImap4GetMail populate new messages operation in progress. */
+		EPopulateNewMail,
+	/** CImImap4GetMail populate all messages operation in progress. */
+		EPopulateAllMail,
+	/** CImImap4GetMail populate selected messages operation in progress. */
+		EPopulateMailSelection
+		};
+
+	/** Progress information type: always EImap4GenericProgressType. */
+	TImap4ProgressType iType;
+	/** Operation type. */
+	TImap4GenericProgressOp iOperation;
+	/** 
+	The progress state.
+	
+	For 'connect and get mail and disconnect' and 'connect and get mail and stay 
+	online' type operations, additional sub-operation state can be obtained from 
+	iImap4SubStateProgress.
+	*/
+	TImap4GenericProgressState iState; 
+	/** 
+	The progress sub-state.
+	
+	This only applies to 'connect and get mail and disconnect' and 'connect and 
+	get mail and stay online' type operations.
+	*/
+	TImap4GenericProgressState iImap4SubStateProgress;
+	/** In the EConnecting state, this field holds the connection iap value, 
+	otherwise it holds the number of messages still to be processed. */
+	TInt		iMsgsToDo;
+	/** In the EConnecting state, this field holds the connection stage value, 
+	otherwise it holds the number of messages processed. */
+	TInt		iMsgsDone;
+	/** Number of message parts still to be processed. */
+	TInt		iPartsToDo;
+	/** Number of message parts processed. */
+	TInt		iPartsDone;
+	/** Number of bytes (for a multipart fetch) still to be processed. */
+	TInt		iBytesToDo;
+	/** Number of bytes (for a multipart fetch) processed. */
+	TInt		iBytesDone;
+	/** Error code. */
+	TInt		iErrorCode;
+	/** Message ID returned from the operation. */
+	TMsvId		iReturnedMsvId;
+	/** The total size of messages to be downloaded (bytes). */
+	TInt		iTotalSize;
+	};
+
+
+class TImap4SyncProgress
+/**
+IMAP4 synchronisation progress information. 
+
+The client may then use an object of this type created by the server MTM to 
+track synchronisation progress.
+
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Synchronisation state. */
+	enum TImap4SyncProgressState
+		{
+	/** Idle. */
+		EIdle,
+	/** Busy. */
+		EBusy,
+	/** Connecting. */
+		EConnecting,
+	/** Disconnecting. */
+		EDisconnecting,
+	/** Synchronising inbox. */
+		ESyncInbox,
+	/** Synchronising folder tree. */
+		ESyncFolderTree,
+	/** Checking remote subscription. */
+		ECheckRemoteSubscription,
+	/** Updating remote subscription. */
+		EUpdateRemoteSubscription,
+	/** Synchronising other information. */
+		ESyncOther,
+	/** Deleting. */
+		EDeleting,
+	/** Processing pending operations. */
+		EProcessingPendingOps
+		};
+
+	/** Progress information type: always EImapSyncProgressType. */
+	TImap4ProgressType iType;		
+	/** Synchronisation state. */
+	TImap4SyncProgressState iState;	//	Where is the sync up to?
+	/** 
+	"Folders to do" count for synchronisation. 
+	This is meaningful during the #ESyncOther and #EDeleting 
+	synchronisation stages.
+	*/
+	TInt		iFoldersToDo;
+	/**
+	"Folders done" count for synchronisation. 
+	This is meaningful during the #ESyncOther and #EDeleting 
+	synchronisation stages.
+	*/
+	TInt		iFoldersDone;
+	/** 
+	"Message to do" count for synchronisation.
+	This is meaningful during the #ESyncInbox, #ESyncOther and #EProcessingPendingOps
+	synchronisation stages.
+	*/
+	TInt		iMsgsToDo;
+	/**
+	"Message done" count for synchronisation.
+	This is meaningful during the #ESyncInbox, #ESyncOther and #EProcessingPendingOps
+	synchronisation stages.
+	*/
+	TInt		iMsgsDone;
+	/**
+	Number of headers fetched during synchronisation.
+	*/
+	TInt		iHeadersFetched;
+	/**
+	Number of folders orphaned during synchronisation.
+	
+	An orphaned folder is a local folder which existed 
+	under the service, but which did not exist
+	on the remote server when synchronisation was done.	
+	*/
+	TInt		iOrphanedFolders;
+	/**
+	Number of new folders during synchronisation.
+	*/
+	TInt		iNewFolders;
+	/**
+	Number of orphaned messages during synchronisation.
+
+	An orphaned message is one which existed locally 
+	under the service, but which did not exist
+	on the remote server when synchronisation was done.	
+	*/
+	TInt		iOrphanedMessages;
+	/**
+	Number of remote messages tagged for deletion.
+	
+	In IMAP, messages can be flagged as deleted, before 
+	they are later permanently removed.
+	*/
+	TInt		iRemoteMessagesDeleteTagged;
+	/** Number of messages fetched during synchronisation. 
+	
+	In the current implementation, this is always 0. Use
+	iHeadersFetched to get the number of headers fetched.	
+	*/
+	TInt		iMessagesFetchedOK;
+	/** Number of message parts fetched during synchronisation. 
+	
+	In the current implementation, this is always 0.
+	*/
+	TInt		iMessagePartsFetchedOK;
+	/** Number of message parts not found during synchronisation. 
+	
+	In the current implementation, this is always 0.
+	*/
+	TInt		iMessagePartsNotFound;
+	/** Number of folders not found during synchronisation. 
+	
+	This can occur if the remote server returns an error when 
+	a client attempts to select a folder during synchronisation. 
+	*/
+	TInt		iFoldersNotFound;
+	/** Any error-code that the client needs to be informed of. */
+	TInt		iErrorCode;
+	};
+
+class TImap4CompoundProgress
+/**
+IMAP operation progress information.
+
+The class supplies both the two IMAP progress types, generic and synchronisation.
+
+The IMAP4 server MTM owns two IMAP4 sessions that are used independently of 
+each other to perform 'background' and 'foreground' operations. In a typical 
+situation, the user may be downloading the body parts of a message (populating) 
+in the foreground whilst in the background a full synchronisation may be underway. 
+In this scenario, the generic progress will give an indication of the 'foreground' 
+activity and the synchronisation progress will give an indication of the 'background' 
+progress. The synchronisation progress component of the compound progress 
+will always show the synchronisation progress irrespective of whether the 
+synchronisation is running in the foreground or the background. 
+
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Generic progress. */
+	TImap4GenericProgress	iGenericProgress;
+	/** Synchronisation progress. */
+	TImap4SyncProgress		iSyncProgress;
+	};
+
+
+class CImImap4Settings : public CImBaseEmailSettings
+/**
+Settings for connection to and use of an IMAP4 mail server and its mailboxes.
+
+Messaging clients should use an instance of this class to specify and retrieve
+configuration settings that are used by an IMAP4 service when executing email
+operations.
+
+Service settings include:
+
+- server log on settings (user name and password)
+- message header synchronisation strategy and synchronisation limits
+- message getting options, such as maximum size. Note that these options 
+  are not used by the IMAP MTM. They can be used by client applications to 
+  store user preferences, and be used by the client when issuing get commands.
+- miscelleanous settings, including whether IMAP IDLE should be used
+
+CImImap4Settings objects are created and accessed through
+CEmailAccounts. CEmailAccounts can also be used to get the 
+connection settings, such as the ISP to use, used to access an IMAP server.
+
+Settings for a service are associated with a service-type entry in the Message 
+Server'smessage store. However the settings are not actually stored in the 
+message store, but in the device's Central Repository data store. 
+
+@see CEmailAccounts
+
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C CImImap4Settings();
+	IMPORT_C virtual ~CImImap4Settings();
+	IMPORT_C void Reset();
+	IMPORT_C const TPtrC8 LoginName() const;
+	IMPORT_C void SetLoginNameL(const TDesC8& aLoginName);
+	IMPORT_C const TPtrC8 Password() const;
+	IMPORT_C void SetPasswordL(const TDesC8& aPassword);
+	IMPORT_C const TPtrC8 FolderPath() const;
+	IMPORT_C void SetFolderPathL(const TDesC8& aFolderPath);
+	IMPORT_C const TPtrC8 SearchString() const;
+	IMPORT_C void SetSearchStringL(const TDesC8& aSearchString);
+	IMPORT_C TText8 PathSeparator() const;
+	IMPORT_C void SetPathSeparator(const TText8 aPathSeparator);
+	IMPORT_C TBool DisconnectedUserMode() const;
+	IMPORT_C void SetDisconnectedUserMode(TBool aFlag);
+	IMPORT_C void SetSynchronise(const TFolderSyncType aType);
+	IMPORT_C TFolderSyncType Synchronise() const;
+	IMPORT_C void SetSubscribe(const TFolderSubscribeType aType);
+	IMPORT_C TFolderSubscribeType Subscribe() const;
+	IMPORT_C TBool AutoSendOnConnect() const;
+	IMPORT_C void SetAutoSendOnConnect(TBool aFlag);
+	IMPORT_C TUint MaxEmailSize() const;
+	IMPORT_C void SetMaxEmailSize(const TUint aMaxEmailSize);
+	IMPORT_C TBool DeleteEmailsWhenDisconnecting() const;
+	IMPORT_C void SetDeleteEmailsWhenDisconnecting(TBool aFlag);
+	IMPORT_C TBool AcknowledgeReceipts() const;
+	IMPORT_C void SetAcknowledgeReceipts(TBool aFlag);
+	IMPORT_C TImap4GetMailOptions GetMailOptions() const;
+	IMPORT_C void SetGetMailOptions(TImap4GetMailOptions aGetMailOptions);
+	IMPORT_C CImImap4Settings& CopyL(const CImImap4Settings& aCImImap4Settings);
+	IMPORT_C TBool operator==(const CImImap4Settings& aCImImap4Settings) const;
+	IMPORT_C TInt32 InboxSynchronisationLimit() const;
+	IMPORT_C void SetInboxSynchronisationLimit(const TInt32 aInboxSyncLimit);
+	IMPORT_C TInt32 MailboxSynchronisationLimit() const;
+	IMPORT_C void SetMailboxSynchronisationLimit(const TInt32 aMailboxSyncLimit);
+	IMPORT_C TBool UpdatingSeenFlags() const;
+	IMPORT_C void SetUpdatingSeenFlags(TBool aFlag);
+	IMPORT_C TInt SyncRate() const;
+	IMPORT_C void SetSyncRateL(TInt aSyncRate);
+	IMPORT_C TUint FetchSize() const;
+	IMPORT_C void SetFetchSizeL(TUint aFetchSizeBytes);
+	IMPORT_C TBool ImapIdle() const;
+	IMPORT_C void SetImapIdle(TBool aFlag);
+	IMPORT_C TInt ImapIdleTimeout() const;
+	IMPORT_C void SetImapIdleTimeoutL(TInt aIdleTimeout);
+	IMPORT_C TImImap4PartialMailOptions PartialMailOptions() const;
+	IMPORT_C void SetPartialMailOptionsL(TImImap4PartialMailOptions aPartialMailOptions); 
+	IMPORT_C TInt32 BodyTextSizeLimit() const;
+	IMPORT_C void SetBodyTextSizeLimitL(TInt32 aBodyTextSizeLimit);
+	IMPORT_C TInt32 AttachmentSizeLimit() const;
+	IMPORT_C void SetAttachmentSizeLimitL(TInt32 aAttachmentSizeLimit);
+	IMPORT_C TBool UseExpunge() const;
+	IMPORT_C void SetUseExpunge(TBool aFlag);
+	IMPORT_C void SetTlsSslDomainL(const TDesC8& aDomainName);
+	IMPORT_C TPtrC8 TlsSslDomain() const;
+	IMPORT_C void SetUseSyncDownloadRules(TBool aFlag);
+	IMPORT_C TBool UseSyncDownloadRules();
+	IMPORT_C void SetFolderSyncDisabled(TBool aFlag);
+	IMPORT_C TBool FolderSyncDisabled();
+
+private:
+	class TImImap4SettingsExtension
+		{
+	public:
+		inline TImImap4SettingsExtension();
+	public:
+		HBufC8* iLoginName;
+		HBufC8* iPassword;
+		HBufC8* iFolderPath;
+		HBufC8*	iSearchString;
+		HBufC8* iTlsSslDomain;
+		TInt	iSyncRate;
+		TInt	iImapIdleTimeout;
+		TUint	iFetchSizeBytes;
+		TImImap4PartialMailOptions	iPartialMailOptions;
+		TInt32	iBodyTextSizeLimit;
+		TInt32	iAttachmentSizeLimit;
+		};
+	
+	inline TImImap4SettingsExtension* Extension() const;
+	inline void CheckExtensionExistsL();
+
+	enum TImImap4EmailSettings
+		{
+		KImap4EmailSettingsClearFlag				= 0x00000000,
+		KImap4BaseEmailSettingsLastUsedFlag			= CImBaseEmailSettings::EBaseEmailSettingsLastUsedFlag, //0x00000002
+		KImap4EmailDisconnectedModeFlag				= KImap4BaseEmailSettingsLastUsedFlag << 1, //0x00000004
+		KImap4EmailAutoSendFlag						= KImap4EmailDisconnectedModeFlag << 1, //0x00000008
+		KImap4EmailDeleteEmailsWhenDisconnecting	= KImap4EmailAutoSendFlag << 1, //0x00000010
+		KImap4EmailAcknowledgeReceipts				= KImap4EmailDeleteEmailsWhenDisconnecting << 1, //0x00000020
+		KImap4EmailUpdatingSeenFlags				= KImap4EmailAcknowledgeReceipts << 1, //0x00000040
+		KImap4EmailIdleFlag							= KImap4EmailUpdatingSeenFlags << 1, //0x00000080
+		KImap4EmailExpungeFlag						= KImap4EmailIdleFlag << 1,
+		KImap4EmailUseSyncDownloadRules				= KImap4EmailExpungeFlag << 1, //0x00000200
+		KImap4EmailSettingsFolderSyncDisabled		= KImap4EmailUseSyncDownloadRules << 1, //0x00000400
+		KImap4EmailSettingsLastUsedFlag				= KImap4EmailSettingsFolderSyncDisabled
+		};
+
+	TImImap4SettingsExtension*	iExtension; // renamed iReceiptAddress
+
+	TInt32  iInboxSyncLimit;
+	TInt32  iMailboxSyncLimit;
+
+	TText8  iPathSeparator;
+	TFolderSyncType iSynchroniseStrategy;
+	TFolderSubscribeType iSubscriptionStrategy;
+	TUint32	iMaxEmailSize;
+	TImap4GetMailOptions iGetMailOptions;
+	};
+
+
+class TImImap4GetMailInfo
+/**
+Specifies options used when retrieving messages with IMAP.
+
+An TImImap4GetMailInfo is passed as a packaged parameter 
+to CImap4ClientMtm::InvokeAsyncFunctionL() when a message
+getting command is issued.
+
+Options include the maximum message size, and what 
+message parts are required.  
+
+@see CImImap4GetMail
+@see TImap4Cmds
+
+@publishedAll
+@released
+*/
+	{
+public:
+	/** The maximum message size (bytes). 
+	Messages of greater size are not fetched. */
+	TInt32					iMaxEmailSize;
+	/** The required message parts. */
+	TImap4GetMailOptions	iGetMailBodyParts;
+	/** The destination folder ID, specifying the
+	target folder when messages are copied or moved. */
+	TMsvId					iDestinationFolder;
+	};
+
+/**
+Specifies message criteria that are used as a filter when retrieving messages partially.
+
+Options include the maximum size for the whole message,
+the maximum size for the body of the message,
+the maximum size for the attachments with the message, and 
+the message parts required.
+
+An TImImap4GetPartialMailInfo is passed as a packaged parameter 
+to CImap4ClientMtm::InvokeAsyncFunctionL() when a message
+populate command is issued.
+
+@see
+CImImap4GetMail
+
+@publishedAll
+@released
+*/
+
+class TImImap4GetPartialMailInfo : public TImImap4GetMailInfo
+	{
+public:
+	/** The maximum size limit for the total message (bytes). */
+	TInt32		iTotalSizeLimit;
+	/** The maximum size limit for body of the message (bytes). */
+	TInt32		iBodyTextSizeLimit;
+	/** The maximum size limit for the attachments  (bytes). */
+	TInt32		iAttachmentSizeLimit;
+	/** The required message parts. */
+	TImImap4PartialMailOptions	iPartialMailOptions;
+	};
+	
+inline CImImap4Settings::TImImap4SettingsExtension* CImImap4Settings::Extension() const
+	{
+	return iExtension;
+	}
+
+inline void CImImap4Settings::CheckExtensionExistsL()
+	{
+	if (!iExtension)
+		iExtension=new (ELeave) CImImap4Settings::TImImap4SettingsExtension;
+	}
+inline CImImap4Settings::TImImap4SettingsExtension::TImImap4SettingsExtension() 
+: iLoginName(NULL) ,iPassword(NULL) ,iFolderPath(NULL),iSearchString(NULL),iTlsSslDomain(NULL), iSyncRate(KImapDefaultInboxSyncRate), iImapIdleTimeout(KImapDefaultIdleTimeout), iFetchSizeBytes(KImapDefaultFetchSizeBytes),
+	iPartialMailOptions(ENoSizeLimits),iBodyTextSizeLimit(KMaxTInt),iAttachmentSizeLimit(KMaxTInt)
+	{
+	}
+
+
+#endif // __IMAPSET_H__