LMTPTEST(1)

✨ LMTPTEST(1) ✨

okay bestie, so lmtptest is what we're talking about here β€” it lives in the Cyrus IMAP documentation family, and it's the little sister of lmtptest(1). πŸ’–


πŸŽ€ NAME πŸŽ€

lmtptest β€” Cyrus IMAP documentation

It's an interactive LMTP test program. Periodt.

Real talk: this thing is actually installed as a hard link to imtest(1). So it's the same binary wearing a different outfit. πŸ’…

What does it do? It lets you authenticate and send LMTP commands to the server. That's the whole vibe. πŸ¦‹


🌸 SYNOPSIS 🌸

   imtest [ -t keyfile ] [ -p port ] [ -m mechanism ]
       [ -a userid ] [ -u userid ] [ -k num ] [ -l num ]
       [ -r realm ] [ -f file ] [ -n num ] [ -s ] [ -q ]
       [ -c ] [ -i ] [ -z ] [ -v ] [ -I file ] [ -x file ]
       [ -X file ] [ -w passwd ] [ -o option=value ]
       [ -H client-ip ] hostname

πŸ’œ DESCRIPTION πŸ’œ

So imtest is a utility that lets you authenticate to an IMAP server and then interactively issue commands to it. Once you're authenticated, you can literally just type any IMAP command in and it goes. That easy. 😌

It's got range:

  • it's capable of multiple SASL authentication mechanisms ✨
  • it handles encryption layers transparently β€” you don't even have to think about it 🫢

Who's this for, you ask? People use this utility a lot for testing how an IMAP server is actually operating. And people developing IMAP clients? They find it super useful too. It's giving tool-of-the-people. πŸ’…


πŸ’– OPTIONS πŸ’–

  • -t keyfile, --keyfile=keyfile β€” Turns on TLS. The keyfile holds the TLS public and private keys. If you pass "" you'll negotiate a TLS encryption layer but not use TLS authentication. No key, just vibes.
  • -p port, --port=port β€” The port to connect to. Leave it off and it defaults to imap as defined in /etc/services.
  • -m mechanism, --mechanism=mechanism β€” Forces imtest to use mechanism for authentication. Don't specify one and it picks the strongest authentication mechanism the server supports. And if you say login, it'll use the LOGIN command instead of AUTHENTICATE. 🫑
  • -a userid, --authname=userid β€” The userid used for authentication; defaults to the current user. This is the userid whose password (or credentials) gets presented to the server to be verified. That's the whole job.
  • -u userid, --username=userid β€” The userid used for authorization; defaults to the current user. This is the userid whose identity gets assumed after authentication. πŸ‘‘
NOTE: This is only used with SASL mechanisms that allow proxying (e.g. PLAIN).
  • -k num, --minssf=num β€” Minimum protection layer required.
  • -l num, --maxssf=num β€” Maximum protection layer to use (0=none; 1=integrity; etc). Example time: if you're using the GSSAPI authentication mechanism, specifying 0 forces imtest to skip any layer entirely, and specifying 1 forces it to use the integrity layer. By default, the maximum supported protection layer gets used.
  • -r realm, --realm=realm β€” Specify the realm to use. Some authentication mechanisms are picky and require you to specify a realm. It's giving ✨requirements✨.
  • -f file, --input-filename=file β€” Pipes file into the connection after authentication.
  • -n num, --reauth-attempts=num β€” Number of authentication attempts; default = 1. The client will attempt to do SSL/TLS session reuse and/or fast reauth if it possibly can. Reuse era. ♻️
  • -s, --require-tls β€” Enable SSL over the chosen protocol.
  • -q, --require-compression β€” Enable IMAP COMPRESSion (after authentication). Squish it. πŸ“
  • -c, --do-challenge β€” Enable challenge prompt callbacks. This makes the OTP mechanism ask for the one-time password instead of the secret pass-phrase (the library generates the correct response for you, bestie, don't stress).
  • -i, --no-initial-response β€” Don't send an initial client response for SASL mechanisms, even if the protocol supports it. Just… no. πŸ™ˆ
  • -I file, --pidfile=file β€” Echoes the PID of the running process into file. (This can be useful with -X.) πŸ”₯
  • -v, --verbose β€” Verbose. Prints out more information than usual. Info dump, but make it fashion.
  • -z, --run-stress-test β€” Timing test.
  • -x file, --output-socket=file β€” Open the named socket for the interactive portion.
  • -X file β€” Like -x, only it closes all file descriptors & daemonizes the process. Same energy, more chaos. πŸ’€
  • -w password, --password=password β€” Password to use (if it's not supplied, we will prompt).
  • -o option=value, --sasl-option=option=value β€” Set the SASL option to value.
  • -H client-ip β€” Enable the HAProxy protocol and send the specified client IP address in a v1 header. If the address is "unknown", a v1 header with UNKNOWN protocol gets sent. If the address is "local", a v2 header with LOCAL command gets sent. Pick your fighter. 🧚

🌈 EXAMPLES 🌈

(she's empty, bestie β€” no examples in here, the examples section is just showing up for moral support 🫢)


πŸ‘‘ SEE ALSO πŸ‘‘


⭐ AUTHOR ⭐

The Cyrus Team, Nic Bernstein (Onlight)


1993–2026, The Cyrus Team


and that's the whole page, bestie!! this was version 3.12.3, dated Jul 15, 2026, and it came to you straight from the Cyrus IMAP squad. periodt. πŸŽ€βœ¨πŸ¦‹

πŸ“¦ where this page comes from