Exchange Message Size
Hallo zusammen,
Schon vor längerer Zeit habe ich mal mit der Messagesize auf Exchange 2010 rumgespielt und dabei einige Eigenarten festgestellt. Nun habe ich mal Zeit gefunden, das in einem Blog Artikel zu veröffentlichen.
Die Messagesize kann an vielen verschiedenen Orten eingestellt werden.
- Global Transport Settings
- AD Site Link (Default Unlimited und kann nur mit dem cmdlets gesetzt werden - Set-RoutingGroupConnector “CONNECTOR NAME” -MaxMessageSize 20Mb)
- RoutinggroupConnector (Bei Koexistenz mit Exchange 2003
- Set-RoutingGroupConnector “CONNECTOR NAME” -MaxMessageSize 20Mb)
- Receive Connector
- Send Connector
- Mailbox / Contact / MailEnabled User / Distribution Group / Public Folder
Global Transport Settings
Settings auf dem Receive Connector
Settings auf dem Send Connector
Settings auf dem User Objekt
Mailversand per SMTP
Es ist überall 10240 Bytes eingestellt - also 10 MB. Ich habe mir mal so eine Datei gemacht.
10'483'722 / 1024 / 1024 = 9.99 MB
Nun versuche ich dieses Attachment mit Powershell per SMTP zu versenden.
$SmtpServer = "localhost"
$From = "someone@here.com"
$To = "jane.smith@public.com"
$Subject = "Messagesize"
$Body = "Just a little Test"
$Attachment = new-object Net.Mail.Attachment("C:\attachment_small.txt")
$message = New-Object system.net.mail.mailmessage ($from,$to,$subject,$body)
$message.attachments.add($attachment)
$message.IsBodyHTML = $false
$SmtpClient = new-object system.net.mail.smtpClient
$SmtpClient.host = $SmtpServer
$SmtpClient.Send($message)
Das schlägt aber fehl, weil das Attachment angeblich zu gross ist.
Erst ab einer Dateigrösse von etwas über 7 MB kann ich das Mail per SMTP versenden.
Wieso das so ist zeigt folgendes kleine Script. Das Attachment mit 7.2 MB wird per Powershell in Base64 codiert. Dadurch bläht sich das Attachment auf 9.5 MB auf. Als grobe Faustregel kann man somit mit etwa 30% Overhead durch die Konvertierung des Attachments rechnen.
Function EncodeToBase64([string]$toEncode)
{
$toEncodeAsBytes = [system.text.ASCIIEncoding]::ASCII.GetBytes($toEncode)
[string]$returnvalue = [system.Convert]::ToBase64string($toEncodeAsBytes)
return $Returnvalue
}
[string]$Attachment = Get-Content C:\Attachment_small.txt
$Attachment.Length / 1024 / 1024
$AttachmentBase64 = EncodeToBase64($Attachment)
$AttachmentBase64.Length / 1024 / 1024
Mailversand per MAPI
Nun versuchen wir mal Mail mit einem Attachment per Outlook (also per MAPI) zu versenden. Dazu habe ich mir extra eine zu grosse Datei angelegt.
Versuche ich diese Datei als Attachment in Outlook anzuhängen erhalte ich die Fehlermeldung von Outlook, dass diese Datei zu gross ist. Dies ist übrigens auch in älteren Outlook Versionen so, nicht nur in Outlook 2013 wie hier im Screenshot gezeigt.
Macht man das Attachment kleiner...
...so kann man die Datei dann in Outlook Problemlos hinzufügen.
Weitere Informationen:
- Setting Message Size Limits in Exchange 2010 and Exchange 2007 http://exchangepedia.com/2007/09/exchange-server-2007-setting-message-size-limits.html/2
- Base64 encoding and decoding with PowerShell http://www.techmumbojumblog.com/?p=306