SMMAPD(8)

πŸ’Œ SMMAPD(8) β€” the sendmail/postfix socket map daemon, bestie edition πŸ’Œ

okay so this is the smmapd page from the Cyrus IMAP docs, and it's honestly such an underrated little icon?? it's the Sendmail and Postfix socket map daemon β€” the one that goes "yeah bestie, that mailbox is real" before your mail server embarrasses itself. let's get into it πŸ’…


✨ NAME ✨

smmapd β€” Cyrus IMAP documentation

Sendmail and Postfix socket map daemon πŸ¦‹


✨ SYNOPSIS ✨

smmapd [ -C config-file ]  [ -U uses ] [ -T timeout ] [ -D ] [-p]

✨ DESCRIPTION ✨

so smmapd is a Sendmail and Postfix socket map daemon, and its whole job is to verify things before anyone gets too excited. specifically it checks that:

  • a Cyrus mailbox exists
  • it is postable
  • it is not blocked for the smmapd service in the userdeny database
  • it is under quota

all four, no shortcuts, no cap 🫢

It accepts commands on its standard input and responds on its standard output. And like β€” this is the important part β€” it MUST be invoked by master(8) with those descriptors attached to a remote client connection. that's not a suggestion, that's the vibe check and it has to pass.

The received queries contain the map name followed by the mailbox, and honestly? smmapd just ignores the map name. doesn't care. not its business. πŸ™ˆ

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. and the match rules are picky in the most specific way:

  • the match for the mailbox after the plus is performed case-sensitive
  • for the address before the plus β€” it depends on lmtp_downcase_rcpt

so keep that in mind, periodt.

🌸 the use cases, because they're actually so real 🌸

The use case is to verify in Sendmail or Postfix if the destination exists, before accepting an email. Then β€” here's the plot twist β€” if autocreate_sieve_folders is set, but the folder does not exist yet, smmapd will return NOTFOUND, unless -p is passed.

Another use case is to do something in a Sieve script with emails, based on plus addressing, without delivering them in the correspondent sub-folder. To accept such emails, when the folder with the same name does not exist, -p must be passed. like, mandatory. no -p, no acceptance, sorry babe 😭

And last but extremely not least: smmapd reads its configuration options out of the imapd.conf(5) file unless specified otherwise by -C.


✨ OPTIONS ✨

  • -C config-file β€” use the specified configuration file config-file rather than the default imapd.conf(5). your config, your rules πŸ’–
  • -U uses β€” the maximum number of times that the process should be used for new connections before shutting down. default is 250. it has a limit and it respects it.
  • -T timeout β€” the number of seconds that the process will wait for a new connection before shutting down. note that a value of 0 (zero) will disable the timeout. default is 60.
  • -D β€” run external debugger specified in debug_command. detective mode πŸ”
  • -p β€” skip plus addressing: everything from + until @. When looking up the userdeny database, plus addressing is always skipped, irrespective of this option. (so that one's not optional, it's just how it is β€” iykyk)

✨ 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 smmap in there, sitting pretty, prefork=0, living its best life πŸ‘‘


✨ FILES ✨

  • /etc/imapd.conf, /etc/cyrus.conf

✨ SEE ALSO ✨

go read those too, they're the supporting cast and they ate πŸ’œ


✨ AUTHOR ✨

The Cyrus Team, Nic Bernstein (Onlight)


1993–2026, The Cyrus Team


ok that's the whole page, nothing skipped, every flag accounted for, no notes πŸ’…βœ¨

and that's a wrap on Cyrus IMAP version 3.12.3, dated Jul 15, 2026 β€” mwah, slay, go verify some mailboxes bestie πŸŽ€πŸ¦‹πŸ’–

πŸ“¦ where this page comes from