creator/engine/src/creator_mailbox.cpp
changeset 17 4f2773374eff
child 19 4b22a598b890
equal deleted inserted replaced
15:e11368ed4880 17:4f2773374eff
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <etelmm.h>
       
    20 #include <msvapi.h>
       
    21 
       
    22 #include "engine.h"
       
    23 #include "enginewrapper.h"
       
    24 #include "creator_mailbox.h" 
       
    25 #include "creator_traces.h"
       
    26 
       
    27 static const TInt KMailboxesFieldLength = 160;
       
    28 
       
    29 _LIT(KCreatorMailboxesPrefixName, "CR_");
       
    30 
       
    31 _LIT(KDefaultIncomingServer, "mail.example.com");
       
    32 _LIT(KDefaultOutgoingServer, "smtp.example.com");
       
    33 _LIT(KInternet, "internet");
       
    34 
       
    35 
       
    36 //----------------------------------------------------------------------------
       
    37 
       
    38 CMailboxesParameters::CMailboxesParameters()
       
    39     {
       
    40     LOGSTRING("Creator: CMailboxesParameters::CMailboxesParameters");
       
    41 
       
    42     iIncomingPort = KUndef;
       
    43     iOutgoingPort = KUndef;
       
    44     iMaxEmailSize = KUndef;
       
    45     iSyncRate = KUndef;
       
    46     iAttachmentFetchSize = KUndef;
       
    47     iAttachmentSizeLimit = KUndef;
       
    48     iBodyTextSizeLimit = KUndef;
       
    49     iAttachmentFetchSize = KUndef;
       
    50     iInboxSyncLimit = -1; // -1 = All
       
    51     iMailboxSyncLimit = -1; // -1 = All    
       
    52     iToCCIncludeLimit = KUndef;
       
    53     iImapIdleTimeout = KUndef;
       
    54     
       
    55     /*iMailboxName = HBufC::New(KMailboxesFieldLength);
       
    56     iAccessPoint = HBufC::New(KMailboxesFieldLength);
       
    57     iMyMailAddress = HBufC::New(KMailboxesFieldLength);
       
    58     iOutgoingMailServer = HBufC::New(KMailboxesFieldLength);
       
    59     iUserName = HBufC::New(KMailboxesFieldLength);
       
    60     iPassword = HBufC::New(KMailboxesFieldLength);
       
    61     iIncomingMailServer = HBufC::New(KMailboxesFieldLength);*/
       
    62     }
       
    63 
       
    64 CMailboxesParameters::~CMailboxesParameters()
       
    65     {
       
    66     LOGSTRING("Creator: CMailboxesParameters::~CMailboxesParameters");
       
    67 
       
    68     /*delete iIncomingMailServer;
       
    69     delete iPassword;
       
    70     delete iUserName;
       
    71     delete iOutgoingMailServer;
       
    72     delete iMyMailAddress;
       
    73     delete iAccessPoint;
       
    74     delete iMailboxName;*/
       
    75     
       
    76     delete iMailboxName;
       
    77     delete iIncomingLoginName;
       
    78     delete iIncomingPassword;
       
    79     delete iIncomingServerName;
       
    80     delete iIncomingConnectionMethod;
       
    81     delete iIncomingFolderPath;
       
    82     delete iPathSeparator;
       
    83     delete iOutgoingLoginName;
       
    84     delete iOutgoingPassword;
       
    85     delete iOutgoingServerName;
       
    86     delete iOutgoingConnectionMethod;
       
    87     delete iOwnEmailAddress;
       
    88     delete iOwnEmailAlias;
       
    89     delete iReceiptAddress;
       
    90     delete iReplyToAddress;
       
    91     }
       
    92 
       
    93 //----------------------------------------------------------------------------
       
    94 
       
    95 CCreatorMailboxes* CCreatorMailboxes::NewL(CCreatorEngine* aEngine)
       
    96     {
       
    97     CCreatorMailboxes* self = CCreatorMailboxes::NewLC(aEngine);
       
    98     CleanupStack::Pop(self);
       
    99     return self;
       
   100     }
       
   101 
       
   102 CCreatorMailboxes* CCreatorMailboxes::NewLC(CCreatorEngine* aEngine)
       
   103     {
       
   104     CCreatorMailboxes* self = new (ELeave) CCreatorMailboxes;
       
   105     CleanupStack::PushL(self);
       
   106     self->ConstructL(aEngine);
       
   107     return self;
       
   108     }
       
   109 
       
   110 CCreatorMailboxes::CCreatorMailboxes()
       
   111     {    
       
   112     }
       
   113 
       
   114 void CCreatorMailboxes::ConstructL(CCreatorEngine* aEngine)
       
   115     {
       
   116     LOGSTRING("Creator: CCreatorMailboxes::ConstructL");
       
   117 
       
   118     iEngine = aEngine;
       
   119     }
       
   120 
       
   121 CCreatorMailboxes::~CCreatorMailboxes()
       
   122     {
       
   123     LOGSTRING("Creator: CCreatorMailboxes::~CCreatorMailboxes");
       
   124     if ( iEngine && iEntryIds.Count() )
       
   125         {
       
   126         TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidMailbox ) );
       
   127         }
       
   128     iEntryIds.Reset();
       
   129     iEntryIds.Close();
       
   130     
       
   131     if (iParameters)
       
   132         delete iParameters;
       
   133     }
       
   134 
       
   135 //----------------------------------------------------------------------------
       
   136 
       
   137 TBool CCreatorMailboxes::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries)
       
   138     {
       
   139     LOGSTRING("Creator: CCreatorMailboxes::AskDataFromUserL");
       
   140     if ( aCommand == ECmdDeleteMailboxes )
       
   141         {
       
   142         return iEngine->GetEngineWrapper()->YesNoQueryDialog( _L("Delete all mailboxes?") );
       
   143         }
       
   144     else if ( aCommand ==  ECmdDeleteCreatorMailboxes )
       
   145         {
       
   146         return iEngine->GetEngineWrapper()->YesNoQueryDialog( _L("Delete all mailboxes created with Creator?") );
       
   147         }
       
   148     return iEngine->GetEngineWrapper()->EntriesQueryDialog(aNumberOfEntries, _L("How many entries to create?"));
       
   149     }
       
   150 
       
   151 
       
   152 //----------------------------------------------------------------------------
       
   153 
       
   154 TInt CCreatorMailboxes::CreateMailboxEntryL(CMailboxesParameters *aParameters)
       
   155     {
       
   156     LOGSTRING("Creator: CCreatorMailboxes::CreateMailboxEntryL");
       
   157 
       
   158       // clear any existing parameter definations
       
   159     delete iParameters;
       
   160     iParameters = NULL;
       
   161     
       
   162     CMailboxesParameters* parameters = aParameters;
       
   163     
       
   164     // random data needed if no predefined data available
       
   165     if (!parameters)
       
   166         {
       
   167         iParameters = new(ELeave) CMailboxesParameters;
       
   168         parameters = iParameters;
       
   169 
       
   170         TPtrC company(iEngine->RandomString(CCreatorEngine::ECompany));
       
   171         TPtrC firstName(iEngine->RandomString(CCreatorEngine::EFirstName));
       
   172         
       
   173         delete parameters->iMailboxName;
       
   174         parameters->iMailboxName = 0;
       
   175         parameters->iMailboxName = HBufC::NewL(KMailboxesFieldLength);
       
   176         parameters->iMailboxName->Des() = KCreatorMailboxesPrefixName;
       
   177         parameters->iMailboxName->Des().Append( company );
       
   178         parameters->iMailboxName->Des().Append(_L(" #"));
       
   179         parameters->iMailboxName->Des().AppendNum(iEngine->RandomNumber(1, 100));
       
   180         
       
   181         delete parameters->iIncomingLoginName;
       
   182         parameters->iIncomingLoginName = 0;
       
   183         parameters->iIncomingLoginName = HBufC::NewL(KMailboxesFieldLength); 
       
   184         delete parameters->iOutgoingLoginName;
       
   185         parameters->iOutgoingLoginName = 0;
       
   186         parameters->iOutgoingLoginName = HBufC::NewL(KMailboxesFieldLength); 
       
   187         parameters->iIncomingLoginName->Des() = iEngine->RandomString(CCreatorEngine::EFirstName);
       
   188         parameters->iIncomingLoginName->Des().LowerCase();
       
   189         parameters->iOutgoingLoginName->Des().Copy(parameters->iIncomingLoginName->Des());
       
   190         
       
   191         delete parameters->iIncomingPassword;
       
   192         parameters->iIncomingPassword = 0;
       
   193         parameters->iIncomingPassword = HBufC::NewL(KMailboxesFieldLength); 
       
   194         delete parameters->iOutgoingPassword;
       
   195         parameters->iOutgoingPassword = 0;
       
   196         parameters->iOutgoingPassword = HBufC::NewL(KMailboxesFieldLength); 
       
   197         parameters->iIncomingPassword->Des() = iEngine->RandomString(CCreatorEngine::ESurname);
       
   198         parameters->iIncomingPassword->Des().LowerCase();
       
   199         parameters->iOutgoingPassword->Des().Copy(parameters->iIncomingPassword->Des());
       
   200         
       
   201         delete parameters->iIncomingServerName;
       
   202         parameters->iIncomingServerName = 0;
       
   203         parameters->iIncomingServerName = HBufC::NewL(KMailboxesFieldLength); 
       
   204         parameters->iIncomingServerName->Des() = _L("incoming.");
       
   205         parameters->iIncomingServerName->Des().Append(company);
       
   206         parameters->iIncomingServerName->Des().Append(_L(".com"));
       
   207         parameters->iIncomingServerName->Des().LowerCase();
       
   208                 
       
   209         delete parameters->iIncomingConnectionMethod;
       
   210         parameters->iIncomingConnectionMethod = 0;
       
   211         parameters->iIncomingConnectionMethod = HBufC::NewL(KInternet().Length());
       
   212         parameters->iIncomingConnectionMethod->Des() = KInternet;  // use always this one, if it's not found, default will be used instead
       
   213         
       
   214         delete parameters->iOutgoingServerName;
       
   215         parameters->iOutgoingServerName = 0;
       
   216         parameters->iOutgoingServerName = HBufC::NewL(KMailboxesFieldLength); 
       
   217         parameters->iOutgoingServerName->Des() = _L("smtp.");
       
   218         parameters->iOutgoingServerName->Des().Append(company);
       
   219         parameters->iOutgoingServerName->Des().Append(_L(".com"));
       
   220         parameters->iOutgoingServerName->Des().LowerCase();
       
   221         
       
   222         delete parameters->iOutgoingConnectionMethod;
       
   223         parameters->iOutgoingConnectionMethod = 0;
       
   224         parameters->iOutgoingConnectionMethod = HBufC::NewL(KInternet().Length());
       
   225         parameters->iOutgoingConnectionMethod->Des() = KInternet;  // use always this one, if it's not found, default will be used instead
       
   226 
       
   227         delete parameters->iOwnEmailAddress;
       
   228         parameters->iOwnEmailAddress = 0;
       
   229         parameters->iOwnEmailAddress = iEngine->CreateEmailAddressLC();
       
   230         parameters->iOwnEmailAddress->Des().LowerCase();
       
   231         CleanupStack::Pop(); // parameters->iOwnEmailAddress
       
   232         
       
   233         delete parameters->iOwnEmailAlias;
       
   234         parameters->iOwnEmailAlias = 0;
       
   235         parameters->iOwnEmailAlias = HBufC::NewL(firstName.Length());        
       
   236         parameters->iOwnEmailAlias->Des().Copy(firstName);       
       
   237 
       
   238         delete parameters->iReceiptAddress;
       
   239         parameters->iReceiptAddress = 0;
       
   240         parameters->iReceiptAddress = iEngine->CreateEmailAddressLC();
       
   241         parameters->iReceiptAddress->Des().LowerCase();
       
   242         CleanupStack::Pop(); // parameters->iReceiptAddress
       
   243         
       
   244         delete parameters->iReplyToAddress;
       
   245         parameters->iReplyToAddress = 0;
       
   246         parameters->iReplyToAddress = iEngine->CreateEmailAddressLC();
       
   247         parameters->iReplyToAddress->Des().LowerCase();
       
   248         CleanupStack::Pop(); // parameters->iReplyToAddress
       
   249         
       
   250         parameters->iIncomingSSLWrapper = iEngine->RandomNumber(0, 1);
       
   251         parameters->iIncomingSecureSockets = iEngine->RandomNumber(0, 1);        
       
   252         parameters->iAcknowledgeReceipts = iEngine->RandomNumber(0, 1);
       
   253         parameters->iAutoSendOnConnect = iEngine->RandomNumber(0, 1);
       
   254         parameters->iDeleteEmailsAtDisconnect = iEngine->RandomNumber(0, 1);
       
   255         parameters->iImapIdleCommand = iEngine->RandomNumber(0, 1);
       
   256         parameters->iMarkSeenInSync = iEngine->RandomNumber(0, 1);
       
   257         parameters->iEnableExpungeMode = iEngine->RandomNumber(0, 1);
       
   258         parameters->iUseApop = iEngine->RandomNumber(0, 1);
       
   259         parameters->iDisconnectedUserMode = iEngine->RandomNumber(0, 1);                
       
   260         parameters->iOutgoingSSLWrapper = iEngine->RandomNumber(0, 1);
       
   261         parameters->iOutgoingSecureSockets = iEngine->RandomNumber(0, 1);
       
   262         parameters->iIncludeSignature = EFalse;
       
   263         parameters->iAddVCard = EFalse;
       
   264         parameters->iRequestReceipts = iEngine->RandomNumber(0, 1);
       
   265         parameters->iSmtpAuth = iEngine->RandomNumber(0, 1);
       
   266         
       
   267         parameters->iIncomingPort = iEngine->RandomNumber(25, 500);
       
   268         parameters->iAttachmentSizeLimit = iEngine->RandomNumber(1, KMaxTInt);
       
   269         parameters->iBodyTextSizeLimit = iEngine->RandomNumber(1, KMaxTInt);
       
   270         parameters->iAttachmentFetchSize = iEngine->RandomNumber(1, 40960);
       
   271         parameters->iImapIdleTimeout = iEngine->RandomNumber(10, 2000);
       
   272         parameters->iMaxEmailSize = iEngine->RandomNumber(1024, KMaxTInt);
       
   273         parameters->iSyncRate = iEngine->RandomNumber(10, 500);        
       
   274         parameters->iInboxSyncLimit = iEngine->RandomNumber(-1, 256);
       
   275         parameters->iMailboxSyncLimit = iEngine->RandomNumber(-1, 256);
       
   276         parameters->iOutgoingPort = KDefaultSmtpPort;
       
   277         parameters->iToCCIncludeLimit = iEngine->RandomNumber(0, 30);                      
       
   278         
       
   279         parameters->iGetEmailOptions = (CMailboxesParameters::TGetEmailOption) iEngine->RandomNumber(CMailboxesParameters::EUndef, CMailboxesParameters::EGetEmailOptionLast-1);
       
   280         parameters->iSubscribeType = (TFolderSubscribeType) iEngine->RandomNumber(EUpdateNeither, EUpdateBoth);
       
   281         parameters->iSyncType = (TFolderSyncType) iEngine->RandomNumber(EUseCombination, EUseRemote);
       
   282         parameters->iSendCopyToSelf = (TImSMTPSendCopyToSelf) iEngine->RandomNumber(ESendNoCopy, ESendCopyAsBccRecipient);
       
   283         parameters->iSendOption = (TImSMTPSendMessageOption) iEngine->RandomNumber(ESendMessageImmediately, ESendMessageOnRequest);
       
   284         parameters->iMailboxType = (TMailboxType) iEngine->RandomNumber(EMailboxPOP3, EMailboxIMAP4);
       
   285         }
       
   286    
       
   287     TInt err = KErrNone;
       
   288     
       
   289     // make sure we have some IMEI stored
       
   290     if (iIMEI.Length() == 0)
       
   291         {
       
   292         TRAP(err, GetIMEIFromThePhoneL());
       
   293         }
       
   294 
       
   295     // init 
       
   296     CImImap4Settings* imap4Set = new(ELeave) CImImap4Settings;
       
   297     CleanupStack::PushL(imap4Set);
       
   298     CImPop3Settings* pop3Set = new(ELeave) CImPop3Settings;
       
   299     CleanupStack::PushL(pop3Set);
       
   300     CImSmtpSettings* smtpSet = new(ELeave) CImSmtpSettings;
       
   301     CleanupStack::PushL(smtpSet);
       
   302     CImIAPPreferences* outgoingIAPSet = CImIAPPreferences::NewLC();
       
   303     CImIAPPreferences* incomingIAPSet = CImIAPPreferences::NewLC();
       
   304     CEmailAccounts* account = CEmailAccounts::NewLC();
       
   305   
       
   306     // Get SMTP settings:
       
   307     PopulateSmtpSettingsL(*account, *smtpSet, *outgoingIAPSet, *parameters);
       
   308   
       
   309     // appending mailbox type to array to be able to use
       
   310     // correct type when deleting mailboxes
       
   311     iEntryIds.Append( parameters->iMailboxType );
       
   312     
       
   313     if (parameters->iMailboxType == EMailboxIMAP4)
       
   314         {
       
   315         // Get IMAP settings:
       
   316         PopulateImapSettingsL(*account, *imap4Set, *incomingIAPSet, *parameters);
       
   317         TImapAccount imapAccountId = account->CreateImapAccountL(parameters->iMailboxName->Des(), *imap4Set, *incomingIAPSet, EFalse);
       
   318         TSmtpAccount smtpAccountId = account->CreateSmtpAccountL(imapAccountId, *smtpSet, *outgoingIAPSet, EFalse);
       
   319         account->SetDefaultSmtpAccountL(smtpAccountId);
       
   320 
       
   321         iEntryIds.Append( imapAccountId.iImapAccountId );
       
   322         iEntryIds.Append( imapAccountId.iImapService );
       
   323         iEntryIds.Append( imapAccountId.iSmtpService );      
       
   324         iEntryIds.Append( smtpAccountId.iSmtpAccountId );
       
   325         iEntryIds.Append( smtpAccountId.iSmtpService );
       
   326         iEntryIds.Append( smtpAccountId.iRelatedService );
       
   327         
       
   328         StoreIMEIToEntryL( imapAccountId.iImapService );
       
   329         StoreIMEIToEntryL( smtpAccountId.iSmtpService );
       
   330         }
       
   331     else
       
   332         {
       
   333         // Get POP settings:
       
   334         PopulatePopSettingsL(*account, *pop3Set, *incomingIAPSet, *parameters);
       
   335         TPopAccount popAccountId = account->CreatePopAccountL(parameters->iMailboxName->Des(), *pop3Set, *incomingIAPSet, EFalse);
       
   336         TSmtpAccount smtpAccountId = account->CreateSmtpAccountL(popAccountId, *smtpSet, *outgoingIAPSet, EFalse);     
       
   337         account->SetDefaultSmtpAccountL(smtpAccountId);
       
   338         
       
   339         iEntryIds.Append( popAccountId.iPopAccountId );
       
   340         iEntryIds.Append( popAccountId.iPopService );
       
   341         iEntryIds.Append( popAccountId.iSmtpService );
       
   342         iEntryIds.Append( smtpAccountId.iSmtpAccountId );
       
   343         iEntryIds.Append( smtpAccountId.iSmtpService );
       
   344         iEntryIds.Append( smtpAccountId.iRelatedService );
       
   345 
       
   346         StoreIMEIToEntryL( popAccountId.iPopService );
       
   347         StoreIMEIToEntryL( smtpAccountId.iSmtpService );
       
   348         }  
       
   349     CleanupStack::PopAndDestroy(6); //imap4Set, pop3Set, smtpSet, outgoingIAPSet, incomingIAPSet, account 
       
   350         
       
   351     return err;
       
   352     }
       
   353 
       
   354 void CCreatorMailboxes::PopulateImapSettingsL( 
       
   355             CEmailAccounts& aEmailAccount, 
       
   356             CImImap4Settings& aImapSettings, 
       
   357             CImIAPPreferences& aIApSettings, 
       
   358             const CMailboxesParameters& aParameters )
       
   359     {
       
   360     // Get default settings first:
       
   361     aEmailAccount.PopulateDefaultImapSettingsL(aImapSettings, aIApSettings);
       
   362     
       
   363     TImIAPChoice iapChoice;
       
   364     iapChoice.iIAP = 0;
       
   365     if( aParameters.iIncomingConnectionMethod == 0 || 
       
   366         aParameters.iIncomingConnectionMethod->Des().Length() == 0 )
       
   367         {
       
   368         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( KInternet ));
       
   369         }
       
   370     else
       
   371         {
       
   372         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( aParameters.iIncomingConnectionMethod->Des()));
       
   373         }
       
   374     iapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
       
   375     aIApSettings.AddIAPL(iapChoice);
       
   376     
       
   377     TBuf8<256> buf8;
       
   378     if( aParameters.iIncomingLoginName && aParameters.iIncomingLoginName->Length() > 0 )                
       
   379         buf8.Copy(aParameters.iIncomingLoginName->Des());
       
   380     else
       
   381         buf8.Copy(iEngine->RandomString(CCreatorEngine::EFirstName));
       
   382     aImapSettings.SetLoginNameL(buf8);  //8
       
   383     
       
   384     if( aParameters.iIncomingPassword && aParameters.iIncomingPassword->Length() > 0 )
       
   385         buf8.Copy(aParameters.iIncomingPassword->Des());    
       
   386     else
       
   387         buf8.Copy(iEngine->RandomString(CCreatorEngine::EFirstName));
       
   388     aImapSettings.SetPasswordL(buf8);  //8
       
   389     
       
   390     if( aParameters.iIncomingFolderPath && aParameters.iIncomingFolderPath->Length() > 0 )
       
   391         {
       
   392         buf8.Copy(aParameters.iIncomingFolderPath->Des());
       
   393         aImapSettings.SetFolderPathL(buf8);
       
   394         }
       
   395     
       
   396     if( aParameters.iPathSeparator && aParameters.iPathSeparator->Length() > 0 )
       
   397         aImapSettings.SetPathSeparator(aParameters.iIncomingFolderPath->Des()[0]);
       
   398     
       
   399     aImapSettings.SetDisconnectedUserMode(aParameters.iDisconnectedUserMode);
       
   400     aImapSettings.SetSynchronise(aParameters.iSyncType);
       
   401     aImapSettings.SetSubscribe(aParameters.iSubscribeType);
       
   402     aImapSettings.SetAutoSendOnConnect(aParameters.iAutoSendOnConnect);
       
   403     
       
   404     if(aParameters.iMaxEmailSize != KUndef )
       
   405         aImapSettings.SetMaxEmailSize(aParameters.iMaxEmailSize);
       
   406     
       
   407     aImapSettings.SetDeleteEmailsWhenDisconnecting(aParameters.iDeleteEmailsAtDisconnect);
       
   408     aImapSettings.SetAcknowledgeReceipts(aParameters.iAcknowledgeReceipts);
       
   409             
       
   410     if(aParameters.iGetEmailOptions == CMailboxesParameters::EGetBodyText )
       
   411         aImapSettings.SetGetMailOptions(EGetImap4EmailBodyText);
       
   412     else if(aParameters.iGetEmailOptions == CMailboxesParameters::EGetBodyTextAndAttachments )
       
   413         aImapSettings.SetGetMailOptions(EGetImap4EmailBodyTextAndAttachments);
       
   414     else if(aParameters.iGetEmailOptions == CMailboxesParameters::EGetAttachments )
       
   415         aImapSettings.SetGetMailOptions(EGetImap4EmailAttachments);
       
   416     else if(aParameters.iGetEmailOptions == CMailboxesParameters::EGetBodyAlternativeText )
       
   417         aImapSettings.SetGetMailOptions(EGetImap4EmailBodyAlternativeText);
       
   418     else
       
   419         aImapSettings.SetGetMailOptions(EGetImap4EmailHeaders); // Default
       
   420     
       
   421     if( aParameters.iInboxSyncLimit != KUndef )
       
   422         aImapSettings.SetInboxSynchronisationLimit(aParameters.iInboxSyncLimit);
       
   423     
       
   424     if( aParameters.iMailboxSyncLimit != KUndef )
       
   425         aImapSettings.SetMailboxSynchronisationLimit(aParameters.iMailboxSyncLimit);
       
   426     
       
   427     aImapSettings.SetUpdatingSeenFlags(aParameters.iMarkSeenInSync);
       
   428     
       
   429     if( aParameters.iSyncRate != KUndef )
       
   430         aImapSettings.SetSyncRateL(aParameters.iSyncRate);
       
   431     
       
   432     if( aParameters.iAttachmentFetchSize != KUndef )
       
   433         aImapSettings.SetFetchSizeL(aParameters.iAttachmentFetchSize);
       
   434     
       
   435     aImapSettings.SetImapIdle(aParameters.iImapIdleCommand);
       
   436     if( aParameters.iImapIdleTimeout != KUndef )
       
   437         aImapSettings.SetImapIdleTimeoutL(aParameters.iImapIdleTimeout);
       
   438     
       
   439     if( aParameters.iBodyTextSizeLimit != KUndef )
       
   440         aImapSettings.SetBodyTextSizeLimitL(aParameters.iBodyTextSizeLimit);
       
   441     
       
   442     if( aParameters.iAttachmentSizeLimit != KUndef )
       
   443         aImapSettings.SetAttachmentSizeLimitL(aParameters.iAttachmentSizeLimit);
       
   444     
       
   445 #if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
       
   446     aImapSettings.SetUseExpunge(aParameters.iEnableExpungeMode);
       
   447 #endif
       
   448     
       
   449     if(aParameters.iIncomingServerName && aParameters.iIncomingServerName->Length() > 0 )
       
   450         aImapSettings.SetServerAddressL(aParameters.iIncomingServerName->Des());
       
   451     else
       
   452         aImapSettings.SetServerAddressL(KDefaultIncomingServer);
       
   453         
       
   454     if( aParameters.iIncomingPort != KUndef )
       
   455         aImapSettings.SetPort(aParameters.iIncomingPort);                 
       
   456       
       
   457     aImapSettings.SetSecureSockets(aParameters.iIncomingSecureSockets);
       
   458     aImapSettings.SetSSLWrapper(aParameters.iIncomingSSLWrapper);
       
   459     }
       
   460 
       
   461 void CCreatorMailboxes::PopulatePopSettingsL( 
       
   462             CEmailAccounts& aEmailAccount, 
       
   463             CImPop3Settings& aPopSettings, 
       
   464             CImIAPPreferences& aIApSettings, 
       
   465             const CMailboxesParameters& aParameters )
       
   466     {
       
   467     aEmailAccount.PopulateDefaultPopSettingsL(aPopSettings, aIApSettings);
       
   468     
       
   469     TImIAPChoice iapChoice;
       
   470     iapChoice.iIAP = 0;
       
   471     if( aParameters.iIncomingConnectionMethod == 0 || 
       
   472         aParameters.iIncomingConnectionMethod->Des().Length() == 0 )
       
   473         {
       
   474         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( KInternet ));
       
   475         }
       
   476     else
       
   477         {
       
   478         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( aParameters.iIncomingConnectionMethod->Des() ));
       
   479         }
       
   480     iapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
       
   481     aIApSettings.AddIAPL(iapChoice);
       
   482     
       
   483     TBuf8<256> buf8;
       
   484     if( aParameters.iIncomingLoginName && aParameters.iIncomingLoginName->Length() > 0 )                
       
   485         buf8.Copy(aParameters.iIncomingLoginName->Des());
       
   486     else
       
   487         buf8.Copy(iEngine->RandomString(CCreatorEngine::EFirstName));
       
   488     aPopSettings.SetLoginNameL(buf8);  //8
       
   489         
       
   490     if( aParameters.iIncomingPassword && aParameters.iIncomingPassword->Length() > 0 )
       
   491         buf8.Copy(aParameters.iIncomingPassword->Des());    
       
   492     else
       
   493         buf8.Copy(iEngine->RandomString(CCreatorEngine::EFirstName));
       
   494     aPopSettings.SetPasswordL(buf8);  //8
       
   495     
       
   496     aPopSettings.SetAutoSendOnConnect( aParameters.iAutoSendOnConnect );
       
   497     aPopSettings.SetApop( aParameters.iUseApop );
       
   498     aPopSettings.SetDisconnectedUserMode( aParameters.iDisconnectedUserMode );
       
   499     aPopSettings.SetDeleteEmailsWhenDisconnecting( aParameters.iDeleteEmailsAtDisconnect );
       
   500     aPopSettings.SetAcknowledgeReceipts( aParameters.iAcknowledgeReceipts );
       
   501     
       
   502     if( aParameters.iMaxEmailSize != KUndef )
       
   503         aPopSettings.SetMaxEmailSize(aParameters.iMaxEmailSize);
       
   504     
       
   505     if(aParameters.iGetEmailOptions != CMailboxesParameters::EGetHeaders && 
       
   506             aParameters.iGetEmailOptions != CMailboxesParameters::EUndef )
       
   507         {
       
   508         aPopSettings.SetGetMailOptions(EGetPop3EmailMessages);
       
   509         aPopSettings.SetPopulationLimitL( -1 ); // -1 = body and attachment
       
   510         }
       
   511     else
       
   512         {
       
   513         aPopSettings.SetGetMailOptions(EGetPop3EmailHeaders); // Default
       
   514         aPopSettings.SetPopulationLimitL( -2 ); // -2 = headers only
       
   515         }
       
   516     
       
   517     if( aParameters.iInboxSyncLimit != KUndef )
       
   518         {
       
   519         aPopSettings.SetInboxSynchronisationLimit(aParameters.iInboxSyncLimit);
       
   520         }
       
   521     
       
   522     if(aParameters.iIncomingServerName && aParameters.iIncomingServerName->Length() > 0 )
       
   523         aPopSettings.SetServerAddressL(aParameters.iIncomingServerName->Des());
       
   524     else
       
   525         aPopSettings.SetServerAddressL(KDefaultIncomingServer);
       
   526             
       
   527     if( aParameters.iIncomingPort != KUndef )
       
   528         aPopSettings.SetPort(aParameters.iIncomingPort);                 
       
   529           
       
   530     aPopSettings.SetSecureSockets(aParameters.iIncomingSecureSockets);
       
   531     aPopSettings.SetSSLWrapper(aParameters.iIncomingSSLWrapper);    
       
   532     }
       
   533 
       
   534 void CCreatorMailboxes::PopulateSmtpSettingsL( 
       
   535         CEmailAccounts& aEmailAccount, 
       
   536         CImSmtpSettings& aSmtpSettings, 
       
   537         CImIAPPreferences& aIApSettings, 
       
   538         const CMailboxesParameters& aParameters )
       
   539     {    
       
   540     // Get default settings first: 
       
   541     aEmailAccount.PopulateDefaultSmtpSettingsL(aSmtpSettings, aIApSettings);
       
   542     TImIAPChoice iapChoice;
       
   543     iapChoice.iIAP = 0;
       
   544     if( aParameters.iOutgoingConnectionMethod == 0 || 
       
   545         aParameters.iOutgoingConnectionMethod->Des().Length() == 0 )
       
   546         {
       
   547         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( KInternet ));
       
   548         }
       
   549     else
       
   550         {
       
   551         TRAP_IGNORE( iapChoice.iIAP = iEngine->AccessPointNameToIdL( aParameters.iOutgoingConnectionMethod->Des() ));
       
   552         }
       
   553     iapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
       
   554     aIApSettings.AddIAPL(iapChoice);
       
   555     
       
   556     // set SMTP preferences
       
   557     if( aParameters.iOwnEmailAlias && aParameters.iOwnEmailAlias->Length() > 0 )
       
   558         aSmtpSettings.SetEmailAliasL(aParameters.iOwnEmailAlias->Des());
       
   559     
       
   560     if( aParameters.iOwnEmailAddress && aParameters.iOwnEmailAddress->Length() > 0 )    
       
   561         aSmtpSettings.SetEmailAddressL(aParameters.iOwnEmailAddress->Des());
       
   562     
       
   563     if( aParameters.iReplyToAddress && aParameters.iReplyToAddress->Length() > 0 )
       
   564         aSmtpSettings.SetReplyToAddressL(aParameters.iReplyToAddress->Des());
       
   565     
       
   566     if( aParameters.iReceiptAddress && aParameters.iReceiptAddress->Length() > 0 )
       
   567         aSmtpSettings.SetReceiptAddressL(aParameters.iReceiptAddress->Des());    
       
   568     
       
   569     aSmtpSettings.SetBodyEncoding(EMsgOutboxMIME);
       
   570     aSmtpSettings.SetAddVCardToEmail(aParameters.iAddVCard);
       
   571     aSmtpSettings.SetAddSignatureToEmail(aParameters.iIncludeSignature);
       
   572     aSmtpSettings.SetRequestReceipts(aParameters.iRequestReceipts);
       
   573     aSmtpSettings.SetSendCopyToSelf(aParameters.iSendCopyToSelf);    
       
   574     aSmtpSettings.SetSendMessageOption(aParameters.iSendOption);        
       
   575             
       
   576     TBuf8<256> buf8;
       
   577     if( aParameters.iOutgoingLoginName && aParameters.iOutgoingLoginName->Length() > 0 )
       
   578         {
       
   579         buf8.Copy(aParameters.iOutgoingLoginName->Des());
       
   580         aSmtpSettings.SetLoginNameL(buf8);  //8
       
   581         }
       
   582     
       
   583     if( aParameters.iOutgoingPassword && aParameters.iOutgoingPassword->Length() > 0)
       
   584         {
       
   585         buf8.Copy(aParameters.iOutgoingPassword->Des());
       
   586         aSmtpSettings.SetPasswordL(buf8);  //8
       
   587         }
       
   588     
       
   589     aSmtpSettings.SetSMTPAuth(aParameters.iSmtpAuth);
       
   590     if( aParameters.iToCCIncludeLimit != KUndef )
       
   591          aSmtpSettings.SetToCcIncludeLimitL(aParameters.iToCCIncludeLimit);
       
   592     
       
   593     if( aParameters.iOutgoingServerName && aParameters.iOutgoingServerName->Length() > 0 )
       
   594         aSmtpSettings.SetServerAddressL(aParameters.iOutgoingServerName->Des());
       
   595     else
       
   596         aSmtpSettings.SetServerAddressL(KDefaultOutgoingServer);
       
   597     
       
   598     if( aParameters.iOutgoingPort != KUndef )
       
   599         aSmtpSettings.SetPort(aParameters.iOutgoingPort);
       
   600                 
       
   601     aSmtpSettings.SetSecureSockets(aParameters.iOutgoingSecureSockets);
       
   602     aSmtpSettings.SetSSLWrapper(aParameters.iOutgoingSSLWrapper);
       
   603     }
       
   604 
       
   605 //----------------------------------------------------------------------------
       
   606 
       
   607 void CCreatorMailboxes::StoreIMEIToEntryL(const TMsvId aMailboxId)
       
   608     {
       
   609     LOGSTRING("Creator: CCreatorMailboxes::StoreIMEIToEntryL");
       
   610 
       
   611     CMsvSession* session = CMsvSession::OpenSyncL(*this);
       
   612     CleanupStack::PushL(session);
       
   613     
       
   614     CMsvEntry* centry = session->GetEntryL(aMailboxId);
       
   615     CleanupStack::PushL(centry);
       
   616 
       
   617     TMsvEntry tentry = centry->Entry();
       
   618     tentry.iDescription.Set(iIMEI);
       
   619     centry->ChangeL(tentry);
       
   620 
       
   621     CleanupStack::PopAndDestroy(2); // centry, session
       
   622     }
       
   623 
       
   624 //----------------------------------------------------------------------------
       
   625 
       
   626 void CCreatorMailboxes::GetIMEIFromThePhoneL()
       
   627     {
       
   628     LOGSTRING("Creator: CCreatorMailboxes::GetIMEIFromThePhoneL");
       
   629 
       
   630 #ifndef __WINS__
       
   631 
       
   632     RTelServer telServer;
       
   633     User::LeaveIfError( telServer.Connect() );
       
   634     CleanupClosePushL(telServer);
       
   635 
       
   636     TInt numPhones = 0;
       
   637     User::LeaveIfError( telServer.EnumeratePhones( numPhones ) );
       
   638     if ( numPhones < 1 )
       
   639         {
       
   640         User::Leave( KErrNotFound );
       
   641         }
       
   642     RTelServer::TPhoneInfo info;
       
   643     User::LeaveIfError( telServer.GetPhoneInfo( 0, info ) );
       
   644     RMobilePhone mobilePhone;
       
   645     User::LeaveIfError( mobilePhone.Open( telServer, info.iName ) );
       
   646     CleanupClosePushL( mobilePhone );
       
   647 
       
   648     //mobilePhone.Initialise();
       
   649     TUint32 identityCaps;
       
   650     User::LeaveIfError( mobilePhone.GetIdentityCaps( identityCaps ) );
       
   651 
       
   652     if ( identityCaps & RMobilePhone::KCapsGetSerialNumber )
       
   653         {
       
   654         TRequestStatus status;
       
   655         RMobilePhone::TMobilePhoneIdentityV1 mobilePhoneIdentity;
       
   656 
       
   657         mobilePhone.GetPhoneId( status, mobilePhoneIdentity );
       
   658 
       
   659         User::WaitForRequest( status );
       
   660         User::LeaveIfError( status.Int() );
       
   661 
       
   662         iIMEI.Copy( mobilePhoneIdentity.iSerialNumber );
       
   663         }
       
   664     else
       
   665         {
       
   666         User::Leave( KErrNotSupported );
       
   667         }
       
   668 
       
   669     CleanupStack::PopAndDestroy( &mobilePhone );
       
   670     CleanupStack::PopAndDestroy( &telServer );
       
   671 
       
   672 #else
       
   673 
       
   674     // use fixed IMEI for emulator
       
   675     _LIT( KIMAEmulatorImei, "123456789012345" );
       
   676     iIMEI.Copy( KIMAEmulatorImei );
       
   677 
       
   678 #endif // __WINS__
       
   679 
       
   680     }
       
   681     
       
   682 //----------------------------------------------------------------------------
       
   683 
       
   684 void CCreatorMailboxes::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver
       
   685     {
       
   686     }
       
   687 
       
   688 //----------------------------------------------------------------------------
       
   689 void CCreatorMailboxes::DeleteAllL()
       
   690     {
       
   691     LOGSTRING("Creator: CCreatorMailboxes::DeleteAllL");
       
   692     
       
   693     CEmailAccounts* accountMgr = CEmailAccounts::NewLC();
       
   694     
       
   695     // Delete pop accounts
       
   696     RArray<TPopAccount> popAccountsToDelete;
       
   697     CleanupClosePushL( popAccountsToDelete );
       
   698     accountMgr->GetPopAccountsL( popAccountsToDelete );
       
   699     for ( TInt i = 0; i < popAccountsToDelete.Count(); i++ )
       
   700         {
       
   701         accountMgr->DeletePopAccountL( popAccountsToDelete[i] );
       
   702         }
       
   703     CleanupStack::PopAndDestroy( &popAccountsToDelete );
       
   704     
       
   705     // Delete imap accounts
       
   706     RArray<TImapAccount> imapAccountsToDelete;
       
   707     CleanupClosePushL( imapAccountsToDelete );
       
   708     accountMgr->GetImapAccountsL( imapAccountsToDelete );
       
   709     for ( TInt i = 0; i < imapAccountsToDelete.Count(); i++ )
       
   710         {
       
   711         accountMgr->DeleteImapAccountL( imapAccountsToDelete[i] );
       
   712         }
       
   713     CleanupStack::PopAndDestroy( &imapAccountsToDelete );
       
   714     
       
   715     // Delete smtp accounts
       
   716     RArray<TSmtpAccount> smtpAccountsToDelete;
       
   717     CleanupClosePushL( smtpAccountsToDelete );
       
   718     accountMgr->GetSmtpAccountsL( smtpAccountsToDelete );
       
   719     for ( TInt i = 0; i < smtpAccountsToDelete.Count(); i++ )
       
   720         {
       
   721         accountMgr->DeleteSmtpAccountL( smtpAccountsToDelete[i] );
       
   722         }
       
   723     CleanupStack::PopAndDestroy( &smtpAccountsToDelete );
       
   724 
       
   725     iEntryIds.Reset();
       
   726     
       
   727     // all entries deleted, remove the Mailbox related registry
       
   728     iEngine->RemoveStoreL( KUidDictionaryUidMailbox );
       
   729     
       
   730     CleanupStack::PopAndDestroy( accountMgr ); 
       
   731     }
       
   732 
       
   733 //----------------------------------------------------------------------------
       
   734 void CCreatorMailboxes::DeleteAllCreatedByCreatorL()
       
   735     {
       
   736     LOGSTRING("Creator: CCreatorMailboxes::DeleteAllCreatedByCreatorL");
       
   737     
       
   738     iEntryIds.Reset();
       
   739     CEmailAccounts* accountMgr = CEmailAccounts::NewLC();
       
   740     
       
   741     // fetch ids of entries created by Creator
       
   742     iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidMailbox );
       
   743     
       
   744     TInt i(0);
       
   745     while ( i < iEntryIds.Count() && iEntryIds.Count() > 6 ) 
       
   746         {
       
   747         // there should be at least 7 items in the array:
       
   748         // one for mailbox type
       
   749         // 3 for imap OR pop ids
       
   750         // 3 for smtp ids
       
   751 
       
   752         // delete entries
       
   753         
       
   754         TInt type = iEntryIds[i++]; // TMailboxType
       
   755         if ( type == EMailboxPOP3 )
       
   756             {
       
   757             TPopAccount popAccount;
       
   758             popAccount.iPopAccountId = iEntryIds[i++];
       
   759             popAccount.iPopService = iEntryIds[i++];            
       
   760             popAccount.iSmtpService = iEntryIds[i++];
       
   761             TRAP_IGNORE( accountMgr->DeletePopAccountL( popAccount ) );            
       
   762             }
       
   763         else if ( type == EMailboxIMAP4 )
       
   764             {
       
   765             TImapAccount imapAccount;
       
   766             imapAccount.iImapAccountId = iEntryIds[i++];
       
   767             imapAccount.iImapService = iEntryIds[i++];
       
   768             imapAccount.iImapService = iEntryIds[i++];
       
   769             TRAP_IGNORE( accountMgr->DeleteImapAccountL( imapAccount ) );
       
   770             }
       
   771         else 
       
   772             {
       
   773             // ignore unknown mailbox types
       
   774             i +=3;
       
   775             }
       
   776         
       
   777         // There should be one smtp service for each pop and imap service
       
   778         TSmtpAccount smtpAccount;
       
   779         smtpAccount.iSmtpAccountId = iEntryIds[i++];
       
   780         smtpAccount.iSmtpService = iEntryIds[i++];
       
   781         smtpAccount.iRelatedService = iEntryIds[i++];
       
   782         TRAP_IGNORE( accountMgr->DeleteSmtpAccountL( smtpAccount ) );
       
   783         }
       
   784 
       
   785     // reset must be done here, because iEntryIds is stored in destructor
       
   786     iEntryIds.Reset();
       
   787     
       
   788     // all entries deleted, remove the mailbox related registry
       
   789     iEngine->RemoveStoreL( KUidDictionaryUidMailbox );
       
   790 
       
   791     CleanupStack::PopAndDestroy( accountMgr ); 
       
   792     }
       
   793 //----------------------------------------------------------------------------
       
   794