有没有办法使用C#将PST文件导入Outlook?

时间:2018-03-29 15:12:02

标签: c# outlook office-interop pst

使用:Visual Studio 2017(语言:C#)

我在PowerShell脚本中有类似的功能,但我需要在Visual Studio中单击按钮时执行它的C#版本:

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 个答案:

答案 0 :(得分:0)

如果没有额外的套餐,我不能100%确定。所以我只是执行一个执行powershell脚本的shell命令,因为你已经有了。一点点黑客,但似乎是最简单的选择。

using System.Diagnostics;
Process.Start("powershell.exe " + scriptLocation);

答案 1 :(得分:0)

您可以通过以下方式执行此操作:

在您的项目中,右键单击“引用”并添加对程序集“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");
}