To support message routing and delivery, Hub Transport and Edge Transport servers maintain a few special directories:
The sections that follow discuss how the Pickup and Replay
directories are used and configured and also look at the related
concepts of message throttling and back pressure.
Understanding Message Pickup and Replay
When a Hub Transport or an Edge Transport server receives incoming
mail from a server using a non-SMTP connector, it stores the message in
the Replay directory and then resubmits it for delivery using SMTP.
When a Hub Transport or an Edge Transport server has messages to
deliver to a non-SMTP connector, it stores the message in the Replay
directory and then resubmits it for delivery to the foreign connector.
In this way, messages received from non-SMTP connectors are processed
and routed, and messages to non-SMTP connectors are delivered.
Your Transport servers automatically process any correctly formatted
.eml message file copied into the Pickup directory. Exchange considers
a message file that is copied into the Pickup directory to be correctly
formatted if it meets the following conditions:
-
Is a text file that complies with the basic SMTP message format and
can also use Multipurpose Internet Mail Extensions (MIME) header fields
and content
-
Has an .eml file name extension, zero or one e-mail address in the
Sender field, and one or more e-mail addresses in the >From field
-
Has at least one e-mail address in the To, Cc, or Bcc fields and a blank line between the header fields and the message body
Transport servers check the Pickup directory for new message files
every five seconds. Although you can't modify this polling interval,
you can adjust the rate of message
file processing by using the –PickupDirectoryMaxMessagesPerMinute
parameter on the Set-TransportServer cmdlet. The default value is 100
messages per minute. When a transport server picks up a message, it
checks the message against the maximum message size, the maximum header
size, the maximum number of recipients, and other messaging limits. By
default, the maximum message size is 10 megabytes (MB), the maximum
header size is 64 kilobytes (KB), and the maximum number of recipients
is 100. You change these limits using the Set-TransportServer cmdlet.
If a message file doesn't exceed any assigned limits, the Transport
server renames the message file using a .tmp extension and then
converts the .tmp file to an e-mail message. After the message is
successfully queued for delivery, the Transport server issues a "close"
command and deletes the .tmp file from the Pickup directory.
Your Transport servers automatically process any correctly formatted
.eml message file copied into the Replay directory. Exchange considers
a message file that is copied into the Replay directory to be correctly
formatted if it meets the following conditions:
-
Is a text file that complies with the basic SMTP message format and can also use MIME header fields and content
-
Has an .eml file name extension and its X-Header fields occur before all regular header fields
-
Has a blank line between the header fields and the message body
Transport servers check the Replay directory for new message files
every five seconds. Although you can't modify this polling interval,
you can adjust the rate of message
file processing. To do this, use the
–PickupDirectoryMaxMessagesPerMinute parameter of the
Set-TransportServer cmdlet. This parameter controls the rate of
processing for both the Pickup directory and the Replay directory. The
Transport server renames the message file using a .tmp extension and
then converts the .tmp file to an e-mail message. After the message is
successfully queued for delivery, the server issues a "close" command
and deletes the .tmp file from the Replay directory.
Exchange considers any improperly formatted e-mail messages received
in the Pickup or Replay directory to be undeliverable and renames them
from the standard message name (MessageName.eml) to a bad message name (MessageName.bad).
Because this is considered a type of message-processing failure, a
related error is generated as well in the event logs. In addition, if
you restart the Microsoft Exchange Transport service when there are
.tmp files in the Pickup directory, Replay directory, or both
directories, all .tmp files are renamed as .eml files and are
reprocessed. This can lead to duplicate message transmissions.
Configuring and Moving the Pickup and Replay Directories
Because of the way message pickup and replay works, Transport
servers do not perform any security checks on messages submitted
through these directories. This means that if you've configured
anti-spam, antivirus, sender filtering, or recipient filtering actions
on a Send connector, those checks are not performed on the Pickup or
Replay directory. To ensure that the Pickup and Replay directories are
not compromised by malicious users, specific security permissions are
applied, which must be tightly controlled.
For the Pickup and Replay directories, you must configure the following permissions:
-
Full Control for Administrator
-
Full Control for Local System
-
Read, Write, and Delete Subfolders and Files for Network Service
As might be necessary for balancing the load across a server's disk
drives or ensuring ample free space for messages, you can move the
Pickup and Replay
directories to new locations. You move the location of the Pickup
directory by using the –PickupDirectoryPath parameter on the
Set-TransportServer cmdlet. You move the location of the Replay
directory by using the –ReplayDirectoryPath parameter on the
Set-TransportServer cmdlet. With either parameter, successfully
changing the directory location depends on the rights that are granted
to the Network Service account on the new directory location and
whether the new directory already exists. Keep the following in mind:
-
If the new directory does not already exist and the Network Service
account has the rights to create folders and apply permissions at the
new location, the new directory is created and the correct permissions
are applied to it.
-
If the new directory already exists, the existing folder permissions
are not checked or changed. Exchange assumes you've already set the
appropriate permissions.
Example 1 provides the syntax and usage for moving the Pickup
and Replay directories. If you want to move both the Pickup and Replay
directories, you should do this in two separate commands.
Example 1. Changing the Pickup directory
Syntax
Set-TransportServer -Identity ServerIdentity
[-PickupDirectoryPath LocalFolderPath
]
[-ReplayDirectoryPath LocalFolderPath
]
Usage
Set-TransportServer -Identity "CorpSvr127"
-PickupDirectoryPath "g:\Pickup"
Changing the Message Processing Speed
By default, Transport servers simultaneously and separately process
the Pickup and Replay directories. Transport servers scan the Pickup
and Replay directories for new message files once every 5 seconds (or
12 times per minute), and they process messages copied to either
directory at a rate of 100 messages per minute, per directory. Because
the polling interval is not configurable, this means the maximum number
of messages that can be processed in either the Pickup or Replay
directory during each polling interval, by default, is approximately 8
(100 messages per minute divided by 12 messages processed per minute).
Although the polling interval is not configurable, the maximum
number of messages that can be processed during each polling interval
is configurable. You assign the desired processing rate using the
–PickupDirectoryMaxMessagesPerMinute parameter, because this processing speed is used with both the Pickup and Replay directories. You might want to adjust the message processing rate in these situations:
-
If the server is unable to keep up with message processing, you
might want to decrease the number of messages processed per minute to
reduce processor and memory utilization.
-
If the server is handling message transport for a large organization
and you are seeing delays in message transport because of an abundance
of messages in the Pickup directory, Replay directory, or both
directories, you might want to increase the number of messages
processed per minute, providing that the server can handle the
additional workload.
You assign the desired processing rate using the
–PickupDirectoryMaxMessagesPerMinute parameter of the
Set-TransportServer cmdlet, as shown in Example 2, and this processing
speed is used with both the Pickup and Replay directories. Your
Transport server then attempts to process messages in each directory
independently at the rate specified. You can use a per-minute message
processing value between 1 and 20,000.
Example 2. Changing the message processing speed
Syntax
Set-TransportServer -Identity ServerIdentity
[-PickupDirectoryMaxMessagesPerMinute Speed
]
Usage
Set-TransportServer -Identity "CorpSvr127"
-PickupDirectoryMaxMessagesPerMinute "500"