【问题标题】:Is there a way to import PST files into Outlook using C#?有没有办法使用 C# 将 PST 文件导入 Outlook?
【发布时间】:2018-09-08 14:47:16
【问题描述】:

使用: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) }

任何见解或代码示例将不胜感激。

【问题讨论】:

    标签: c# outlook office-interop pst


    【解决方案1】:

    您可以通过以下方式做到这一点:

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

    【讨论】:

    • 有没有一种方法可以指定从设置 const string fileName = @"D:\MyDings.太平洋标准时间”; ?
    • 列出该目录中带有扩展名的文件,并为每个文件调用 AddStore(Powershell 代码也是这样做的)。这超出了这个问题的范围,但看看stackoverflow.com/questions/13301053/…
    • 关于如何获取用户配置文件的文件夹路径,例如参见stackoverflow.com/questions/9993561/…
    • 您的答案非常适合指定单个 .pst 文件!有没有一种方法可以在不指定每个文件名的情况下添加存储我的所有 PST?就像一个 foreach 一样,AddStore 的每个 .pst 在一个文件夹或目录中..?
    • CO_E_SERVER_EXEC_FAILURE 表示您的应用和 Outlook 在不同的上下文中运行。任一应用程序是否以提升的权限运行(以管理员身份运行)?你的应用是如何被调用的?
    【解决方案2】:

    我不能 100% 确定如果没有额外的软件包是否可行。所以我只会执行一个 shell 命令来执行 powershell 脚本,因为你已经有了它。有点小技巧,但似乎是最简单的选择。

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

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 2015-08-24
      • 2017-08-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多