Po upgrade na Exchange 2010 se razantně zpomalil relay mailů z našich aplikací skrz Exchange (SMTP forwarding).
Jak se ukázalo, řešením je přepínač MaxAcknowledgementDelay na příslušném receive-connectoru:
Set-ReceiveConnector "Connector Name" -MaxAcknowledgementDelay 0
MaxAcknowledgementDelay určuje, jak dlouho může Exchange zdržet session, aby jí oznámil výsledek odeslání. Oficiální dokumentace říká:
The MaxAcknowledgementDelay parameter specifies the maximum period the transport server delays acknowledgement until it verifies that the message has been successfully delivered to all recipients. When receiving messages from a host that doesn’t support shadow redundancy, an Exchange Server 2010 transport server will delay issuing an acknowledgement until it verifies that the message has been successfully delivered to all recipients. However, if it takes too long to verify successful delivery, the transport server will time out and issue an acknowledgement anyway.
Osobně to laicky interpretuji tak, že Exchange se při relayingu snaží přijatý mail rovnou i odeslat, tak, aby té iniciující session rovnou oznámil, jestli se to podařilo. A výše uvedený časový limit říká, jak dlouho na to Exchange má, jinak inciující session pokračuje, aniž by se o výsledku odeslání přímo dozvěděla. Nastavením na 0 se řekne, že odesílající aplikace nemá zájem se problém dozvědět hned, ale holt kdyžtak dojde na NDR (Non-Delivery-Report).
Každopádně odesílání 13.000 mailů našich newsletterů z business.center.cz se z hrůzostrašného tempa 1 mail/3-10 sec vrátilo na původní čísla známá z Exchange 2007, tedy zhruba 30 minut na všechny maily (což mimochodem není nic proti dávným dobám, kdy jsme používali Merak Mail Server, a ten to dokázal převzít do fronty zhruba za 5 minut, ale to je holt jiná kategorie).