【发布时间】:2022-04-03 03:21:07
【问题描述】:
我需要验证传入的邮件是否在 Outlook 2010 中签名。
如果邮件未签名,则应将其移动到“NOSIG”文件夹中。
在研究时,我发现(并在某种程度上确认)Outlook 2010 将 MessageClass 修改为“IPM.Note”,因此我尝试使用 PropertyAccessor 并阅读安全标志。
到目前为止,这是我的代码:
Sub TRCR(MAIL_ITEM As MailItem)
Dim PR_SECURITY_FLAGS As Integer
On Error Resume Next
'Security-Flags: 0=none, 1=encrypted, 2=signed, 3=both
PR_SECURITY_FLAGS = MAIL_ITEM.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003")
'Modulo because, sometimes the flags value is added to a multiple of 32... <unfortunately I lost the source>
If (PR_SECURITY_FLAGS > 32) Then PR_SECURITY_FLAGS = PR_SECURITY_FLAGS Mod 32
If PR_SECURITY_FLAGS = 2 Or PR_SECURITY_FLAGS = 3 Then
'Do all that fancy stuff I want to with that signed Mail
Else
MAIL_ITEM.Move Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders.Item("NOSIG")
End If
End Sub
我使用 Outlook 规则在每封收到的电子邮件上运行该脚本。
它有时会将签名的邮件移动到 NOSIG 文件夹。
在这些情况下,PR_SECURITY_FLAGS 在模代码行之前和之后都为 0。所以为 0,脚本工作正常,但由于邮件已签名,标志不应该是 0,而是 2。
我多次重复发送相同的签名邮件,只是为了总是看到同样的事情发生。他们中的大多数都得到了正确的对待,而少数人在签名时总是显示标志 0 而不是 2。
我尝试使用 Application.Wait Now + TimeSerial(0, 0, 1) 将脚本暂停 1-5 秒,认为脚本对于 PropertyAccessor 或其他东西来说可能太快了,但暂停不起作用。 (在处理多封邮件时,我感觉不到五秒钟的延迟。)
我开始认为这是一个 Outlook 问题(可能操纵类似于 MessageClass 的安全标志,但并非每次都如此)。
【问题讨论】: