How to Standardise Exchange 2010 Message Size Limits

There has long been “somewhere” in my exchange organisation that has a 10MB message size limit, rather than our supposed standard 15MB. Finally this annoyed me enough to do something about it. Because I’m all for saving time, I figured I’d script it. I trawled through Exchange and found all the places where it is possible to limit the size of messages (if I’ve missed any, please let me know!). From here I wrote a script to find the size limit on every instance of each of these possible places. As far as I can see, there are three places of concern in an Exchange 2010 organization: Send Connectors, Receive Connectors and the Global Transport Configuration.

Evaluating the Current Limits

It is possible to use three simple cmdlets to retrieve any and all data that is required to achieve my goal…But that wouldn’t be much fun, would it? No sense running these three and trawling through the results each time. See Making it Pretty below for the final result.

Send Connectors are present at the organization level (that is, they are not specific to a particular server, and can be assigned to one or more). To retrieve send connectors, simply use the Get-SendConnector cmdlet. We are looking at the MaxMessageSize property:

Receive Connectors are server-specific. Fortunately, however, this is irrelevant in our case: Get-SendConnector and the MaxMessageSize property are this time of interest:

Finally let’s investigate the Global Transport Config. This applies to All transports in the Organization. You can retrieve its settings by running the cmdlet Get-TransportConfig. We’re interested in the properties MaxReceiveSize and MaxSendSize:

Making it Pretty

It’s pretty easy to trawl through the above results and investigate them…but where’s the fun in that? Or perhaps you want to do this as part of your regular Exchange Organisation health check report (you do have one, don’t you?)? I’m going to start by finding the smallest message size limit, since this is the one that we’re concerned about here. Small size limits act as a bottle-neck in the truest sense of the word.

I’ve put all my relative limits into an object array that looks like this:

Type Server Name Limit —- —— —- —– SendConnector Organization EdgeSync - Default-First-Site-Name to Internet 10 MB (10,485,760 bytes) SendConnector Organization EdgeSync - Inbound to Default-First-Site-Name unlimited ReceiveConnector EX01 Default EX01 15 MB (15,728,640 bytes) ReceiveConnector EX01 Client EX01 15 MB (15,728,640 bytes) ReceiveConnector EX02 Default EX02 15 MB (15,728,640 bytes) ReceiveConnector EX02 Client EX02 15 MB (15,728,640 bytes) ReceiveConnector EX01 Anonymous Authentication Networks 15 MB (15,728,640 bytes) ReceiveConnector EX02 Anonymous Authentication Networks 15 MB (15,728,640 bytes) TransportConfig Organization Maximum Receive Size 15 MB (15,728,640 bytes) TransportConfig Organization Maximum Send Size 15 MB (15,728,640 bytes)

Let’s grab the smallest limit from here (Note: Usually you would use Measure-Object here, but “unlimited” is, unfortunately, not a numerical value):

$smallest = $limits | Sort-Object Limit | Select-Object –first 1
$smallest

Now we know which is the very smallest size of message that can fully traverse the organization as well as one of the places it exists. To find all the places this smallest limit exists, we run this line:

$limits | Where {$_.Limit -eq ($smallest).Limit }

Download the finished script here

And of course, the output:

The maximum size of any email that can fully traverse your Exchange Organization is 10 MB (10,485,760 bytes)
This is because of the following object(s):

Type             Server       Name                                           Limit
----             ------       ----                                           -----
SendConnector    Organization EdgeSync - Default-First-Site-Name to Internet 10 MB (10,485,760 bytes)

You should raise the maximum size of message allowed across the object(s) above if you are having mail
delivery issues of large items. Note that this script will not check non-exchange transports such as
AntiVirus and Smart-hosts.
Raise the size of message allowed across Send Connectors with Set-SendConnector -MaxMessageSize
Raise the size of message allowed across Receive Connectors with Set-ReceiveConnector -MaxMessageSize
Raise the size of message allowed across the global transport config with Set-TransportConfig -MaxReceiveSize
	and Set-TransportConfig -MaxSendSize</pre>
Written on April 28, 2011