SMMAPD(8)
π SMMAPD(8) β the Sendmail + Postfix socket map daemon, Cyrus IMAP edition
okay bestie, welcome to smmapd(8), aka the little daemon from the Cyrus IMAP docs that answers the question everybody asks before they hand you an email: "does this mailbox even exist tho?" π
β¨ NAME β¨
smmapd β Cyrus IMAP documentation β the Sendmail and Postfix socket map daemon π«Ά
π¦ SYNOPSIS π¦
smmapd [ -C config-file ] [ -U uses ] [ -T timeout ] [ -D ] [-p]
πΈ DESCRIPTION πΈ
okay so smmapd is a Sendmail and Postfix socket map daemon, and its whole job is a vibe check on a Cyrus mailbox. It verifies that:
- the mailbox exists,
- it is postable,
- it is not blocked for the
smmapdservice in theuserdenydatabase, - and it is under quota.
It takes commands on its standard input and replies on its standard output. And it MUST be invoked by master(8) with those descriptors attached to a remote client connection β that's not a suggestion, that's the whole deal, no cap. π₯
The queries it receives contain the map name followed by the mailbox, and smmapd literally just ignores the map name. iconic behavior honestly.
Queries with plus addressing, when -p is not passed, return OK when the user has a mailbox with the name after the plus; otherwise the result is NOTFOUND. The match for the mailbox after the plus is performed case-sensitive, and for the address before the plus it depends on lmtp_downcase_rcpt. π
The use case? Verify in Sendmail or Postfix whether the destination exists before accepting an email. Then β and this is the sneaky part β if autocreate_sieve_folders is set but the folder doesn't exist yet, smmapd will return NOTFOUND, unless -p is passed. π
Another use case is doing something in a Sieve script with emails, based on plus addressing, without delivering them into the correspondent sub-folder. To accept such emails, when the folder with the same name does not exist, -p must be passed. periodt.
smmapd reads its configuration options out of the imapd.conf(5) file unless you say otherwise with -C. π§
π OPTIONS π
-Cconfig-file β use the specified configuration file config-file rather than the defaultimapd.conf(5). yes bestie, you can have a whole separate config, main character energy β¨-Uuses β the maximum number of times the process should be used for new connections before shutting down. the default is250.-Ttimeout β the number of seconds the process will wait for a new connection before shutting down. note that a value of0(zero) will disable the timeout. the default is60.-Dβ run the external debugger specified indebug_command. π-pβ skip plus addressing: everything from+until@. when looking up theuserdenydatabase, plus addressing is always skipped, irrespective of this option. (yes, even if you don't pass-p. theuserdenylookup does not care about your feelings π)
π EXAMPLES π
smmapd is commonly included in the SERVICES section of cyrus.conf(5) like so:
SERVICES {
imap cmd="imapd -U 30" listen="imap" prefork=0
imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
lmtpunix cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20
smmap cmd="smmapd" listen="/var/run/cyrus/socket/smmap" prefork=0
sieve cmd="timsieved" listen="sieve" prefork=0
notify cmd="notifyd" listen="/var/run/cyrus/socket/notify" proto="udp" prefork=1
httpd cmd="httpd" listen=8080 prefork=1 maxchild=20
}
look at that little smmap line living its best life in there π₯Ή
π FILES π
/etc/imapd.conf/etc/cyrus.conf
π SEE ALSO π
π AUTHOR π
The Cyrus Team, Nic Bernstein (Onlight) π«Ά
π COPYRIGHT π
1993β2026, The Cyrus Team
okay that's the whole page bestie, you ate it up, no notes π β¨
and for the cute little sign-off: this was Cyrus IMAP 3.12.4, dated Sep 09, 2026 β so go forth, map those sockets, and remember, NOTFOUND is a valid answer and it's not about you. π¦πΈπ
π¦ where this page comes from
- fedora 44: cyrus-imapd 3.12.4-1.fc44 Β· BSD-Attribution-HPND-disclaimer
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms