Есть ли способ импортировать файлы 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);