Artykuł stanowi kontynuację opisu metod konfiguracji limitów przesyłanych wiadomości w systemach pocztowych Exchange 2007/2010.
W części drugiej opisane są dodatkowe, mniej typowe metody konfigurowania limitów, takie jak wielkość załącznika wysyłanego przez OWA czy ograniczanie wielkości e-maila w komunikacji podczas procesu przenoszenia do Exchange 2007/2010.
Wprowadzenie
W pierwszej części artykułu omawiane były podstawowe metody konfigurowania limitów przesyłanych wiadomości w systemach Microsoft Exchange 2007 i Microsoft Exchange 2010. Ponieważ poza sposobami wymienionymi w części pierwszej istnieje jeszcze kilka specyficznych sytuacji lub miejsc, w których również można wpływać na dopuszczalne wielkości przesyłanych wiadomości lub załączników, zostaną one omówione w niniejszym artykule.
Podobnie jak w części pierwszej, konfiguracja obu produktów nie różni się w większości przypadków, więc – jeśli nie zaznaczono inaczej - sposób konfiguracji dotyczy obu wersji produktu, z dowolnym zainstalowany dodatkiem Service Pack (SP). Wykorzystywane narzędzia konfiguracyjne to (najczęściej) ponownie Exchange Management Console (EMC) lub Exchange Management Shell (EMS).
Konfiguracja limitów przesyłanych wiadomości – metody dodatkowe
1. Koegzystencja Exchange 2007/2010 z Exchange 2003
Pierwszym przypadkiem, który wart jest opisania, jest koegzystencja systemu Exchange 2007 RTM z Exchange 2003, najczęściej tymczasowa na czas wykonywanej migracji.
W ramach systemu Exchange 2003 konfiguracja maksymalnych rozmiarów wysyłanych i odbieranych wiadomości wykonywana była zupełnie inaczej (konsola Exchange System Management, właściwości Message Delivery, wielkości Sending message size i Receiving message size, Rysunek 1) i zapisywana była w zupełnie innym miejscu w ramach partycji Configuration bazy Active Directory.

Rysunek 1. Konfiguracja maksymalnych wielkości wysyłanych i odbieranych wiadomości w Exchange 2003
Zmienione wartości tych atrybutów, na niższe niż ustalone w trakcie przechodzenia do Exchange 2007 na poziomie organizacji przy pomocy polecenia Set-TransportConfig, skutkować mogą problemami w wysyłaniu/odbieraniu wiadomości pomiędzy użytkownikami posiadającymi skrzynki na serwerach Exchange 2003 lub wysyłanymi pomiędzy Exchange 2003 a Exchange 2007 (nie mają one znaczenia dla wiadomości wysyłanych pomiędzy użytkownikami Exchange 2007). Co gorsza, wielkości wykorzystywanych przez serwery Exchange 2003 nie są widoczne nigdzie w EMC ani poprzez żadne polecenie PowerShella w EMS.
Posiadając jeszcze w organizacji serwer Exchange 2003 możemy, jeśli jest taka potrzeba, zmienić te wartości na właściwe. Można też to zrobić przy pomocy konsoli Active Directory, wybierając partycję Configuration -> CN=Services -> CN=Microsoft Exchange -> CN=<nazwa_organizacji> -> CN=Global Settings -> właściwości obiektu CN=Message Delivery. Edytowanymi atrybutami są submissionContLength oraz delivContLength, definiujące odpowiednio maksymalną wielkość wysyłanej oraz odbieranej wiadomości (Rysunek 2).

Rysunek 2. Edycja atrybutów delivContLength oraz submissionContLength obiektu Message Delivery.
Jeżeli jednak posiadamy Exchange 2007 z SP1 lub późniejszym albo Exchange 2010, powyższe atrybuty będą automatycznie zmienione w przypadku modyfikacji poprzez narzędzia Exchange 2007/2010 (EMC lub EMS) ustawień na poziomie organizacji (patrz pierwsza część artykułu), przy czym atrybut delivContLength przyjmie wartość odpowiadającą atrybutowi MaxReceiveSize, a atrybut submissionContLength – atrybutowi MaxSendSize.
W koegzystencji Exchange 2003 z Exchange 2007/2010 istnieje jednak jeszcze jedno miejsce, w ramach którego możemy sterować wielkościami przesyłanych wiadomości – jest to konieczny do umożliwienia komunikacji pomiędzy nowymi i starymi serwerami łącznik grup routingu (routing group connector). Jak wiadomo, serwery Exchange 2007/2010 nie korzystają z grup routingu, ale (choć nie widać tego w EMC), wykorzystują ten mechanizm do komunikacji z serwerami Exchange 2003. Poleceniem
Set-RoutingGroupConnector –Identity <nazwa_konektora> -MaxMessageSize 10MB
możemy ograniczyć wielkość wiadomości przesyłanych przez dany konektor.
2. Definiowanie limitów załączników przesyłanych przez OWA
Dodatkowe ograniczenia, związane z wielkością przesyłanych załączników, można również skonfigurować dla użytkowników Outlook Web Access (w Exchange 2010 występującego pod nazwą Outlook Web App). W tym celu należy wyedytować plik web.config, znajdujący się w lokalizacji <ścieżka_instalacyjna_exchange>\ClientAccess\Owa. Edytowaną wartością jest maxRequestLength, która domyślnie wynosi 30000 (czyli ok. 30 MB). Jej zmiana, np. na 10 MB, ograniczy możliwość wysyłania dużych załączników przez użytkowników OWA (Rysunek 3).

