Я использовал комбинацию из другого поста с ответами и этой статьи, чтобы написать свой собственный макрос, который использует библиотеку Redemption для объединения бесед.
При этом сканируется текущая папка, выбираются все электронные письма Jira, извлекается ключ вопроса из темы. Если это не видно, что ключ перед тем, он сохраняет индекс разговора в коллекции на основе ключа выпуска, и если он уже видел его раньше, он обновляет электронную почту с сохраненным индексом разговора.
Dim ConversationIndexes As New Collection Sub GroupJira() Dim MapiNamespace As Object Dim RdoSession As Object Dim Item As Object Dim RdoItem As Object Dim ConversationKey As String Dim ConversationIndex As String ' Get all the required handles Set MapiNamespace = Outlook.GetNamespace("MAPI") MapiNamespace.Logon Set RdoSession = CreateObject("Redemption.RDOSession") RdoSession.MAPIOBJECT = MapiNamespace.MAPIOBJECT 'Setup some subject patterns to extract the issue key Dim Matches As MatchCollection Dim UpdateSubjectPattern As New RegExp UpdateSubjectPattern.Pattern = "\[JIRA\] \(([A-Z]+-[0-9]+)\) .*" Dim MentionedSubjectPattern As New RegExp MentionedSubjectPattern.Pattern = "\[JIRA\] .* mentioned you on ([A-Z]+-[0-9]+) \(JIRA\)" For Each Item In Outlook.ActiveExplorer.CurrentFolder.Items If TypeOf Item Is MailItem Then If Left(Item.Subject, 7) = "[JIRA] " Then ' Get a key for this conversation, opic for now ConversationKey = Item.ConversationTopic Set Matches = UpdateSubjectPattern.Execute(Item.Subject) If Matches.Count >= 1 Then ConversationKey = Matches(0).SubMatches(0) Set Matches = MentionedSubjectPattern.Execute(Item.Subject) If Matches.Count >= 1 Then ConversationKey = Matches(0).SubMatches(0) ' Get any saved indexes ConversationIndex = "" On Error Resume Next ConversationIndex = ConversationIndexes.Item(ConversationKey) On Error GoTo 0 If ConversationIndex = "" Then ' Save this index if not seen yet ConversationIndexes.Add Item.ConversationIndex, ConversationKey ElseIf Item.ConversationIndex <> ConversationIndex Then ' Set the item's index if it has Set RdoItem = RdoSession.GetMessageFromID(Item.EntryID, Item.Parent.StoreID) RdoItem.ConversationIndex = ConversationIndex RdoItem.Save End If End If End If Next Item End Sub
Для этого требуются следующие библиотеки:
- Библиотека выкупа для полного доступа к RDO, необходимая для установки индекса разговора (для его регистрации не требуется повышения прав)
- Ссылка на
Microsoft VBScript Regular Expressions 5.5
библиотеку для извлечения ключей выдачи из почтовых тем.
О, и вам также нужно отключить настройки безопасности макросов, чтобы запустить его.