Depuis la version 8.12 de sendmail, la fonctionnalité de soumission d'un message a été logiquement séparée, bien que figurant toujours dans le même exécutable. La figure 2.2 montre les différentes fonctionnalités de sendmail.
Lors d'une soumission de message, sendmail, configuré à l'aide d'un fichier de configuration séparé submit.cf se contente de se connecter à un serveur SMTPpour envoyer le message. Si le serveur ne répond pas, sendmaildépose le message dans une file d'attente (clientmqueue/) réservée à cet usage.
Cette instance de sendmail, appelée Message Submission Program, n'a pas besoin d'avoir les droits de root pour fonctionner. Son seul besoin est de pouvoir écrire dans la file d'attente, en cas de besoin. Afin de réduire les failles de sécurité, un groupe spécifique doit être créé (smmsp) et l'exécutable sendmailpeut se contenter d'avoir le bit set-group-id et d'appartenir à ce groupe smmsp.
Périodiquement, une autre instance de sendmail, le Queue Runner, surveille cette file d'attente spécifique, et s'il y a des messages en souffrance, tente une connexion vers le serveur SMTP.
Ces deux instances de sendmailsont paramétrées avec un fichier de configuration spécifique, submit.cf, qui n'a comme rôle essentiel que de localiser la file d'attente, le serveur SMTPet quelques autres variables.
Enfin, le serveur SMTPconstitue le dernier composant : le Message Transfer Agent. Il a sa propre file d'attente, mqueue/, distincte de la file d'attente précédente, son propre fichier de configuration sendmail.cf, et tourne avec les droits de root car il est lancé par cet utilisateur au démarrage du système.