The problem: You're receiving email notifications for multiple Yammer groups but it's difficult to know which messages are from the groups that are more important to you. The only clue is the text at the end of the message: "You received this email because you're subscribed to the {group name} group." but you need to view each message to see it.
You could create rules to look for the group name, but you'd need to update the rules as you joined groups, plus rules are funky with Yammer messages. If you use Office 365's Clutter feature, the Yammer messages can be removed from the Inbox, reducing the need for rules, but it's still difficult to know which group a message belongs to prior to reading the last line.
The solution: An ItemAdd macro that watches the folder for new messages. If the message is from Yammer, it looks for the group name and assigns it as the category. Because the macro uses RegEx to find the group name, you won't need to update the macro if you join new groups. (You'll need to add the group to the Master Category list if you want the category to display a color.)
If the messages are in a secondary account, you'll need the GetFolderPath function.
This macro uses RegEx to get the group name. You'll need to select Microsoft VBScript Regular Expressions 5.5 in the VB Editor's Tools, References.
This macro can be converted use with a run a script rule or to work with messages from similar services. To use in a run a script rule change the macro name from
Private Sub InboxItems_ItemAdd(ByVal Item As Object) to
Sub ContactCategories(Item As MailItem)
Updated March 10 2015: the original macro wasn't running on all of the messages, especially when a large number came in at once. I split the macro into two macros, one watching the folder and the second doing the categorizing. It's no longer skipping messages. This also allowed me to watch a folder in another mailbox and reuse the categorizing code.
Option Explicit Private WithEvents InboxItems As Items Dim fClutter As Outlook.Folder Public olApp As New Outlook.Application Private Sub Application_Startup() Set oExpl = Application.ActiveExplorer bDiscardEvents = False Dim objNS As NameSpace Set objNS = Application.Session ' instantiate objects declared WithEvents 'if the messages are in the default Inbox, use this line. Set InboxItems = objNS.GetDefaultFolder(olFolderInbox).Items ' My messages are in a secondary account ' Set fClutter = GetFolderPath("display-name\Clutter") ' Set InboxItems = fClutter.Items Set objNS = Nothing End Sub Private Sub InboxItems_ItemAdd(ByVal Item As Object) If InStr(LCase(Item.SenderEmailAddress), "yammer") > 0 Then YammerCategories Item End If End Sub Private Sub YammerCategories(ByVal Item As Object) Dim yamCats As String Dim i 'As Variant Dim Reg1 As RegExp Dim M1 As MatchCollection Dim M As Match Set Reg1 = New RegExp For i = 1 To 2 With Reg1 Select Case i Case 1 .Pattern = "You received this email because you're subscribed to the (.*) group" .Global = True Case 2 .Pattern = "to (.*) group on the" .Global = True End Select End With If Reg1.Test(Item.Body) Then Set M1 = Reg1.Execute(Item.Body) For Each M In M1 yamCats = M.SubMatches(0) Next Debug.Print yamCats End If Next i If yamCats = "" Then yamCats = "Yammer" Item.Categories = yamCats Item.Save End Sub
Run the macro on existing messages
The macro above runs on messages as they are added to a folder. If you have messages from Yammer in that folder you can use this macro to run each message through the ItemAdd macro.
Paste it at the end of ThisOutlookSession, select the folder where the Yammer messages are and run it. You should only need to use this macro once.
' Run the ItemAdd macro manually on messages already in the selected folder. Public Sub ContactCategoriesManual() Dim objOL As Outlook.Application Dim objOutlookItem As Object Dim objItems As Outlook.Items Dim objFolder As Outlook.MAPIFolder Dim obj As Object Set objOL = Outlook.Application Set objFolder = objOL.ActiveExplorer.CurrentFolder Set objItems = objFolder.Items For Each obj In objItems If TypeOf obj Is Outlook.MailItem Then InboxItems_ItemAdd obj End If Next Set obj = Nothing Set objOutlookItem = Nothing Set objItems = Nothing Set objFolder = Nothing Set objOL = Nothing End Sub
How to use this macro
First: You will need macro security set to low during testing.
To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, itâs at Tools, Macro Security.
After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.
Open the VBA Editor by pressing Alt+F11 on your keyboard.
To use the macro code in ThisOutlookSession:
- Expand Project1 and double click on ThisOutlookSession.
- Copy then paste the macro into ThisOutlookSession. (Click within the code, Select All using Ctrl+A, Ctrl+C to copy, Ctrl+V to paste.)
- To trigger the macro without restarting Outlook, click in Application_Startup then click Run.
More information as well as screenshots are at How to use the VBA Editor