You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Outlook Add-In保存邮件并更新用户本地PC上的指定文件

Outlook 清单式插件改造方案

需求说明

将原有基于Add-in Express开发的COM插件,替换为支持云端集中部署的XML清单式Microsoft外接程序,无需逐台手动安装,Outlook可自动下载更新。
核心功能要求:将选中的邮件以email-import.msg为名保存到指定路径C:\mgatemp\{用户名}-zan中,同时更新同目录下的标记文件标识邮件已存入。

实现方案

由于基于Office JS的Web外接程序运行在沙箱内,无法直接读写本地磁盘,推荐优先采用VSTO外接程序+清单集中部署方案,原有C#业务代码可几乎无修改复用:

  1. 将原有COM插件改造为符合Microsoft 365外接程序清单规范的VSTO插件,生成对应的XML配置清单
  2. 管理员在Microsoft 365管理中心上传清单并分配给目标用户,Outlook会自动为对应账号下载启用插件,无需逐台手动操作

适配后核心代码

var msg = this.OutlookApp.ActiveExplorer().Selection[1];
if (msg is Outlook.MailItem)
{
    try
    {
        // 获取当前系统用户名
        string user = Environment.UserName;
        string basePath = @"C:\mgatemp\";
        string targetDir = Path.Combine(basePath, $"{user}-zan");
        
        // 自动创建不存在的目录
        if (!Directory.Exists(targetDir))
        {
            Directory.CreateDirectory(targetDir);
        }

        Outlook.MailItem mailItem = (msg as Outlook.MailItem);
        // 保存MSG文件
        mailItem.SaveAs(Path.Combine(targetDir, "email-import.msg"), Outlook.OlSaveAsType.olMSG);

        string sentinelPath = Path.Combine(targetDir, "sentinel.txt");
        // 更新标记文件最后修改时间
        File.WriteAllText(sentinelPath, DateTime.UtcNow.ToString("u"));
        File.SetLastWriteTimeUtc(sentinelPath, DateTime.UtcNow);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"写入用户{user}的zan目录失败:{ex.Message}");
    }
}

清单配置核心要点

XML清单需要满足Microsoft 365外接程序规范,核心配置项包括:

  • 插件基础信息:显示名称、描述、适用的Office版本范围
  • 功能入口配置:在Outlook邮件浏览界面的功能区添加触发按钮
  • 权限声明:申请邮件读取、用户信息读取等必要权限

内容的提问来源于stack exchange,提问作者Karl Ehlhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:24:03