nullmailer-send(8)
β¨ nullmailer-send β the manual page, but make it make sense β¨
okay bestie, this is nullmailer-send, from the System Manager's Manual (section 8, system admin stuff, very demure, very mindful). She's the one who actually sends the mail. Let's go. π
π NAME π
nullmailer-send β Send queued messages. That's it. That's the whole job. She sends the things. π¬
π¦ SYNOPSIS π¦
nullmailer-send
no flags, no arguments, she simply exists and delivers. main character energy fr. β¨
π DESCRIPTION π
so this program is the one responsible for coordinating the transmission of messages that have been queued by nullmailer-queue. She uses a whole variety of protocol modules to deliver the messages from the queue to remote "smart" servers. like, she's the dispatcher, the protocol modules are the drivers. π
when the program starts, the queue is scanned to build a list of messages to send. The queue is rescanned when either:
- the trigger is pulled, or
- after
pausetimeseconds have elapsed after the last failed delivery.
when there are no messages in the queue, nullmailer does no rescanning until the trigger is pulled. periodt. π€
pulling the trigger consists of opening up the trigger named pipe and writing a single byte to it, which causes this program to be awakened (if it's not already processing the queue). This procedure is done by nullmailer-queue to ensure that messages are delivered immediately. no waiting around, no lollygagging. β‘
you can start delivery by hand from the command line like this:
echo 1 > trigger
look at you, pulling the trigger manually. iconic. π«Ά
Delivery of messages consists of reading the list of remote servers and then trying to deliver the messages to these servers as follows. For each remote in the list, the named protocol handler is executed once for each message remaining in the queue. If the protocol handler succeeds, the message is removed from the queue and processing continues with the next message. If the protocol handler reports a permanent failure or the message has been in the queue longer than queuelifetime, the message is moved into the failed queue and a bounce message is generated with nullmailer-dsn. If any messages remain in the queue, processing of the remaining messages continues with the next remote. When all the remotes have been tried, nullmailer-send sleeps for a number of seconds specified by pausetime before retrying sending the contents of the queue.
so: try, try, try, succeed or fail, move on, nap, repeat. π
πΈ CONTROL FILES πΈ
bestie listen. All the control files are reread each time the queue is run. every single time. so don't come for me about caching, there is none. π
helohostβ Sets the environment variable$HELOHOSTwhich is used by the SMTP protocol module to set the parameter given to theHELOcommand. Defaults to the value of themeconfiguration file. so if you don't set it, she just borrows your name fromme. cute.maxpauseβ The maximum time to pause between successive queue runs, in seconds. Defaults to 24 hours (86400). the ceiling, the limit, the final boss of napping. π΄pausetimeβ The minimum time to pause between successive queue runs when there are messages in the queue, in seconds. Defaults to 1 minute (60). Each time this timeout is reached, the timeout is doubled to a maximum ofmaxpause. After new messages are injected, the timeout is reset. If this is set to 0,nullmailer-sendwill exit immediately after going through the queue once (one-shot mode). so like, exponential backoff but make it β¨aestheticβ¨.queuelifetimeβ The maximum time a message is allowed to live in the queue before being considered permanently failed, in seconds. Defaults to 7 days (604800). a whole week to get your life together, message. then it's the failed queue for you. πremotesβ This file contains a list of remote servers to which to send each message. Each line of this file contains a remote host name or address followed by an optional protocol string, separated by white space. The protocol name defaults tosmtp, and may be followed by additional options for that module. See the "PROTOCOL OPTIONS" section for a list of the available options. The options may optionally be prefixed by--but this is not required. The line is parsed according to standard shell quoting rules. For example, to connect to port 2525 on your SMTP smart host, which also requires SMTP authentication, and initiate TLS withSTARTTLS, use:
smarthost.dom smtp port=2525 starttls user=user pass='my pass phrase'
Blank lines and lines starting with a pound (#) are ignored. comments, we love you. π
sendtimeoutβ The time to wait for a remote module listed above to complete sending a message before killing it and trying again, in seconds. Defaults to 1 hour (3600). If this is set to 0,nullmailer-sendwill wait forever for messages to complete sending. forever?? FOREVER?? bestie that is a commitment. π
π₯ PROTOCOL OPTIONS π₯
port=PORTβ Set an alternate port number to connect to on the remote host. For example, SMTP may useport=587for the alternate SMTP "submission" port. not the default port, the β¨alternateβ¨ port.user=USERNAMEβ Set the SMTP authentication user name.pass=PASSWORDβ Set the SMTP authentication password. keep it secret, keep it safe. π€«source=HOSTNAMEβ Set the source address for connections to the remote host. like, where you're calling from. πauth-loginβ Force SMTP "AUTH LOGIN" mode instead of auto-detecting. no vibes-based guessing, we're doing it manually.auth-externalβ Use SMTP "AUTH EXTERNAL" for TLS client certificate authentication.tlsβ Connect using TLS. This will automatically switch the default port to 465. secure, encrypted, glowing. πsslβ Alias for thetlsoption for compatibility. same girl, different name. πstarttlsβ Use theSTARTTLScommand to initiate a TLS session. starting TLS after you say hi. polite. πx509certfile=FILENAMEβ Set the filename for a TLS client certificate to send to the server.x509keyfile=FILENAMEβ Set the filename for the private key for a TLS client certificate. Defaults to the same file name asx509certfile. she'll just assume they match unless you say otherwise.x509cafile=FILENAMEβ Set the TLS certificate authority trust filename. Defaults to/etc/ssl/certs/ca-certificates.crt.x509crlfile=FILENAMEβ Set the TLS certificate revocation list filename. the naughty list, but for certs. πx509fmtderβ Specify that TLS X.509 files above are in DER format instead of PEM. different format, same energy.insecureβ Don't abort a TLS connection if the server certificate fails validation. Use this only if you know the server uses an invalid certificate.
BESTIE. no. only use this if you actually know the server uses an invalid certificate. do not just throw it in because the error message was annoying. π
tls-anon-authβ Use TLS anonymous authentication β replacing certificate authentication. This means no external certificates or passwords are needed to set up the connection. With this option your connection is vulnerable to man-in-the-middle (active or redirection) attacks. However, the data are integrity protected and encrypted from passive eavesdroppers. This option must be used with theinsecureoption β to acknowledge that you know what you are doing.
okay so this one is scary. man-in-the-middle attacks are a real thing, not a vibe. but also: integrity protected, encrypted from passive eavesdroppers. she's telling you the whole truth, up front. and yeah, she makes you add insecure too, because she wants you to sign a little waiver first. π«‘
π FILES π
/var/spool/nullmailer/failedβ The failed message queue. the graveyard. πͺ¦/var/spool/nullmailer/queueβ The outgoing message queue. the waiting room. π/var/spool/nullmailer/triggerβ A trigger file to cause immediate delivery. pull it, she wakes up. β‘/etc/nullmailerβ The configuration directory. where the control files live. π/usr/lib/nullmailerβ The protocol program directory. where the protocol handlers hang out. π―
π SEE ALSO π
nullmailer-smtp(8)nullmailer-qmqp(8)nullmailer-dsn(1)nullmailer-inject(1)nullmailer-queue(8)mailq(1)http://www.postfix.org/TLS_README.htmlon how to setup a certificate-less Postfix SMTP server
like go read those too, they're the rest of the friend group. π«Ά
nullmailer-send(8) β System Manager's Manual β mwah, that's the whole page, thanks for coming to my ted talk, ily, go send some mail πβ¨ππ¦πΈ
π¦ where this page comes from
- debian trixie: nullmailer 1:2.2+10~g7ed88a0-6.1 Β· GPL-2.0-or-later
- ubuntu noble: nullmailer 1:2.2+10~g7ed88a0-2build2 Β· GPL-2.0-or-later
- ubuntu questing: nullmailer 1:2.2+10~g7ed88a0-6.1
- ubuntu resolute: nullmailer 1:2.2+10~g7ed88a0-6.1build1 Β· GPL-2.0-or-later
- ubuntu stonking: nullmailer 1:2.2+10~g7ed88a0-6.1build1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms