Excel VBA设置Outlook草稿不加密遇Error 287问题求助
解决Outlook VBA设置PR_SECURITY_FLAGS时Error 287的问题
核心问题分析
Error 287是Outlook安全限制触发的常见错误,多发生在企业Exchange环境下,组策略禁止外部程序直接修改邮件安全属性(如加密状态)。以下是几种可行的解决方法:
方法1:调整代码执行顺序,重新获取草稿项修改属性
先创建并保存邮件草稿,再通过Outlook命名空间重新获取该草稿,最后修改安全属性,可绕过部分直接修改的安全拦截:
' 确保PR_SECURITY_FLAGS定义正确 Const PR_SECURITY_FLAGS As String = "http://schemas.microsoft.com/mapi/proptag/0x6E010003" Dim OApp As Object Dim OMail As Object Dim ns As Object Set OApp = CreateObject("Outlook.Application") Set ns = OApp.GetNamespace("MAPI") Set OMail = OApp.CreateItem(0) ' olMailItem 对应数值0 ' 先填充邮件内容并保存为草稿 With OMail .To = "xx@gmail.com" .Subject = "subjecthere " & currdate .Body = CCbody1 & ccprice & CCbody2 .Attachments.Add TempFilePath & TempFileName & FileExtStr .Save End With ' 重新获取草稿项,避免直接修改的安全限制 Set OMail = ns.GetItemFromID(OMail.EntryID) ' 设置不加密属性:-4对应SECFLAG_ENCRYPTED(0) + SECFLAG_DO_NOT_ENCRYPT(4)的组合 OMail.PropertyAccessor.SetProperty PR_SECURITY_FLAGS, -4 OMail.Save ' 保存修改 ' 释放对象 Set OMail = Nothing Set ns = Nothing Set OApp = Nothing
方法2:使用Redemption库绕过Outlook安全限制
Redemption是第三方库,不依赖Outlook内置安全模型,能稳定修改邮件属性:
- 下载并注册Redemption.dll(企业环境需联系IT确认合规性)
- 使用以下代码:
Const PR_SECURITY_FLAGS As String = "http://schemas.microsoft.com/mapi/proptag/0x6E010003" Dim rSession As Object Dim rMail As Object Dim OApp As Object Dim OMail As Object Set OApp = CreateObject("Outlook.Application") Set OMail = OApp.CreateItem(0) ' 先创建并保存邮件草稿 With OMail .To = "xx@gmail.com" .Subject = "subjecthere " & currdate .Body = CCbody1 & ccprice & CCbody2 .Attachments.Add TempFilePath & TempFileName & FileExtStr .Save End With ' 通过Redemption访问并修改邮件属性 Set rSession = CreateObject("Redemption.RDOSession") rSession.MAPIOBJECT = OApp.GetNamespace("MAPI").MAPIOBJECT Set rMail = rSession.GetMessageFromID(OMail.EntryID) rMail.Fields(PR_SECURITY_FLAGS) = -4 rMail.Save ' 释放对象 Set rMail = Nothing Set rSession = Nothing Set OMail = Nothing Set OApp = Nothing
方法3:联系IT调整企业安全策略
如果是企业Exchange环境,组策略可能禁止程序修改邮件安全属性:
- 要求IT将Excel.exe添加到Outlook信任中心的“受信任应用程序”列表
- 调整Exchange组策略,允许程序修改
PR_SECURITY_FLAGS属性
内容的提问来源于stack exchange,提问作者user3399836
相关产品推荐
相关产品推荐

