The submission half of the system consists mainly of one program, called submit, which is responsible for enqueuing mail to be delivered. As much verification as possible is performed on the message at submission time. For mail destined for the local machine, this means making sure the destination account exists, and that any local mailing list or aliases expand properly. For mail that has a non-local host specification, the submit process checks to see if it knows how to reach the specified host. Mail which for any reason is known to be undeliverable, is not accepted for delivery.
The delivery portion of MMDF is represented by two main elements: the deliver program which manages the queue, and the channel programs which handle the details of delivery to a specific network, host, or mail system. The deliver program takes each message which is eligible to be delivered, and opens the appropriate address list. For each address in the list, deliver ensures that it is running the appropriate channel program and then passes the envelope information to the channel. A reference to the file containing the actual message text is passed to the channel program. The channel decides how to deliver the message and sees to any necessary message reformatting that may be necessary (e.g. ``header munging'').
Here is a stolen diagram:
----------- -----------
| User | |Protocol |
|Interface| | Server |
----------- -----------
| /
___________________ | /
| \\\\ | /
| -----------
| | Submit |
| | |
| ----------- . . . . . . . .->
| . Message
| .
| . Queues
| ----------- <- . . . . . . . .
| | Deliver |
| | |
| -----------
| / | \\\\
| / | \\\\
| / | \\\\
| ----------- ----------- -----------
| | List | | Local | |Protocol |
| | Channel | | Channel | | Channel |
| ----------- ----------- -----------
|______|
So, for example:
Complete, and fairly gory, details on this process appear in Addressing in MMDF-II.
Up to toplevel, on to domain tables.