The following explains how to observe and adjust the Maximum Message Size for messages passing through the Zimbra MTA (Postfix). The message_size_limit postconf parameter is configured globally for all Zimbra MTAs. The default Zimbra MTA configuration uses the default Postfix message_size_limit of 10MB (i.e. '10240000' bytes). Note that this is the size of the full RFC 2822 internet message, after any necessary MIME-encoding.
An Initial Warning On These Values
Please do not set these limits too high, as postfix will check to confirm you have the free space on the partition. For zimbraMtaMaxMessageSize, it multiplies the variable by 1.5 and if the free space isn't available on the partition it will not send ANY messages - effectively causing an mta outage. You'll see a message in /var/log/zimbra.log like this if you set zimbraMtaMaxMessageSize to high :
Jan 15 11:18:53 SERVERNAME postfix/smtpd: NOQUEUE: reject: MAIL from smtp.DOMAIN.com[18.104.22.168]: 452 4.3.1 Insufficient system storage; proto=ESMTP helo=<mail.DOMAIN.com> Jan 15 11:18:53 SERVERNAME postfix/smtpd: warning: not enough free space in mail queue: 161044520960 bytes < 1.5*message size limit
General Discussion About Value Sizing
This is being added because we find many customers are confused by the variable sizing and then what users see as the limitation when they go to upload an attachment. This wiki mentions the various variables involved with message sizing. The important part to pay attention to is:
- "Note that this is the size of the full RFC 2822 internet message, after any necessary MIME-encoding."
There is no predictable % increase of the message size after the encoding. We recommend a 150% assumption if one doesn't want to be tweaking the variables often. Meaning, if your policy it to not allow the sending of messages/attachments much larger than 25 MB's BEFORE encoding, then use 38MB's for the variable numbers that you would configure per the steps below. Normally, the encoding never reaches this level.
To upload a 15957664 byte file [15.218414307 megabyte] you would need to have the upload limit at least set to 20.849226952 [megabytes]. That's using %137 increase for mime-encoding. See this article for details on it:
You can use this calculator to help manage the variable you want:
Note - again, we recommend use %150 conversion rate for the encoding so you can be sure of the upload rather than cutting it close. The %137 reference isn't a fixed number but rather a possible average.
Postfix configuration (zimbraMtaMaxMessageSize and message_size_limit)
You can examine the current value of this parameter like this:
# su - zimbra $ postconf message_size_limit message_size_limit = 10240000
This configuration parameter is stored in the zimbra ldap directory, and propagated to postconf's message_size_limit by zmmtaconfig, which is invoked by the zimbra postfix command. The following commands will set the message_size_limit to 2MB (adjust this value to suit your needs):
# su - zimbra $ zmprov modifyConfig zimbraMtaMaxMessageSize 2048000 $ postfix reload
You can then confirm the changes with this command:
$ postconf | grep message_size_limit
Please note: zimbraMtaMaxMessageSize also applies to IMAP APPENDs. The IMAP server will set the largest allowed message size to the zimbraMtaMaxMessageSize value. This would apply to the APPEND operation, which would include actions such as copying a message in an IMAP client.
File upload size configuration (zimbraFileUploadMaxSize)
Until ZCS 5, there is a separate configuration parameter for file uploads . File uploads include, for example, attachments to messages (appointments, tasks, etc), and messages imported by the migration tools (PST Import Wizard, Exchange Migration Wizard, etc). The zimbraFileUploadMaxSize can be configured globally or per server. Note: If you have more than one mailbox node, it may be necessary to restart tomcat on nodes where the commands were not run in order to pick up the changes immediately.
This will globally set the size to 5mb:
# su - zimbra $ zmprov modifyConfig zimbraFileUploadMaxSize 5000000
Then this will allow 20mb uploads to the server mail2.domain.com:
$ zmprov modifyServer mail2.domain.com zimbraFileUploadMaxSize 20000000
If change does not happen after a short period of time or flushing the cache, you most likely will need to do a full zmcontrol restart on the mailstores. See:
- Clarify and update attrs.xml about necessary restarts for mta/file size variables
The size of the zimbraMailContentMaxSize controls the overall message size
su - zimbra zmprov ms `zmhostname` zimbraMailContentMaxSize 20000000 zmprov modifyConfig zimbraMailContentMaxSize 20000000
<attr id="807" name="zimbraMailContentMaxSize" type="long" cardinality="single" optionalIn="globalConfig,server" flags="serverInherited" since="6.0.0_BETA1"> <globalConfigValue>10240000</globalConfigValue> <desc>Maximum size in bytes for the <content > element in SOAP. Mail content larger than this limit will be truncated.</desc> </attr>
Here is an example to set the max message size to 42MB zmprov ms `zmhostname` zimbraFileUploadMaxSize 44040192 zmprov ms `zmhostname` zimbraMailContentMaxSize 44040192 zmprov mcf zimbraMtaMaxMessageSize 44040192 postfix reload one thing to watch for is to use a conversion toll to calculate the value in bytes otherwise it won't be accepted
- Clarify and update attrs.xml about necessary restarts for mta/file size variables
What The User Sees In ZWC For An Attachment
With ZCS 8.0.4, the max. upload size will reflect the size after encoding. Before ZCS 8.0.4, they saw the size prior to encoding, which caused confusion.
- Attachment file size check should be before encoding
Tests To MTA's To See Max Size And Log Events
This can be useful to test if your server is configured right or if it's another server that is rejecting messages because of max. size. Let's say you get a bounce message, something like:
[Email service] tried to deliver your message, but it was rejected by the server for the recipient domain domainA.com by emailgateway.domainA.com [192.168.1.1]. The error that the other server returned was: 552 5.3.4 Error: message file too big from [Email service mta ip address]
You can then telnet to the hosts mention over port 25 and see what the max size is set to. Note - if you require authentication to do this test completely, please see [Simple Troubleshooting For SMPT Via Telnet] .
$ telnet zcsmta.example.com 25 Trying zcsmta.example.com... Connected to zcsmta.example.com Escape character is '^]'. 220 [some vendor identifier] service is ready. helo host.example.com 250 host.example.com ehlo host.example.com 250-example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XXXXXXXA 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN MAIL FROM:<firstname.lastname@example.org> SIZE=99999999 552 5.3.4 Message size exceeds fixed limit MAIL FROM:<email@example.com> SIZE=10240000 250 2.1.0 Ok quit 221 2.0.0 Bye
The "250-SIZE 15728640" is the one your interested in. In this case, there's a 15MB max message size limit by the companies mta relay edge device. Zimbra wasn't the problem in this case. Note - please remember that this size is for the total message size, so if the email that is being bounced and it has an attachment you have to consider the increase in size because of the mime-encoding increase [%137].
The test above where I send the message I would be sending exceeded the '250-SIZE 10240000" will also be logged on the Zimbra mta's /var/log/zimbra.log :
Apr 24 09:05:06 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from host.example.com[192.168.1.166]: 552 5.3.4 Message size exceeds fixed limit; proto=ESMTP helo=<example.com>
If you attempt to send from an external client a message that exceeds the limits on your Zimbra server, you'll see the following log event in /var/log/zimbra.log :
Apr 24 08:33:26 zcsmta postfix/smtpd: warning: 7A735345A: queue file size limit exceeded
The 71735345A is the postfix queue id of the message in question.
In summary, a good starting point to see log events around exceeding message size is:
# grep postfix /var/log/zimbra.log | egrep 'reject|exceed|limit|warn' Apr 24 07:46:43 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from host.example.com[192.168.1.166]: 552 5.3.4 Message size exceeds fixed limit; proto=ESMTP helo=<host.example.com> Apr 24 07:47:19 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from host.example.com[192.168.1.166]: 552 5.3.4 Message size exceeds fixed limit; proto=ESMTP helo=<host.example.com> Apr 24 08:33:26 zcsmta postfix/smtpd: warning: 7A735345A: queue file size limit exceeded Apr 24 09:05:06 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from host.example.com[192.168.1.166]: 552 5.3.4 Message size exceeds fixed limit; proto=ESMTP helo=<host.example.com>
- To also see this max message size issues via reports you can run, see: