对于大多数经过加密和数字签名的电子邮件,我们可以使用邮件删除c#中的加密。PropertyAccessor.SetProperty(PR_SECURITY_FLAGS,oldValue-1(或Outlook界面中(文件->属性->加密邮件内容和附件(。
这样的邮件就可以毫无问题地保存下来。对于少量电子邮件,保存操作会生成弹出窗口"您已更改此邮件。如果保存更改,邮件将不再进行数字签名。是否保存更改?"。
如何在触发保存操作之前识别生成此弹出窗口的电子邮件(之前可以读取的任何标志或属性(?或者可能有任何方法可以使用Outlook Redemption实现这一点?
添加或删除任何其他标志时,必须保留现有的安全标志:
Sub SignAndEncrypt()
Const PR_SECURITY_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x6E010003"
Dim mi As MailItem
Set mi = Application.ActiveInspector.CurrentItem
Dim ulFlags As Long
ulFlags = CLng(mi.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS))
ulFlags = ulFlags Or &H1 ' SECFLAG_ENCRYPTED
ulFlags = ulFlags Or &H2 ' SECFLAG_SIGNED
mi.PropertyAccessor.SetProperty PR_SECURITY_FLAGS, ulFlags
Set mi = Nothing
End Sub
标志是:
- 无(=0(
- SECFLAG_ENCRYPTED(=1(
- SECFLAG_SIGNED(=2(
- SECFLAG_加密&SECFLAG_SIGNED(=3(
在发送消息之前不要设置PR_SECURITY_FLAGS
属性
此外,属性是位掩码,因此oldValue-1
实际上没有意义。如果要删除最低位,请使用oldValue & ~1
。