Given the complexity of Microsoft Exchange Server 2003, it isn't surprising that many changes and bug fixes Microsoft makes to Exchange don't attract attention—until you're affected by a bug and discover that Microsoft has already patched it. This is certainly the case with Exchange 2003 Service Pack 2 (SP2). Here's one fix that might have escaped your attention.

The internal structure of the Jet database that's at the heart of the Information Store (IS) is based on 4KB pages. Microsoft plans to increase the page size in Exchange 12 and make additional improvements to help Exchange deal more efficiently with large messages. Until then, however, the transit of any large message causes Exchange to take a deep breath before processing the data. In this context, I define a large message to be more than 5MB, or too big to be held in a single transaction log. It's not unusual for users to try to send large messages—attaching the contents of a complete CD to a message so friends can install some software, for example. The largest message I ever saw was 2GB, but I don't believe that's a record.

At any rate, sending a large message isn't a good thing to do. Apart from straining the IS, sending large messages causes side effects. For example, a message might exceed the maximum sent-message size as defined for the organization in the Global Settings Message Delivery properties, which Figure 1 shows. A large message addressed to external recipients might exceed the maximum message size defined for the SMTP connector. And sending a large message might exceed both the sender's mailbox quota and the mailbox quotas of the unfortunate recipients.

The damage is compounded when Exchange generates a nondelivery report (NDR). The IS passes the message to the Transport service and discovers that the message exceeds the limit only after the Transport service applies limit checking and rejects the message. The IS must then send an NDR containing the message to the sender. So, for example, a 50MB message that's refused because it exceeds the global message size is handled twice by the IS—a performance penalty that could be avoided if a check were performed earlier in the transmission cycle.

Lack of communication between the Exchange server and the client causes the problem. Clients aren't intelligent enough to query Exchange about size limits before sending a message, and Exchange lacks the intelligence to flag limits to clients and refuse to accept any message that exceeds those limits. Exchange 2003 SP1 and the Exchange 2000 Server post-SP3 update rollup solve part of the problem by making the IS check the message size and mailbox quota before accepting a new message from a Messaging API (MAPI) client.

Exchange 2003 SP1 checks size limits when a client attempts to send a message to the server. If Microsoft Office Outlook 2003 or other MAPI clients are running in online mode, the IS rejects the message immediately. If Outlook 2003 is running in Cached Exchange Mode, the IS rejects the message with an NDR that Outlook receives the next time it picks up new messages.

Although this fix represents real progress, the IS still has to generate an NDR to send offending messages back to Outlook clients that run in Cached Exchange Mode. However, a procedure in Exchange 2003 SP2 lets clients ask Exchange about message-size limits before attempting to send a message. You can obtain the same fix in the most recent post-SP1 update for Exchange 2003 or the post-SP3 update for Exchange 2000, both of which are available from Microsoft support. (For information about applying this fix, see the Microsoft article "A message that exceeds the configured size limit is sent to a server that is running Exchange Server 2003" at http://support.microsoft.com/?kbid=894795.)

Because Exchange operates on a client-server basis and existing clients don't know to ask the server about message-size limits, you need to deploy updated clients to achieve the complete solution. Today, the only client that can query Exchange for message-size limits is Outlook 2003 SP2. Microsoft is unlikely to retrofit this functionality to other clients.

With updated clients and server in place, Outlook checks whether a message exceeds a message-size limit and whether its transmission will cause the mailbox quota to be exceeded. If the user's mailbox quota is exceeded, Outlook tells the user to clean up the mailbox before trying to send the message again. The advantage to this fix is that it improves efficiency by entirely avoiding the needless transfer of large messages to and from the server.

Tony Redmond (exchguru@windowsit pro.com) is a contributing editor for Windows IT Pro, a senior technical editor for Exchange & Outlook Administrator, vice president and chief technology officer for HP Services, and author of Microsoft Exchange Server 2003 with SP1 (Digital Press).