
Odpowiadanie na wiadomości zawsze w formacie tekstowym
Artykuł dotyczy: Microsoft Outlook 2002/2003/2007
W Microsoft Office Outlook nie ma możliwości skonfigurowania ustawień programu tak, aby przy odpowiadaniu na wiadomość, która jest w formacie zwykłego tekstu lub HTML, odpowiedź tworzona była zawsze w formacie tekstowym. Opcja ta jest znana użytkownikom na przykład programu Outlook Express. Po wybraniu w menu "Narzędzia | Opcje" w ustawieniach programu na zakładce "Wysyłanie" wystarczy odznaczyć opcję "Odpowiedz na wiadomości używając formatu, w jakim zostały wysłane", a odpowiedzi na wiadomości będą tworzone zawsze w formacie zwykłego tekstu lub HTML, w zależności od tego jaka opcja jest wybrana w sekcji "Format wysyłania poczty" (na tej samej zakładce "Wysyłanie").
Tego typu opcji brakuje niestety w Microsoft Outlook, który tworzy odpowiedź zawsze w takim formacie, w jakim jest oryginalna wiadomość. Można co najwyżej w ustawieniach zaznaczyć opcję "Czytaj całą standardową pocztę jako zwykły tekst" ("Narzędzia | Opcje | Opcje e-mail") (opcji tej nie ma w Outlook 2007). Wtedy wszystkie wiadomości, nawet te w formacie HTML, będą przez Outlook'a wyświetlane w formacie zwykłego tekstu i taki też format będą miały odpowiedzi na te wiadomości. Nie jest to jednak rozwiązanie idealne, ponieważ zazwyczaj użytkownik chciałby, aby wiadomości w formacie HTML były wyświetlane jako HTML.
Problem ten można rozwiązać przy użyciu makra, którego kod można znaleźć poniżej. Makro używa zdarzeń Outlook'a w celu wykrycia momentu, gdy użytkownik wywołuje dla wiadomości polecenie "Odpowiedz" (*3). Akcja użytkownika jest wtedy anulowana (*4), a tworzona jest nowa odpowiedź przy użyciu formatu tekstowego (*5). Makro działa w ten sam sposób także dla akcji "Odpowiedz wszystkim" oraz "Prześlij dalej". Jeśli nie ma potrzeby obsługi tych zdarzeń wystarczy usunąć z makra funckje oItem_ReplyAll (*6) oraz oItem_Forward (*7). Jeśli ktoś chce, aby odpowiedzi były zawsze tworzone w formacie HTML zamiast zwykłego tekstu, należy w kodzie makra usunąć linię oznaczoną jako (*1) i odkomentować linię (*2). Makro nie działa w Microsoft Outlook 2000, ponieważ obiekt MailItem nie posiada tam właściwości BodyFormat i nie ma możliwości zmiany formatu wiadomości.
Ponieważ makro używa zdarzeń Outlook'a jego kod musi zostać umieszczony w edytorze Visual Basic w module "ThisOutlookSession". Makro uruchamiane jest już przy starcie Outlook'a. Aby Outlook nie wyświetlał za każdym razem ostrzeżenia o zabezpieczeniach, należy podpisać projekt Visual Basic lub ustawić zabezpieczenia makr na "Niskie".
Option Explicit
Private WithEvents oExpl As Explorer
Private WithEvents oItem As MailItem
Private bDiscardEvents As Boolean
Private olFormat As OlBodyFormat
Private Sub Application_Startup()
Set oExpl = Application.ActiveExplorer
bDiscardEvents = False
olFormat = olFormatPlain '(*1) - używaj zawsze formatu "zwykły tekst"
'olFormat = olFormatHTML '(*2) - używaj zawsze formatu HTML
End Sub
Private Sub oExpl_SelectionChange()
On Error Resume Next
Set oItem = oExpl.Selection.item(1)
End Sub
' (*3) Użytkownik wybrał polecenie "Odpowiedz"
Private Sub oItem_Reply(ByVal Response As Object, Cancel As Boolean)
If bDiscardEvents Or oItem.BodyFormat = olFormat Then
Exit Sub
End If
'(*4) Anuluj domyślną akcję
Cancel = True
bDiscardEvents = True
' (*5) Utwórz odpowiedź na wiadomość w formacie tekstowym
Dim oResponse As MailItem
Set oResponse = oItem.Reply
oResponse.BodyFormat = olFormat
oResponse.Display
bDiscardEvents = False
End Sub
' (*6) Użytkownik wybrał polecenie "Odpowiedz wszystkim"
Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)
If bDiscardEvents Or oItem.BodyFormat = olFormat Then
Exit Sub
End If
Cancel = True
bDiscardEvents = True
Dim oResponse As MailItem
Set oResponse = oItem.ReplyAll
oResponse.BodyFormat = olFormat
oResponse.Display
bDiscardEvents = False
End Sub
' (*7) Użytkownik wybrał polecenie "Prześlij dalej"
Private Sub oItem_Forward(ByVal Forward As Object, Cancel As Boolean)
If bDiscardEvents Or oItem.BodyFormat = olFormat Then
Exit Sub
End If
Cancel = True
bDiscardEvents = True
Dim oResponse As MailItem
Set oResponse = oItem.Forward
oResponse.BodyFormat = olFormat
oResponse.Display
bDiscardEvents = False
End Sub
Jeśli masz jakieś pytania lub komentarze dotyczące tego artykułu, napisz na naszym forum.
(c) CodeTwo. Wszelkie prawa zastrzeżone.
© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.