Скрипт VBA, который перемещает сообщения, не может обрабатывать зашифрованные сообщения - PullRequest
1 голос
/ 01 ноября 2011

У меня есть сценарий VBA, который я использую для архивирования сообщений в личную папку. Он нормально работает с обычными сообщениями, но я каждый раз, когда сталкиваюсь с зашифрованным сообщением, выдает ошибку во время выполнения: «Ваше цифровое имя не может быть найдено базовой системой безопасности».

Как я могу настроить свой код, чтобы он мог перемещать зашифрованные сообщения?

Public Sub MoveToArchive()

Dim objOutlook As Outlook.Application
Dim objSourceNamespace As Outlook.NameSpace
Dim objDestNamespace As Outlook.NameSpace
Dim objSourceFolder As Outlook.MAPIFolder
Dim objDestFolder As Outlook.MAPIFolder
Dim objVariant As Variant
Dim lngMovedMailItems As Long
Dim intCount As Integer
Dim strDestFolder As String

' Create an object for the Outlook application.
Set objOutlook = Application
' Retrieve an object for the MAPI namespace.
Set objSourceNamespace = objOutlook.GetNamespace("MAPI")
Set objDestNamespace = objOutlook.GetNamespace("MAPI")

' Retrieve a folder object for the source folder.
Set objSourceFolder = objSourceNamespace.Folders("Mailbox - Me").Folders("Deleted Items")
Set objDestFolder = objDestNamespace.Folders("Archive - Current Year").Folders("Deleted Items")

' Loop through the items in the folder. NOTE: This has to
' be done backwards; if you process forwards you have to
' re-run the macro an inverese exponential number of times.
For intCount = objSourceFolder.Items.Count To 1 Step -1
    ' Retrieve an object from the folder.
    'Debug.Print objSourceFolder.Items.Item(intCount)
    Set objVariant = objSourceFolder.Items.Item(intCount)
    ' Allow the system to process. (Helps you to cancel the
    ' macro, or continue to use Outlook in the background.)
    DoEvents
    ' Filter objects for emails or meeting requests.
    If objVariant.Class = olMail Or objVariant.Class = olMeetingRequest Then
        ' This is optional, but it helps me to see in the
        ' debug window where the macro is currently at.
        ' Debug.Print objVariant.SentOn

        ' Move the object to the destination folder.
        objVariant.Move objDestFolder
        ' Just for curiousity, I like to see the number
        ' of items that were moved when the macro completes.
        lngMovedMailItems = lngMovedMailItems + 1

    End If
Next

' Display the number of items that were moved.
' MsgBox "Moved " & lngMovedMailItems & " messages(s)."

End Sub

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Из кода VBA невозможно что-либо сделать с зашифрованными электронными письмами.От VBA вы не можете сказать, что они зашифрованы.Я видел, как некоторые люди говорят, что есть определенное вложение типа S / MIMME.Вы можете проверить это по электронной почте.Я не обнаружил, что в моей компании шифрование.

Вы также не можете переместить зашифрованное письмо с помощью VBA.

По моему мнению, когда у вас есть objVariant, попробуйте прочитать его простое свойство.Если вы не можете и получаете сообщение об ошибке, предположите, что оно зашифровано.

0 голосов
/ 14 августа 2014

Это код, который я использую в Outlook 2007 для реализации кнопки «Архив» в стиле Gmail на панели инструментов.

Sub Archive()
    Set ArchiveFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("Archive")
    For Each Msg In ActiveExplorer.Selection
        If ActiveExplorer.Selection.Parent <> ArchiveFolder Then Msg.Move ArchiveFolder
    Next Msg
End Sub

Для работы необходимо иметь собственную подпись.Вот учебник, который я использовал: http://www.howto -outlook.com / howto / selfcert.htm

При попытке переместить зашифрованный файл выдается предупреждение о том, что файл не будетдольше быть подписанным после операции, но после нажатия «ОК» оно все равно успешно завершает действие.

...