XANDIKOS-MILTER(8)

๐Ÿ“ฆ version 0.4.9, in nixpkgs unstable

๐Ÿ’Œ XANDIKOS-MILTER(8) โ€” the milter that reads your calendar mail so you don't have to

okay so bestie, welcome to the System Administration Utilities corner of the manual โ€” this is XANDIKOS-MILTER, section 8, and she is serving inbound iMIP scheduling realness. let's get into it โœจ


๐ŸŒธ NAME ๐ŸŒธ

xandikos-milter โ€” the Postfix/Sendmail milter for inbound iMIP scheduling. like, it's the bouncer at the club door of your mail server, but for calendar invites ๐Ÿ’…


๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

xandikos-milter --lmtp-socket TARGET --listen TARGET [OPTIONS]
xandikos-milter --server-url URL --listen TARGET [OPTIONS]

two whole modes, pick one, no cap ๐Ÿซถ


โœจ DESCRIPTION โœจ

so xandikos-milter runs a libmilter-protocol server that Postfix or Sendmail can hand each inbound message to. every single message. it's giving main character energy at the SMTP door ๐Ÿ’–

if the message carries a valid iMIP REQUEST, REPLY or CANCEL (RFC 6047), the message gets forwarded to a running Xandikos for storage in the schedule inbox. and here's the iconic part: the message is always accepted, so normal mailbox delivery justโ€ฆ proceeds. no drama, no bounced mail, we move ๐Ÿ’€

๐ŸŽ€ Two transports are supported. Exactly one must be configured:

okay this is the important bit โ€” exactly one, not zero, not both. choose wisely bestie ๐Ÿงš

with --lmtp-socket, the milter forwards the raw RFC 5322 message to a running xandikos serve --imip-listen endpoint. this is symmetric with the existing iMIP LMTP listener and is the cleanest setup when the milter and Xandikos run on the same host. same host = same vibe = slay โœจ

๐ŸŒˆ HTTP fallback

with --server-url, the extracted iTIP payload is POSTed to a Xandikos schedule-inbox URL. use this when the milter and Xandikos run on different hosts and you want HTTPS + HTTP Basic credentials between them. long distance relationship but make it secure ๐Ÿ”


โš ๏ธ heads up: messages that carry an Auto-Submitted header other than no (RFC 3834) are skipped, to avoid loops between two Xandikos instances. no infinite loop era, we are NOT doing that ๐Ÿ˜ญ

๐Ÿ’… OPTIONS ๐Ÿ’…

  • --lmtp-socket TARGET โ€” LMTP endpoint of a running xandikos serve --imip-listen. pass unix:/path/to/sock for a Unix domain socket or host:port for TCP. may also be set via XANDIKOS_MILTER_LMTP_SOCKET. ๐Ÿ“
  • --server-url URL โ€” schedule-inbox URL of a running Xandikos server. each iMIP payload is POSTed here as text/calendar. may also be set via XANDIKOS_MILTER_SERVER_URL. ๐Ÿ“ฎ
  • --username USER โ€” username for HTTP Basic authentication against --server-url. iykyk
  • --password-file FILE โ€” file containing the HTTP Basic authentication password. keep it secret, keep it safe ๐Ÿคซ
  • --unix-socket PATH โ€” Unix domain socket path for HTTP requests to the Xandikos server (useful when Xandikos itself listens on a Unix socket). ๐Ÿงฆ
  • --listen TARGET โ€” listen target. pass unix:/path/to/sock for a Unix domain socket, or host:port for TCP. Postfix uses this as smtpd_milters=TARGET. may also be set via XANDIKOS_MILTER_LISTEN. ๐ŸŽฏ
  • --listen-mode MODE โ€” file mode (octal, e.g. 660) for the Unix socket. ignored for TCP listeners.
  • --listen-group GROUP โ€” group ownership for the Unix socket. ignored for TCP listeners.

๐Ÿซถ POSTFIX CONFIGURATION ๐Ÿซถ

add the milter to main.cf so Postfix consults it during SMTP intake. literally just drop these in:

smtpd_milters = unix:/run/xandikos/milter.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

and milter_default_action = accept is the one โ€” it ensures Postfix keeps delivering mail if the milter is unreachable. the show goes on regardless, periodt ๐Ÿ‘‘


๐Ÿ‘€ SEE ALSO ๐Ÿ‘€

  • xandikos(8) โ€” go read that one too bestie, it's the whole point ๐ŸŒŸ

๐Ÿ’– AUTHORS ๐Ÿ’–

Jelmer Vernooij <jelmer@debian.org> โ€” icon, legend, the moment ๐ŸŽ€


and that's the whole page! this lil beauty ships as part of the xandikos project, dated May 2026 โ€” so go forth, configure exactly one transport, and let your calendar invites find their home ๐Ÿ’Œ๐Ÿฆ‹โœจ

๐Ÿ“ฆ where this page comes from