Rysunek 3. Edycja atrybutu maxRequestLength w pliku web.config
Jak działa takie ograniczenie? Otóż jeżeli użytkownik, tworząc wiadomość poprzez OWA, wybierze załącznik przekraczający zdefiniowaną wartość (np. plik o wielkości ok. 19 MB przy wprowadzonym ograniczeniu ok. 10 MB, Rysunek 4), to po naciśnięciu przycisku ‘Dołącz’ okna dialogowego załączania plików, otrzyma błąd ‘Program Microsoft Exchange wygenerował nieoczekiwaną odpowiedź (500)’ (Rysunek 5).

Rysunek 4. Wybór załącznika o rozmiarze przekraczającym wartość atrybutu maxRequestLength

Rysunek 5. Błąd spowodowany próbą dodania zbyt dużego załącznika przez OWA
Wyświetlając szczegóły takiego błędu, znajdziemy wśród nich między innymi
Exception
Exception type: System.Web.HttpException
Exception message: Maximum request length exceeded.
Rozwiązanie takie posiada jednak pewną lukę. Przy wprowadzonym ograniczeniu ok. 10 MB, nie będzie możliwe wysłanie pliku przekraczającego tę wielkość. Nie będzie też możliwe wysłanie dwóch plików o wielkości np. 8 MB, gdy będziemy je próbowali dołączyć w tym samym oknie dialogowym. Ale bez problemu można wybrać jeden plik 8 MB, dołączyć go do wiadomości, a następnie wybrać i dołączyć drugi plik 8 MB. Jak długo dołączanie będzie odbywało się dla każdego pliku oddzielnie, a żaden z plików pojedynczo nie będzie przekraczał zdefiniowanej wartości maxRequestLength, limit ten nie jest uwzględniany i ograniczeń w wielkości przesyłanych wiadomości i/lub załączników należy szukać gdzie indziej (np. w maksymalnej dopuszczanej wielkości wiadomości).
Dodatkowo, należy pamiętać o wbudowanym ograniczeniu związanym z czasem dołączania pojedynczego pliku (request timeout), który wynosi 60 minut, i którego przekroczenie również skutkuje błędem HttpWebException.
3. Definiowanie limitów załącznika przy pomocy reguły transportowej
Exchange 2007 wprowadził reguły transportowe, przy pomocy których wpływać można w bardzo szczegółowy sposób na przepływ wiadomości. Jedna z dostępnych tam opcji – warunek ‘when the size of any attachment is greater or equal to limit’ – również pozwala na sterowanie dopuszczalnymi wielkościami załączników. Konfigurujemy ją tworząc nową – najlepiej dedykowaną – regułę transportową. Po określeniu nazwy w kroku ‘Conditions’ należy wybrać wspomniany warunek ‘when the size of any attachment…’ i określić wartość limitu w KB (Rysunek 6).

Rysunek 6. Wybór właściwego warunku reguły transportowej.
W następnym kroku należy określi akcję, jaka będzie wykonywana w przypadku przesyłania wiadomości spełniającej powyższy warunek. Ponieważ najprawdopodobniej będzie zależało nam na zatrzymaniu wiadomości i poinformowaniu nadawcy, że nie została ona dostarczona do adresata, wybieramy opcję ‘send bound message to sender with enhanced status code’ (Rysunek 7). W ramach wysyłanej do nadawcy wiadomości możemy zostawić domyślne wartości wiadomości zwrotnej i kod SMTP 5.7.1 (zgodnie z RFC 1893, kod 5.7.1 odpowiada domyślnej treści ‘Delivery not authorized, message refused’) lub zmienić tekst na dowolny (np. ‘Attachment too large, please send smaller one’), najlepiej zmieniając wówczas kod SMTP wybierając dopuszczalną przez kreatora reguł transportowych wartość z zakresu 5.7.10-5.7.999 (kody te nie są określone w ramach RFC 1893). Decydując się na własny tekst zwrotnej wiadomości, powinniśmy ją jednak wcześniej przygotować poleceniem New-SystemMessage, w przeciwnym razie w treści raportu o niedostarczeniu będzie standardowy tekst kodu 5.7.0 (więcej o tworzeniu własnych wiadomości systemowych – t w artykule: Associating a DSN Message with a Transport Rule).

