0

我正在尝试将 AIP 的 msip_labels 的自定义标头添加到我正在编写的 Powershell 脚本中。我已经想出如何使用 .Net.SMTP 做到这一点:

$message.Headers.Add("msip_labels","MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId ffffffff-5555-6666-7777-888888888888; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method Manual")

根据我所做的研究,理论上应该使用 Outlook 2016:

$Outlook = New-Object -ComObject Outlook.Application
$message = $Outlook.CreateItem(0)

$message.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/msip_labels", "MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application=Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId=ffffffff-5555-6666-7777-888888888888; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method=Manual")

$message.To = "user1@domain.tld"
$message.Cc = "user3@domain.tld"

$message.Subject = "Report"
$message.HTMLBody = @"
<p><font face = "Calibri" size = "3">Hello World</p></font>
"@

$reportMessage.Send()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook) | Out-Null

我使用 MAPI 查看器确认了这一点,这是 Outlook 本身与我仅使用 Outlook 发送的其他电子邮件所使用的内容。但是,当我尝试在我的脚本中运行它时,我收到了这个错误:

Exception setting "SetProperty": Cannot convert the "MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application=Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId=ffffffff-5555-6666-7777-888888888888;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method=Manual" value of type "string" to type "Object".
At C:\emailtest.ps1:21 char:1
+ $message.PropertyAccessor.SetProperty("http://schemas.microsoft ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : RuntimeException

这似乎没有多大意义,它应该是 MAPI 模式中的一个字符串,所以我不确定它为什么认为它应该是一个对象。我什至尝试使用 ConvertFrom-String 将这些值转换为对象,但没有奏效。对此的任何建议将不胜感激。

4

2 回答 2

0

它通过在字符串末尾附加一个空字符(“`0”)对我有用,这是“PtypString”类型所必需的,这是属性所必需的。

https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcdata/0c77892e-288e-435a-9c49-be1c20c7afdb

于 2019-12-08T20:01:54.420 回答
0

尝试减少作为值传递的字符串长度。它工作正常吗?

看来您需要使用 Outlook 所基于的低级 API - 扩展 MAPI。OpenProperty如果使用该方法,它对字符串长度没有任何限制,不像OOM 。此外,您可以考虑使用任何第三方封装该 API,例如 Redemption。

如果您使用PropertyAccessor,您必须对异常处理逻辑有很好的了解。下面我列出了您可能会遇到的一些障碍:

  • Outlook 项目附件的正文和内容无法通过PropertyAccessor.
  • 忽略任何秒的PropertyAccessor日期/时间值字符串属性的大小取决于信息存储类型。
  • 限制:个人文件夹文件 (.pst) 和 Exchange 脱机文件夹文件 (.ost) 不能超过 4,088 字节。
  • 限制:对于 Exchange 邮箱或公用文件夹层次结构的直接联机访问,限制为 16,372 字节。
  • 只能检索或设置值小于 4,088 字节的二进制属性。(如果尝试使用更大的值,则会出现内存不足错误)。

您可能会发现使用Outlook 2007 中的 PropertyAccessor 和 StorageItem 类的文章不要绊倒石头很有帮助。

于 2019-10-11T09:29:38.890 回答