Мне удалось вставить вкладку в строку поиска, нажав Control+i при ее вводе, но это не соответствовало сообщениям на моем почтовом сервере. Когда я проверил фактические символы в теле сообщения полученного сообщения, я обнаружил, что символ {TAB} был фактически переведен в шесть символов Юникод, за которыми следует один пробел. Это не позволило найти строку поиска. Вы можете сначала попробовать этот метод, чтобы увидеть, работает ли он с вашими электронными письмами.
В качестве альтернативного решения вы можете создать "пользовательское" правило, добавив макрос Outlook Basic для приложений в Outlook.
- Сначала включите меню "Разработчик", перейдя в Outlook -> "Параметры" -> "Настройка ленты", а затем отметьте опцию « Разработчик» в списке « Основные вкладки» справа.
- Теперь вернемся в ваш основной вид Outlook, вы должны увидеть меню разработчика , выберите его
- Нажмите кнопку « Безопасность макросов» на ленте и выберите "Уведомление для всех макросов" или «Включить все макросы (не рекомендуется; может выполняться потенциально опасный код)».
- Затем нажмите кнопку Visual Basic на ленте, чтобы открыть редактор Visual Basic
- Перейдите в Инструменты -> Ссылки и добавьте ссылку на библиотеку Microsoft VBScript Regular Expression 5.5.
- В редакторе Visual Basic выберите ThisOutlookSession и вставьте код, указанный ниже.
- Сохраните ваш проект и выйдите из Outlook
- Откройте Outlook и отправьте себе тестовое сообщение.
Вам нужно будет отредактировать содержимое строки констант RouteToFolderName и RouteToFolderRegEx в соответствии с вашими поисковыми предпочтениями.
Макрос сохраняется в файл с именем VBAProject.OTM находится в области пользовательских настроек (папка C:\Users\\AppData\Roaming\Microsoft\Outlook\ в Windows 7). Возможно, вы захотите сделать резервную копию этого файла после того, как макрокоманда будет работать в соответствии с вашими требованиями.
Вариант Явный
Private WithEvents olInboxItems как элементы
'Это имя папки, в которую вы хотите, чтобы ваши сообщения были перемещены в Private Const RouteToFolderName As String = "FollowUp"
«Это регулярное выражение, которое соответствует тексту, который вы ищете». Outlook заменил один символ {TAB} на '6 x \u00A0 символов и 1 x пробел. Private Const RouteToFolderRegex As String = "Изменено:\u00A0+\s+Me"
Private Sub Application_Startup() Dim objNS As NameSpace Установить objNS = Приложение.Сеанс 'Присоедините папку "Входящие" Outlook, чтобы получать событие при поступлении элемента. Установите olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Пункты, установленные objNS = Nothing End Sub
Private Sub olInboxItems_ItemAdd(элемент ByVal As Object) Dim objNS As NameSpace Dim objMailItem As Outlook.MailItem Dim objMailFolderId As String Dim regex Как RegExp Dim найден как логический
' Check to make sure we have a mail message first
If (TypeOf Item Is Outlook.MailItem) Then
' Locate the id of the folder we want to store the message in
objMailFolderId = FindFolderByName(Application.Session.folders, Found,
RouteToFolderName)
Set objMailItem = Item
Set regex = New RegExp
regex.IgnoreCase = True ' Do a case insensitive search
regex.Global = True
regex.Pattern = RouteToFolderRegex
' Test the message body against the regular expression
If (regex.Test(objMailItem.Body)) Then
' Message body matched so move to our folder
objMailItem.Move Application.Session.GetFolderFromID(objMailFolderId)
End If
End If
End Sub
'Рекурсивный поиск в корневой папке папки, которая соответствует "folderName" (без учета регистра). Открытая функция FindFolderByName (папки ByRef как Outlook.folders, ByRef найден как Boolean, ByVal folderName как строка) как строка Dim objFolder как Outlook.скоросшиватель
For Each objFolder In folders
If Found = True Then
Exit Function
End If
If LCase(objFolder.Name) = LCase(folderName) Then
FindFolderByName = objFolder.EntryID
Found = True
Exit Function
Else
If objFolder.folders.Count > 0 Then
FindFolderByName = FindFolderByName(objFolder.folders, Found, folderName)
End If
End If
Next End Function