更新:
以前,以 DASL 格式指定的“字符串”命名空间中的命名 MAPI 属性...始终假定为字符串类型(PT_UNICODE 或 PT_STRING8)。
现在可以显式指定属性类型,例如 PT_LONG (=3):
http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MyIntegerUserProperty/0x00000003
我正在使用Redemption 5.1(和 Outlook 2010/64)并且遇到了这个非常烦人的情况:
当尝试将对象byte[]
写入属性时,它会将其写入PT_MV_LONG
属性,而不是PT_BINARY
.
当使用RDOProp.Fields
:
RDOItem rdoItem = GetRDOItem();
// note this is typed PT_BINARY
string dasl = "http://schemas.microsoft.com/mapi/string/{312FD430-D997-418A-8E1F-8D224FE69F5D}/MyProp/0x00000102";
byte[] data = GetSomeData();
rdoItem.Fields[dasl] = data;
...或使用时RDOUtils.HrSetOneProp
:
// this also sets MyProp, but does so as PT_MV_LONG, not PT_BINARY
RDOUtils utils = CreateUtils();
var mapiObject = rdoItem.MAPIOBJECT;
var propTag = utils.GetIDsFromNames(mapiObject,
"{312FD430-D997-418A-8E1F-8D224FE69F5D}",
"MyProp");
utils.HrSetOneProp(mapiObject, propTag, encoded);
上面的代码没有编译,但是类型是正确的。
更新:
使用上面的字符串属性,Redemption 正在创建属性“MyProp/0x00000102”,而不是“MyProp”。