16.5. The Full Flow
The design example presented in this chapter separated responsibilities into a SendingMailServer and ReceivingMailServer. In some mail systems (such as the sendmail program), SendingMailServer and ReceivingMailServer functionality is handled by the same program. Other systems (such as qmail) break the functionality into multiple programs. For example, the qmail-smptd program acts as a ReceivingMailServer, the qmail-lspawn/qmail-local program handles delivery to the user, and the qmail-rspawn/qmail-remote program acts as a SendingMailServer.
To see how the responsibilities for a full mail system can be separated into multiple processes ("Do a Little Job Well and You May Be Called Upon Often"), look at Figure 16-4, which is an outline for a design for a complete system.[*]
[*] An additional process—a relay—can be part of the flow. A relay acts as a ReceivingMailServer and a SendingMailServer. Relaying mail, except from trusted SendingMailServers, is strongly discouraged by antispam guidelines.
Figure 16-4. Processes for delivering mail
Each process plays a role in delivering mail ("Separate of Concerns to Make Smaller Concerns"):
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access