能否使用Outlook Add-In保存邮件并更新用户本地PC上的指定文件
Outlook 清单式插件改造方案
需求说明
将原有基于Add-in Express开发的COM插件,替换为支持云端集中部署的XML清单式Microsoft外接程序,无需逐台手动安装,Outlook可自动下载更新。
核心功能要求:将选中的邮件以email-import.msg为名保存到指定路径C:\mgatemp\{用户名}-zan中,同时更新同目录下的标记文件标识邮件已存入。
实现方案
由于基于Office JS的Web外接程序运行在沙箱内,无法直接读写本地磁盘,推荐优先采用VSTO外接程序+清单集中部署方案,原有C#业务代码可几乎无修改复用:
- 将原有COM插件改造为符合Microsoft 365外接程序清单规范的VSTO插件,生成对应的XML配置清单
- 管理员在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
相关产品推荐
相关产品推荐

