email/pop3andsmtpmtm/clientmtms/inc/SMTPSET.H
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/inc/SMTPSET.H	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,325 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#if !defined (__SMTPSET_H__)
+#define __SMTPSET_H__
+
+ 
+#include <msvuids.h>
+#include <miutset.h>
+
+/** Default SMTP server port number.*/
+const TUint32 KSMTPDefaultPortNumber = 25;
+
+/** Default/maximum addresses to include in body header of reply/forward messages */
+const TInt KSmtpToCcIncludeLimitDefault = 0;
+const TInt KSmtpToCcIncludeLimitMax = KMaxTInt;
+
+
+/**
+Defines options that allows the user to automatically email themselves a copy 
+of all emails that are sent from the phone.
+
+@see CImSmtpSettings::SendCopyToSelf() 
+
+@publishedAll
+@released
+*/
+enum TImSMTPSendCopyToSelf
+	{
+	/** Do not send a copy. */
+	ESendNoCopy,
+	/** Send a copy, with the user's address added to the To address list. */
+	ESendCopyAsToRecipient,
+	/** Send a copy, with the user's address added to the Cc: address list. */
+	ESendCopyAsCcRecipient,
+	/** Send a copy, with the user's address added to the Bcc: address list. */
+	ESendCopyAsBccRecipient
+	};
+/**
+Defines sending options for new email messages.
+
+The option has no direct effect on the SMTP MTM, although messages in the 
+outbox which are marked as ESendMessageOnNextConnection or ESendMessageImmediately 
+will be appended automatically to the list of messages supplied by the client 
+when either CBaseServerMtm::CopyFromLocal() or CBaseServerMtm::MoveFromLocal() 
+are called. 
+
+@publishedAll
+@released
+*/
+enum TImSMTPSendMessageOption
+	{
+	/** Send message immediately. */
+	ESendMessageImmediately,
+	/** Send message when the next connection occurs. */
+	ESendMessageOnNextConnection,
+	/** Send message only when the user requests this. */
+	ESendMessageOnRequest
+	};
+
+/**
+Defines status values for the SMTP MTM. 
+
+@publishedAll
+@released
+*/
+enum TMsgImOutboxSendState
+	{
+	/** Idle. */
+	EMsgOutboxProgressWaiting,
+	/** Connecting to server. */
+	EMsgOutboxProgressConnecting,
+	/** Sending messages. */
+	EMsgOutboxProgressSending,
+	/** Sending complete. */
+	EMsgOutboxProgressDone
+	};
+
+/** Sending state for SMTP. 
+
+@publishedAll
+@released
+*/
+enum TSmtpSessionState
+	{
+	/** Dialling, looking up DNS, or connecting to SMTP server. */
+	EConnectingToSmtp,
+	/** Waiting for the SMTP server to send welcome message. */
+	EWaitingForReply,
+	/** Sending HELO/EHLO command to the server. */
+	EAuthorisingSmtp,
+	/** Sending the STARTTLS command, if a secure connection was requested. */
+	ESendingStarttls,
+	/** Exchanging certificates with server, if a secure connection was requested. */
+	ESettingSecurity,
+	/** Sending a message to the server. */
+	ESendingImail,
+	/** Logging result. */
+	ELogDataEvent,
+	/** Disconnecting from the SMTP server. */
+	EClosingSmtp,
+	/** AUTH in progress. */
+	EAuthInProgress,
+	/** RSET in progress. */
+	EResetSmtp
+	};
+
+class TImImailFileProgress				
+/** 
+Status information about the SMTP message which is being sent. 
+
+@publishedAll
+@released
+*/
+	{
+public:
+	/**
+	Amount of data from the message already sent to the server in bytes.
+	
+	Note that the SMTP MTM encodes the text and binary data inside an email message 
+	while it is sending the data. As a result, iBytesToSend is likely to increase 
+	(by as much as one third) while a message is being sent. The size increase 
+	represents all additional bytes which have been added to the RFC 822 message 
+	to encode the data.
+	*/
+	TInt				iBytesSent;
+	/** Amount of data from the message still to be sent to the server in bytes. */
+	TInt				iBytesToSend;
+	/** Sending state. */
+	TSmtpSessionState	iSessionState;
+	};
+
+class TImSmtpProgress
+/**
+Progress information for SMTP operations on the Internet Mail MTM.
+
+The information is obtained through calling CMsvOperation::Progress() 
+on the operation. It is packaged into an 8-bit descriptor. 
+
+Messaging clients use the getter functions to get various types
+of information about an operation's progress. The setter functions
+are for use by the MTM.
+
+@publishedAll
+@released
+*/
+	{
+
+public:
+	IMPORT_C TMsgImOutboxSendState	Status() const; // Progress: current progress status of mail session
+	IMPORT_C TInt MsgNo() const;		            // Progress: No. of message currently being sent; zero=1st message
+	IMPORT_C TInt Error() const;			        // Summary: completion code from end of last session
+	IMPORT_C TInt Sent() const;			            // Summary: No. messages sent successfully
+	IMPORT_C TInt NotSent() const;		            // Summary: No. messages I didn't attempt to send
+	IMPORT_C TInt FailedToSend() const;	            // Summary: No. messages attempted to send but failed
+	IMPORT_C TInt SendTotal() const;		        // Sent() + NotSent() + FailedToSend() = SendTotal()
+	IMPORT_C void SetError(TInt anError);
+	IMPORT_C void SetStatus(TMsgImOutboxSendState aStatus);
+	IMPORT_C void SetMsgNo(TInt aMsgNo);
+	IMPORT_C void InitialiseTotal(const TInt& aTotal);
+	IMPORT_C void UpdateSent();
+	IMPORT_C void UpdateFailedToSend();
+	IMPORT_C void DecrementSendTotal();
+	IMPORT_C TMsvId	ServiceId() const;
+	IMPORT_C void SetServiceId(TMsvId aServiceId);
+	IMPORT_C TInt ConnectionState() const;
+	IMPORT_C TInt ConnectionIAP() const;
+	IMPORT_C void SetConnectionIAP(TInt aConnectionIAP);
+
+public:
+	/** Status information about the message that is currently being sent (if 
+	sending is in progress). */
+	TImImailFileProgress			iSendFileProgress;
+
+private:
+	TMsgImOutboxSendState	iStatus;
+	TInt					iError;
+	TInt					iMsgNo;
+	TInt					iSent;
+	TInt					iNotSent;
+	TInt					iFailedToSend;
+	TInt					iSendTotal;
+	TMsvId					iServiceId;
+	};
+
+class CImSmtpSettings : public CImBaseEmailSettings
+/**
+Run-time configuration settings for an SMTP account.
+
+Messaging clients should use an instance of this class to specify
+and retrieve configuration settings that are used by the SMTP service when
+executing email operations.  
+
+Service settings such as the email body encoding, reply address, character set,
+and whether to attach a signature or vCard can be specified using this class.
+Storing and restoring from the message store is also supported.
+
+To use this class to change a setting:
+
+1) Set the current context to the SMTP service entry using CMsvStore.
+
+2) Create an instance of CImSmtpSettings and put it on the cleanup stack.
+
+3) Retrieve the existing settings by calling CImSmtpSettings::RestoreL().
+
+4) Specify whether to add a vCard to outbound email by calling CImSmtpSettings::SetAddVCardToEmail().
+
+5) Save the new settings by calling CImSmtpSettings::StoreL().
+
+6) Pop and destroy the CImSmtpSettings instance.
+
+@see CMsvStore
+
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C CImSmtpSettings();
+	IMPORT_C virtual ~CImSmtpSettings();
+	IMPORT_C void Reset();
+	IMPORT_C const TPtrC EmailAlias() const;
+	IMPORT_C void SetEmailAliasL(const TDesC& aEmailAlias);
+	IMPORT_C const TPtrC EmailAddress() const;
+	IMPORT_C void SetEmailAddressL(const TDesC& aEmailAddress);
+	IMPORT_C const TPtrC ReplyToAddress() const;
+	IMPORT_C void SetReplyToAddressL(const TDesC& aReplyToAddress);
+	IMPORT_C const TPtrC ReceiptAddress() const;
+	IMPORT_C void SetReceiptAddressL(const TDesC& aReceiptAddress);
+	IMPORT_C TMsgOutboxBodyEncoding BodyEncoding() const;
+	IMPORT_C void SetBodyEncoding(TMsgOutboxBodyEncoding aBodyEncoding);
+	IMPORT_C const TUid DefaultMsgCharSet() const;
+	IMPORT_C void SetDefaultMsgCharSet(TUid aDefaultMsgCharSet);
+	IMPORT_C TBool AddVCardToEmail() const;
+	IMPORT_C void SetAddVCardToEmail(TBool aFlag);
+	IMPORT_C TBool AddSignatureToEmail() const;
+	IMPORT_C void SetAddSignatureToEmail(TBool aFlag);
+	IMPORT_C TBool RequestReceipts() const;
+	IMPORT_C void SetRequestReceipts(TBool aFlag);
+	IMPORT_C TImSMTPSendCopyToSelf SendCopyToSelf() const;
+	IMPORT_C void SetSendCopyToSelf(TImSMTPSendCopyToSelf aSendCopyToSelf);
+	IMPORT_C TImSMTPSendMessageOption SendMessageOption() const;
+	IMPORT_C void SetSendMessageOption(TImSMTPSendMessageOption aSendMessageOption);
+	IMPORT_C CImSmtpSettings& CopyL(const CImSmtpSettings& aCImSmtpSettings);
+	IMPORT_C TBool operator==(const CImSmtpSettings& aCImSmtpSettings) const;
+	IMPORT_C const TPtrC8 LoginName() const;
+	IMPORT_C void SetLoginNameL(const TDesC8&);
+	IMPORT_C const TPtrC8 Password() const;
+	IMPORT_C void SetPasswordL(const TDesC8&);
+	IMPORT_C TBool SMTPAuth() const;
+	IMPORT_C void SetSMTPAuth(TBool aFlag);
+	IMPORT_C TBool InboxLoginDetails() const;
+	IMPORT_C void SetInboxLoginDetails(TBool aFlag);
+	IMPORT_C TInt ToCcIncludeLimit() const;
+	IMPORT_C void SetToCcIncludeLimitL(TInt aLimit);
+	IMPORT_C void SetTlsSslDomainL(const TDesC8& aDomainName);
+	IMPORT_C TPtrC8 TlsSslDomain() const;
+
+private:
+	class TImSmtpSettingsExtension
+		{
+	public:
+		inline TImSmtpSettingsExtension();
+	public:
+		HBufC*	iReceiptAddress;
+		HBufC8* iLoginName;
+		HBufC8* iPassword;
+		HBufC8*	iTlsSslDomain;
+		TInt	iToCcIncludeLimit;
+		};
+
+	inline TImSmtpSettingsExtension* Extension() const;
+	inline void CheckExtensionExistsL();
+
+private:
+	enum TImSMTPEmailSettings
+		{
+		KSmtpSettingsClearFlag				= 0x00000000,
+		KSmtpBaseEmailSettingsLastUsedFlag	= CImBaseEmailSettings::EBaseEmailSettingsLastUsedFlag,	//0x00000002
+		KSmtpAddVCardToEmailFlag			= KSmtpBaseEmailSettingsLastUsedFlag << 1,	//0x00000004
+		KSmtpAddSignatureToEmailFlag		= KSmtpAddVCardToEmailFlag << 1,			//0x00000008
+		KSmtpRequestReceipts				= KSmtpAddSignatureToEmailFlag << 1,		//0x00000010
+		KSmtpSmtpAuthFlag					= KSmtpRequestReceipts << 1,				//0x00000020
+		KSmtpInboxLoginDetails				= KSmtpSmtpAuthFlag << 1,					//0x00000040
+		KSmtpEmailSettingsLastUsedFlag		= KSmtpInboxLoginDetails					//0x00000040
+		};
+
+	HBufC*						iEmailAlias;
+	HBufC*						iEmailAddress;
+	HBufC*						iReplyToAddress;
+	TImSmtpSettingsExtension*	iExtension; // renamed iReceiptAddress
+	TMsgOutboxBodyEncoding		iBodyEncoding;
+	TUid						iDefaultMsgCharSet;
+	TImSMTPSendCopyToSelf		iSendCopyToSelf;
+	TImSMTPSendMessageOption	iSendMessageOption;
+	};
+	
+inline CImSmtpSettings::TImSmtpSettingsExtension* CImSmtpSettings::Extension() const
+	{
+	return iExtension;
+	}
+
+inline void CImSmtpSettings::CheckExtensionExistsL()
+	{
+	if (!iExtension)
+		iExtension=new (ELeave) CImSmtpSettings::TImSmtpSettingsExtension;
+	}
+
+inline CImSmtpSettings::TImSmtpSettingsExtension::TImSmtpSettingsExtension() : iReceiptAddress(NULL),iLoginName(NULL),iPassword(NULL),iTlsSslDomain(NULL),iToCcIncludeLimit(KSmtpToCcIncludeLimitDefault)
+	{
+	}
+
+#endif    // #define __SMTPSET_H__