Rysunek 7. Określanie odpowiedniej akcji dla tworzonej reguły transportowej.
Następny krok – wyjątki od reguły – pomijamy (chyba, że reguła ma nie dotyczyć wszystkich wiadomości, a tylko ich zdefiniowany podzbiór) i tworzymy regułę. Jej działanie oczywiście jest uzależnione od innych zdefiniowanych limitów (na poziomie organizacji, łączników (konektorów), użytkownika wysyłającego i odbierającego), jeśli jednak wiadomość spełnia te limity, a nie spełnia warunków utworzonej reguły transportowej, generowana jest wiadomość o niedostarczeniu, z treścią i kodem zdefiniowanym w ramach reguły (Rysunek 8).

Rysunek 8. Wiadomość zwrotna o niedostarczeniu, zatrzymana z powodu rozmiaru załącznika.
W przypadku ograniczania załączników poprzez regułę transportową, obowiązuje taka sama luka, jak w przypadku załączników wysyłanych przez OWA – tzn. ograniczenie to dotyczy jednego załącznika. Czyli, w przypadku określenia limitu na ok. 10 MB, bez problemu można wysłać wiadomość z dwoma załącznikami po ok. 8 MB (chyba, że inne ograniczenia na to nie pozwolą).
4. Określanie maksymalnych wielkości załączników do raportów o niedostarczeniu (DSN - Delivery Status Notification)
Ostatnim już chyba miejscem, gdzie można ograniczać wielkość przesyłanych wiadomości, jest określenie maksymalnej wielkości załączników do raportu o niedostarczeniu (DSN). Załącznikami do takich wiadomości są oryginalne wiadomości, które z jakichś powodów nie zostały dostarczone. Jeśli wielkość oryginalnej wiadomości przekracza zdefiniowaną wartość maksymalnego załącznika raportu o niedostarczeniu, załącznikiem do tego raportu są tylko nagłówki oryginalnej wiadomości.
Konfigurację maksymalnych wielkości tych załączników wykonuje się przy pomocy atrybutów ExternalDsnMaxMessageAttachSize oraz InternalDsnMaxMessageAttaachSize. Pierwszy oznacza odpowiedź na wiadomości wysyłane do naszych użytkowników z zewnątrz, dla których DSN wysyłany jest poza organizację, a drugi – DSN wysyłany w ramach organizacji. Oba posiadają identyczne domyślne wartości – 10 MB.
Konfigurację większości ustawień związanych z DSN została przesunięta z ustawień per-serwer (Exchange 2007) na ustawienia per-organizacja (Exchange 2010), w związku z tym dla interesujących nas atrybutów wykonujemy ją poprzez konsolę EMS poleceniami:
- dla Exchange 2007:
set-TransportServer –Identity <nazwa_serwera> -ExternalDsnMaxMessageAttachSize 20MB -InternalDsnMaxMessageAttachSize 20MB
- dla Exchange 2010:
Set-TransportConfig –ExternalDsnMaxMessageAttachSize 20MB –InternalDsnMaxMessageAttachSize 20 MB
Podsumowanie
Raz jeszcze należy przypomnieć o propagacji wszystkich możliwych konfigurowanych limitów, wymienianych powyżej oraz w pierwszej części artykułu. Definiując je w różnych miejscach i ustalając różne, niespójne wartości można stworzyć konfigurację być może bardziej dopasowaną do naszych potrzeb, ale utrudniającą późniejsze rozwiązywanie problemów i błędów związanych z dostarczaniem wiadomości.
Więcej
MSExchange Team Blog: Controlling attachment size in Exchange Server 2007 Outlook Web Access (OWA)
exchangepedia.com / Bharat Suneja Setting Message Size Limits in Exchange 2010 and Exchange 2007
TechNet Library: Associating a DSN Message with a Transport Rule
RFC 1893: Enhanced Mail System Status Codes
Autor:

Jakub Galicki (yacoob)
MCP, MCSA+M 2003, MCSE+M 2003, MCTS, MCITP Enterprise Messaging Administrator.
Inżynier systemowy i administrator, obszary zainteresowań skupiający głównie na Active Directory i Exchange oraz współpracy tychże. Informatyką zawodowo zajmuje się od 1997 roku. Wieloletnie doświadczenia zbierane w dużej sieci administracji publicznej od niedawna weryfikuje na rynku IT.