Smailq is a mail queue for lightweight SMTP clients (MSAs) like msmtp that do not feature a queue. Smailq basically provides the functionality of sendmail and mailq.

Use case. A typical use case is the following: You have a notebook or a workstation without a full-fledged MTA (e.g., postfix) installed, but something like msmtp, esmtp, or ssmtp, which only forward the mail to an SMTP server. Such lightweight SMTP clients typically do not feature a mail queue.1 In case that your SMTP client cannot connect to the SMTP server, the mail is lost2.

Smailq implements a mail queue and uses MSAs like msmtp to actually deliver mails. It also comes with shell scripts sendmail and mailq that wrap around smailq. Note that typical Unix-type software (e.g., cron, caff, etc.) uses /usr/sbin/sendmail to send mails. Hence, if cron informs the administrator of an error while the notebook is offline, the mail is inserted into the queue instead of being dropped.


$ smailq -h

smailq is a mail queue for lightweight SMTP clients (MSAs) like msmtp that do
not provide a queue. It basically provides the functionality of sendmail and


  /usr/bin/smailq --send [recipient ...] -- [MSA options ...]
  /usr/bin/smailq --list
  /usr/bin/smailq --deliver-all
  /usr/bin/smailq --deliver [ID ...]
  /usr/bin/smailq --delete [ID ...]
  /usr/bin/smailq --help
  /usr/bin/smailq --version


          Remove the mails with given IDs from the queue.

          Attempt to deliver the mails with given IDs only.

          Attempt to deliver all mails in the queue.

  -h, --help
          Print this usage text.

          List all mails in the queue. This is the default

          Read a mail from stdin, insert it into the queue, and attempt to
          deliver all mails in the queue. Options after "--" are passed forward
          to the MSA for this particular mail.

  -V, --version
          Show version info.


  -C, --config=FILE
          Use the given configuration file instead of "$HOME/.smailq.conf".

  -q, --quiet
          Do not print info messages.

  -v, --verbose
          Increase output verbosity.

Configuration file

By default, smailq looks at $HOME/.smailq.conf and /etc/smailq.conf (in that order) for a configuration file, unless the configuration file is explicitly specified by an option. A configuration file with its default values would look like this:

# Optional: The directory where the log file is written to. The special
# value 'syslog' causes smailq to log to syslog.
logdir = ~/.smailq/log/
# Optional: The directory where smailq saves the mail queue data
datadir = ~/.smailq/data/

# Settings for the network (TCP) connectivity test
# Optional: The host to connect to
host =
# Optional: The port to connect to
port = 80
# Optional: The timeout
timeout = 8

# Settings concerning the mail submission agent
# This command is called when smailq attempts to deliver a mail. The
# MSA-options passed to smailq are appended to this line.
cmd = /usr/bin/msmtp


You may obtain a copy of the git repository of smailq by

$ git clone

or you can simply download the latest tarball.


Installation is done by simply calling make install in the source directory as a privileged user.

If you use Gentoo Linux, then you may get a copy of my Gentoo overlay. Besides mail-mta/smail, the overlay also contains a virtual/mta ebuild that takes smailq into account. If some package is depending on an mta, Gentoo portage will enforce that virtual/mta is installed, which will again pull-in a concrete package that provides /usr/sbin/sendmail. This would lead to a conflict when installing smailq by hand. Hence, it is recommended to use the respective ebuilds.

  1. msmtp for instance ships shell scripts that implement a simple queuing mechanism around msmtp. However, /usr/sbin/sendmail is still a symlink to /usr/bin/msmtp and, thereby, Unix-type software like cron would trust that msmtp queues mails that cannot be delivered right now. 

  2. It would be the responsibility of the caller of the SMTP client to queue mails, which is typically not the case.