C# to move mail to PST

I want to use C# to access my Outlook Sent Folder and move the messages there to a folder in my PST called Archive. This is the code I was working with, but I am getting multiple compile errors. Does someone here with more coding experience know how to accomplish this?

static void MoveMe()
{
try
{
    _app = new Microsoft.Office.Interop.Outlook.Application();
    _ns = _app.GetNamespace("MAPI");
    _ns.Logon(null, null, false, false);
    Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);
    Outlook.Items SentMailItems = SentMail.Items;
    Outlook.MailItem newEmail = null;
    foreach (object collectionItem in SentMailItems)
    {
        moveMail.Move(Archive);
    }
}
catch (System.Runtime.InteropServices.COMException ex)
{
    Console.WriteLine(ex.ToString());
}
finally
{
    _ns = null;
    _app = null;
    _inboxFolder = null;
}
}

Error list from the comments:

  1. Only assignment, call, increment, decrement, and new object expressions can be used as a statement
  2. The type or namespace name 'Emails' could not be found (are you missing a using directive or an assembly reference?)
  3. The name 'A_Sent' does not exist in the current context
  4. The name 'moveMail' does not exist in the current context
  5. The name 'SentMail' does not exist in the current context

Upvotes: 5

Views: 5412

Answers (1)

Sorceri
Sorceri

Reputation: 8053

here is an example of how you would get the source folder (SentItems) and move them to a PST(Archive).

using Outlook = Microsoft.Office.Interop.Outlook; 

public void MoveMyEmails()
    {
        //set up variables
        Outlook.Application oApp = null;
        Outlook.MAPIFolder oSource = null;
        Outlook.MAPIFolder oTarget = null;
        try
        {
            //instantiate variables
            oApp = new Outlook.Application();
            oSource = oApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
            oTarget = oApp.Session.Folders["Archive"];
            //loop through the folders items
            for (int i = oSource.Items.Count; i > 0; i--)
            {
                move the item
                oSource.Items[i].Move(oTarget);
            }
        }
        catch (Exception e)
        {
            //handle exception
        }
        //release objects
        if (oTarget != null)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oTarget);
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
        if (oSource != null)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oSource);
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
        if (oApp != null)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }

    }

Upvotes: 10

Related Questions