From Messaging Server Technical Reference Wiki
Jump to: navigation, search

The MTA consists of a large number of components, but the central unifying construct in the MTA is the channel. A channel represents an e-mail connection with another computer system or group of systems. The actual hardware connection or software transport or both may vary widely from one channel to the next. Only the MTA administrator need know anything about the MTA's channels; users are never aware of the existence of channels and only see a single, uniform interface regardless of how messages reach their destination.

Each channel consists of one or more channel programs and an outgoing message queue for storing messages that are destined to be sent to one or more of the systems associated with the channel. Channel programs perform two functions: (1) they transmit messages to remote systems, deleting them from their queue after they are sent, and (2) they accept messages from remote systems, placing them in the channel queues. Note that while a channel program only removes messages from its own queue it can enqueue messages on any queue whatsoever, including its own.

A channel program which initiates a transfer to a remote system on its own is called a "master" program, while a program which accepts transfers initiated by a remote system is called a "slave" program. A channel may be served by a master program, a slave program, or both. Either type of program may or may not be bidirectional; the direction in which a message is travelling may have nothing to do with the type of program that handles it. Very often, however, a master program transmits messages, while a slave program receives messages. An SMTP channel, for instance, has a master program that only transmits messages (the SMTP client) and a slave program that only receives messages (the SMTP server).

The execution of channel programs is primarily triggered and controlled by the two major "control" processes of the MTA: the Dispatcher listens on TCP ports and triggers execution of appropriate "slave" channel programs (such as the SMTP server and LMTP server "slave" programs), while the Job Controller maintains a database of what messages are awaiting delivery attempts, and schedules and triggers execution of channel programs (primarily channel "master" programs) to attempt deliveries. However, channel programs can be run via other mechanisms; see, for instance, the imsimta run utility, used for manual triggering of channel program execution.

See also: