0

Pstcreation works properly with outlook installed.

Now, I am trying to create a pst file with standalone version of MAPI . But my process is stuck in pstStore.Remove(). . Further I shut down the pst creation process while it was stuck in pstStore.Remove(). The pst is there in the path. But when i opened the pst after moving it to another system where outlook is installed, there are no mails in the pst though the size of the pst is significant.

2nd time: I ran the pst process and repeated the above steps. This time there are mails in the pst file.

3rd time: I ran the pst process and repeated the above steps. This time there are no mails in the pst file.

Does redemption need a special handling to create pst with stand-alone version of MAPI or the same code that works with outlook installed should do without any modification?

@Dimitry : I am not able to access my yahoo account.

Code:

private bool CreatePstWithRedemption(EmailJTableArgs objJTablArgs, EmailFilterArgs objFilterArgs,
                                     EmailExportRequestParams emailExportRequestParams)
{
    RDOSession oSession = null;
    IRDOStore store = null;
    RDOFolder fFOlder = null;
    RDOFolder childFolder = null;
    IRDOItems folderItems = null;
    var pstCreationStatus = false;
    try
    {
        oSession = new RDOSession();
        store = oSession.LogonPstStore(_fileName, 1, "PST");

        var folderName = Path.GetFileNameWithoutExtension(_fileName);

        if (store != null)
        {
            fFOlder = store.IPMRootFolder;

            foreach (RDOFolder folder in fFOlder.Folders)
            {
                folder.Delete();
            }
            childFolder = fFOlder.Folders.Add(folderName, Type.Missing);
            folderItems = childFolder.Items;


            var resultOfGetEmails = new ResultGetEmails();
            resultOfGetEmails.TotalCount = -1;

            do
            {
                var journalEmails = GetEmailList(objFilterArgs, objJTablArgs, emailExportRequestParams,
                                                 resultOfGetEmails);
                for (var i = 0; i < journalEmails.Count; i++)
                {
                    IRDOMail mail = null;
                    try
                    {
                        mail = folderItems.Add(rdoItemType.olMailItem);

                        // populate mail fields

                        mail.Sent = true;
                        mail.Save();
                    }
                    finally
                    {
                        if (mail != null)
                            Marshal.ReleaseComObject(mail);
                    }
                }

                resultOfGetEmails.TotalCount -= BatchSize;

                objJTablArgs.PageStartIndex += BatchSize;
            } while (resultOfGetEmails.TotalCount > 0);
            pstCreationStatus = true;
            store.Remove();
        }
    }

    finally
    {
          // Do cleanup
         if (oSession != null && oSession.LoggedOn)
            {
                try
                {
                    oSession.Logoff();
                    Marshal.ReleaseComObject(oSession);
                }
                catch
                {
                }
            }

    }
    return pstCreationStatus;
}
Sameer
  • 3,124
  • 5
  • 30
  • 57

1 Answers1

0

Why do you want to remove the (one and only) store from the (temporary) profile? LogonPstStore will create (and immediately delete) a temporary profile, so there is no reason to manage the stores in a profile that will deleted anyway.

Dmitry Streblechenko
  • 62,942
  • 4
  • 53
  • 78
  • But again when i commented store.Remove() .. the process got stuck in oSession.Logoff(); – Sameer Nov 03 '14 at 06:14
  • Anyway, should the process get stuck? and I don't see that happening when using redemption with outlook installed. – Sameer Nov 03 '14 at 06:25