Search code examples
c#outlookoffice-interoppst

Is there a way to import PST files into Outlook using C#?


Using: Visual Studio 2017 (Language: C#)

I have a similar function written below in PowerShell script, but I need the C# version of it to execute on the click of a button within Visual Studio:

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$outlook = new-object -comobject outlook.application

$namespace = $outlook.GetNameSpace("MAPI")

dir “$env:userprofile\Documents\Outlook Files\*.pst” | % { $namespace.AddStore($_.FullName) }

Any insight or examples of code would be much appreciated.


Solution

  • You can do that the following way:

    In your project, right click on "References" and add a reference to the assembly "Microsoft.Office.Interop.Outlook".

    Then you can use the following code:

    /// <summary>
    /// Get a reference to an already running or a newly started Outlook instance
    /// </summary>
    Microsoft.Office.Interop.Outlook.Application GetOutlookApp()
    {
        Microsoft.Office.Interop.Outlook.Application app = null;
    
        // Try to get running instance
        try
        {
            app = Marshal.GetActiveObject("Outlook.Application") as Microsoft.Office.Interop.Outlook.Application;
        }
        catch(Exception)
        {
            // Ignore exception when Outlook is not running
        }
    
        // When outlook was not running, try to start it
        if(app == null)
        {
            app = new Microsoft.Office.Interop.Outlook.Application();
        }
    
        return app;
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        const string fileName = @"D:\MyDings.pst";
    
        var app = GetOutlookApp();
        var nameSpace = app.GetNamespace("MAPI");
    
        nameSpace.AddStore(fileName);
    
        MessageBox.Show("Done");
    }