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

如何在无Office的C#程序中发送带MIP加密的定向用户邮件?

MIP敏感度标签邮件加密的核心机制

M365的MIP自定义敏感度标签加密,本质是绑定Azure信息保护(AIP) 的权限管理策略,不是单纯对邮件正文加密:

  • 加密标签会关联预设的权限规则,比如允许指定内外部用户查看、编辑,甚至限制转发/打印;
  • 邮件被标记加密后,会被AIP包装成受权限保护的容器,而非仅加密正文文本;
  • Outlook识别加密状态,依赖邮件头的MIP标签标识+内容的AIP保护双重验证,缺一不可。
C#程序实现步骤(无Office环境)

你当前的问题核心是只添加了标签头,未通过MIP SDK应用AIP保护。以下是完整实现流程:

1. 验证并获取正确的加密标签

通过MIP SDK获取标签时,需确认标签具备加密属性:

  • 检查Label.IsProtectionEnabled是否为true;
  • 获取标签关联的ProtectionDescriptor(包含权限策略、允许用户列表等核心信息),这是后续加密的关键依据。

2. 用MIP SDK处理邮件内容(核心步骤)

不能直接用MimeKit加密正文,必须通过MIP SDK的ProtectionEngine将整个邮件流包装为受AIP保护的内容:

// 假设已完成MIP SDK初始化,获取到带加密的Label实例
var encryptedLabel = GetValidEncryptedLabel();
var protectionDescriptor = encryptedLabel.ProtectionSettings.Descriptor;

// 1. 构建原始邮件(MimeKit常规操作)
var rawMessage = new MimeMessage();
rawMessage.From.Add(new MailboxAddress("发件人", "sender@yourdomain.com"));
rawMessage.To.Add(new MailboxAddress("收件人", "recipient@external.com"));
rawMessage.Subject = "测试加密邮件";
rawMessage.Body = new TextPart("html") { Text = "<p>这是受MIP保护的邮件内容</p>" };

// 2. 将原始邮件转为内存流
using var rawStream = new MemoryStream();
rawMessage.WriteTo(rawStream);
rawStream.Position = 0;

// 3. 用MIP SDK创建受保护的流
var protectionEngine = GetInitializedProtectionEngine(); // 已初始化的ProtectionEngine实例
using var protectedStream = protectionEngine.CreateProtectedStream(
    rawStream,
    protectionDescriptor,
    ProtectionSettings.FromTemplate(protectionDescriptor));

// 4. 从受保护流重新加载邮件
protectedStream.Position = 0;
var protectedMessage = MimeMessage.Load(protectedStream);

3. 添加MIP标签识别头

给处理后的邮件添加专属头,让Outlook能识别标签和加密状态:

protectedMessage.Headers.Add("X-MS-Classification", encryptedLabel.Name);
protectedMessage.Headers.Add("X-MS-Label-Id", encryptedLabel.Id.ToString());
protectedMessage.Headers.Add("X-MS-Label-Name", encryptedLabel.Name);

4. 发送受保护邮件

用MailKit的SmtpClient正常发送即可,注意这里的传输加密(SSL/TLS)是邮件传输安全,和MIP内容加密是两个层面,无需额外调整:

using var smtpClient = new SmtpClient();
smtpClient.Connect("smtp.yourdomain.com", 587, SecureSocketOptions.StartTls);
smtpClient.Authenticate("sender@yourdomain.com", "your_password");
smtpClient.Send(protectedMessage);
smtpClient.Disconnect(true);
常见问题排查
  • 仅添加标签头但未加密内容:Outlook只会显示标签,不会标识加密状态,必须通过MIP SDK处理邮件流;
  • 自行加密正文无效:MIP加密是权限容器保护,不是文本加密,直接加密正文无法被AIP识别;
  • 定向用户不生效:需确认标签的ProtectionDescriptor中已包含指定的内外部用户权限规则,MIP SDK会自动将权限策略嵌入受保护内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:05:13