Microsoft Outlook troubleshooting
Odpowiadanie na wiadomości zawsze w formacie tekstowym

Odpowiadanie na wiadomości zawsze w formacie tekstowym

autor CodeTwo 2006-11-09 00:00:00 w Makra

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.