Microsoft Outlook troubleshooting

Na portalu Technet spotkałem się z problemem, który dotyczył sprawdzenia ilości wysłanej poczty przez pracowników przedsiębiorstwa, użytkującego współdzielone konto email. Takie same warunki są często spotykane w firmach, które nie posiadają infrastruktury serwerowej, a co za tym idzie nie mogą utworzyć aliasów do kont. Sytuacja posiadania jednej ogólnej skrzynki którą obsługuje np. dział logistyki, sekretariatu czy sprzedaży jest kłopotliwa w przypadku kiedy chcemy sprawdzić aktywność konkretnych pracowników. Widomości wysłane standardowo nie będą posiadały odrębnego identyfikatora nadawcy.

Przypuśćmy iż mamy kilka komputerów, na których zainstalowany jest MS Outlook. W nich skonfigurowana jest między innymi ogólna skrzynka firmowa firma@jakasdomena.pl. Osób jakie odpisują to konto jest wiele. Powszechną jak i najtańszą konfiguracją jest założenie konta IMAP, ponieważ wszystkie zalogowane osoby widzą wysłaną pocztę oraz statusy poczty przychodzącej (czy nie pozostało wiadomości bez odpowiedzi). W przypadku konta POP3 poczta wysłana będzie widoczna dla każdej jednostki lokalnie/odrębnie, to też można ją zmierzyć jedynie uruchamiając dane stanowisko.

To iż w konfiguracji IMAP (podobnie jak w Exchange), wiadomości zapisane pozostają na serwerze, użytkownik po wysłaniu poczty ma możliwość ją przeglądać z jakiejkolwiek maszyny, która została do tego konta zalogowana. Taka zaś konfiguracja nie pozwala utworzyć nowych, niestandardowych elementów w obiekcie wiadomości:

        .UserProperties.Add 

Możemy więc polegać jedynie na tych elementach, jakie standardowo w obiekcie mailitem są udostępniane.

Tym sposobem możemy wykorzystać dwa rozwiązania.
  1. Utworzyć regułę na poczcie wychodzącej, która będzie dodawać kategorię o danym kolorze, wcześniej niepowtarzalnie przypisywanej do danej osoby. Następnie sortować wiadomości w folderze poczty wysłanej, co da możliwość pogrupowania i zliczenia ilości dla danego pracownika. Można w tym celu użyć aplikacji CodeTwo Catman, aby użyć jednolitych nazw stanowisk w całej sieci.
  2. Wykorzystać pole .Billinginformation używając makro, które będzie podłączone do poczty wychodzącej. Taka opcja daje nam możliwość braku wykorzystania pola kategorii, a użycie go do standardowych celów (np. rodzaju informacji, oznaczenie działu, celu etc.) przez pracowników.

To iż punkt pierwszy nie wymaga programowania, zwróćmy uwagę na wykorzystanie ukrytego pola i zliczanie elementów z umieszczoną w nim informacją.

Oto procedura zdarzeniowa, dzięki której można dodać nazwę nazwę komputera lub profilu automatycznie po wysłaniu wiadomości:

Private Sub oSentItems_ItemAdd(ByVal Item As Object)
if item.class = 43 then
item.BillingInformation = Environ("ComputerName") 'lub *
item.Save
end if
End Sub

Powyższą procedurę umieszczamy w klasie ThisOutlookSession.

Sub Add_hideInf_byProcedure()
Dim item As MailItem
On Error Resume Next
For Each item In Application.ActiveExplorer.Selection
item.BillingInformation = Environ("ComputerName") 'lub *
item.Save
Next End Sub

Drugi, pokazany powyżej kod, to procedura, dzięki której możemy ręcznie z Outlooka [Alt+F8] lub po podłączeniu do przycisku, po wcześniejszym zaznaczeniu wiadomości (kilku z Ctrl lub Shift) oznaczyć je podobnie jak w procesie automatycznym nazwą komputera lub profilu.

Poniżej zaś znajduje się procedura zliczająca wstawione nazwy.

Sub Count_if_Billinginf_Exists()
'MVP Shon Oskar from VBATools.pl
Dim item As Object, z&, c&, kto$, Yest As Boolean
Dim oFolder As MAPIFolder, Baz As New Collection
Set oFolder = Application.ActiveExplorer.CurrentFolder

For Each item In oFolder.Items
DoEvents
If Len(item.BillingInformation) = 0 Then GoTo dalej
If Baz.Count > 0 Then
For z = 1 To Baz.Count
Yest = False
kto = item.BillingInformation
If Split(Baz(z), "=")(0) = kto Then
c = Split(Baz(z), "=")(1)
Baz.Remove z
Baz.Add kto & "=" & CStr(c + 1)
Yest = True
Exit For
End If
Next z
If Yest = False Then GoTo dodaj
Else
dodaj:
Baz.Add item.BillingInformation & "=" & 1
End If
dalej:
On Error GoTo blad
Next item

If Baz.Count > 0 Then
For z = 1 To Baz.Count
Debug.Print Baz(z) 'lub przekazanie do kontrolki\komunikatu
Next z
Else
MsgBox "No Bilinginformacion objects in folder " & oFolder.Name, _
vbInformation, "VBATools.pl"
End If
Set oFolder = Nothing

Exit Sub
blad:
Debug.Print "Err: " & Err.Number & " " & Err.Description
End Sub
 

W przypadku kiedy jeden komputer obsługiwany jest przez różne osoby, które logują się do swojego profilu możemy nazwę komputera zamienić na nazwę tego profilu:

'* 
Dim profile$: profile = Environ("USERPROFILE")
profile = Mid(profile, InStrRev(profile, "\") + 1, Len(profile))

item.BillingInformation = profile
 

Taka metoda pozwala na zdalne sprawdzenie zaangażowania pracowników w utrzymywanie kontaktu elektronicznego.

Zamiast wykorzystania pola Immediante [Ctrl+G] w środowisku developerskim, można przypisać elementy tablicy do stringa i wyświetlić je w komunikacie MsgBox lub przekazać na listę kontrolki Listbox/Listview formularza VBA.

MVP Shon Oskar – VBATools.pl
Jeśli masz pytania dot. tego artykułu zapraszam na Forum
Skonfiguruj swój pakiet dodatków do Excela, Worda, PowerPointa i Outlooka



© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Komentarze

Komentarze
bartek Mikolajek
bartek Mikolajek, orange 2015-03-30 10:06:40
grubygremlin@gmail.com