У меня есть сценарий, который проверяет все письма, поступающие в общий почтовый ящик. Он проверяет тип вложения и игнорирует скрытые вложения (например, изображения внутри сообщения). Он отлично работает на моем компьютере, но когда я устанавливал его на компьютер пользователя, иногда он выдавал такую ошибку:
Run-time error '-2147221233 (8004010f)':
The property "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B" is unknown or cannot be found.
Я поискал в Интернете и нашел причину - некоторые вложения не имеют свойства скрытого вложения (возможно). Но как бороться с этой проблемой? Я попытался сделать обработчик ошибок, но он заставляет скрипт работать некорректно. Основная идея скрипта - принимать письма только с вложениями в формате PDF, а с текущим обработчиком ошибок он иногда принимает письма, содержащие вложения другого типа.
Вот часть кода, проверяющая вложения:
Private Sub objItems_ItemAdd(ByVal Item As Object)
Const PR_ATTACHMENT_HIDDEN As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"
Dim myAtt As Outlook.Attachment
Dim allPdf As Boolean
Dim hidNum As Integer
allPdf = True
hidNum = 0
Dim pa As PropertyAccessor
Dim objWatchFolder As Outlook.Folder
Set objNS = Application.GetNamespace("MAPI")
Dim Recip As Outlook.Recipient
Set Recip = objNS.CreateRecipient("[email protected]")
Set objWatchFolder = objNS.GetSharedDefaultFolder(Recip, olFolderInbox)
For Each myAtt In Item.Attachments
Debug.Print myAtt.DisplayName
Set pa = myAtt.PropertyAccessor
On Error GoTo Handler
If Not pa.GetProperty(PR_ATTACHMENT_HIDDEN) Then
If Right(LCase(myAtt.FileName), 4) <> ".pdf" Then
allPdf = False
End If
Else
hidNum = hidNum + 1
End If
NextAtt:
Next myAtt
If allPdf = False Or Item.Attachments.Count = hidNum Then
Item.Move objWatchFolder.Parent.Folders("Error")
End If
Set Item = Nothing
Set myAtt = Nothing
Set pa = Nothing
Set objWatchFolder = Nothing
Set Recip = Nothing
Exit Sub
Handler:
Resume NextAtt
End Sub
Думаю, проблема в том, что после ошибки он просто игнорирует вложение, вызвавшее ошибку, и переходит к следующему. Могу ли я проверить тип прикрепленного файла в обработчике ошибок?
А что, если скрытое вложение не имеет свойства скрытого вложения? Это вообще возможно? Это сделало бы скрипт бесполезным, если бы не было другого способа отличить скрытые вложения от остальных.