Есть ли способ импортировать файлы PST в Outlook, используя C#?

Использование: Visual Studio 2017 (язык: C#)

У меня есть похожая функция, написанная ниже в скрипте PowerShell, но мне нужна ее версия на C# для выполнения одним нажатием кнопки в 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) }

Любое понимание или примеры кода будет высоко ценится.

2 ответа

Решение

Вы можете сделать это следующим образом:

В вашем проекте щелкните правой кнопкой мыши "References" и добавьте ссылку на сборку "Microsoft.Office.Interop.Outlook".

Тогда вы можете использовать следующий код:

/// <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");
}

Я не уверен на 100%, возможно ли это без дополнительных пакетов. Поэтому я бы просто выполнил команду оболочки, выполняющую сценарий powershell, поскольку у вас уже есть это. Немного взломать, но, кажется, самый простой вариант.

using System.Diagnostics;
Process.Start("powershell.exe " + scriptLocation);
Другие вопросы по тегам