uucpmail.de
Getting started
From zero to working UUCP mail on a Linux box in about 30 minutes. Everything below uses stock Taylor UUCP from your distribution's packages – no special software required.
Prefer to start without Taylor UUCP? The native uucpmail client (Linux/Windows/macOS, open source) bundles UUCP-over-SSH, key generation and OpenPGP in a single binary. This guide covers the classic route with Taylor UUCP and Postfix – both lead to the same access.
0. What you need
# Debian / Ubuntu sudo apt install uucp openssh-client # Fedora sudo dnf install uucp openssh-clients
Plus a beta account: generate an SSH key and send the
public key to
beta@uucpmail.de. You will
receive your node name (e.g. u7a2f4c)
and your address in reply. You may optionally name a
preferred address (the local part before the
@, e.g. alice → alice@uucpmail.de):
lowercase letters, digits and . _ + = -, starting with a
letter or digit; we honour it where available during the beta (role
addresses excluded), otherwise we assign one.
ssh-keygen -t ed25519 -N '' -f ~/.ssh/uucpmail -C uucpmail cat ~/.ssh/uucpmail.pub # include this line
Below, u7a2f4c stands for your node name and
you for the local part of your address – replace both.
1. Configure UUCP
Three small files under /etc/uucp/ (as root):
/etc/uucp/config
nodename u7a2f4c
/etc/uucp/sys
system uucpsrv time any port ssh # SSH already authenticates – do not attempt a login chat: chat "" protocol t commands rmail # mail delivery requires receive-request true (default is false!) receive-request true send-request false command-path /usr/local/bin /usr/bin /bin pubdir /var/spool/uucppublic
/etc/uucp/port
port ssh type pipe reliable true command /usr/bin/ssh -q -x -a -T -i /etc/uucp/ssh/id_ed25519 -o UserKnownHostsFile=/var/spool/uucp/.ssh/known_hosts -o StrictHostKeyChecking=accept-new uucp@uucp.uucpmail.de
Put the key where the uucp user can read it:
sudo mkdir -p /etc/uucp/ssh /var/spool/uucp/.ssh sudo install -m 600 -o uucp ~/.ssh/uucpmail /etc/uucp/ssh/id_ed25519 sudo chown -R uucp:uucp /var/spool/uucp
First connection test (also fetches any waiting mail):
sudo -u uucp /usr/sbin/uucico -S uucpsrv sudo tail /var/log/uucp/Log # "Handshake successful" = all good
2a. Minimal setup: no local mail server
The server delivers incoming mail as an rmail call.
Without an MTA, a three-liner dropping everything into an mbox file
is enough:
sudo tee /usr/local/bin/rmail <<'EOF' #!/bin/sh cat >> /var/spool/uucppublic/inbox.mbox EOF sudo chmod 755 /usr/local/bin/rmail
Read with mutt -f /var/spool/uucppublic/inbox.mbox.
Sending works directly via uux – the first line
(From you@uucpmail.de, no colon!) is the envelope
sender:
printf 'From you@uucpmail.de\nFrom: you@uucpmail.de\nTo: dest@example.com\nSubject: Hello\n\nGreetings via UUCP!\n' \ | uux -r - 'uucpsrv!rmail' 'dest@example.com' sudo -u uucp /usr/sbin/uucico -S uucpsrv
2b. Comfortable setup: Postfix as local MTA (recommended)
With this, mutt, mail and anything that
speaks sendmail just works – Postfix pipes everything
non-local into the UUCP spool. Choose the “Local only” configuration
type during package installation, then:
sudo postconf -e \ myhostname=u7a2f4c.uucpmail.de \ mydomain=uucpmail.de \ myorigin=uucpmail.de \ mydestination="localhost, \$myhostname" \ inet_interfaces=loopback-only \ default_transport=uucp:uucpsrv # add the UUCP transport to master.cf: sudo postconf -M 'uucp/unix=uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - uucpsrv!rmail ($recipient)'
Incoming UUCP mail should be delivered locally by Postfix – use an
rmail wrapper (delivery to localpart@localhost,
otherwise you would create a transport loop):
sudo tee /usr/local/bin/rmail <<'EOF'
#!/bin/sh
rcpt="${1:?rmail: missing recipient}"
exec /usr/sbin/sendmail -i "${rcpt%%@*}@localhost"
EOF
sudo chmod 755 /usr/local/bin/rmail
Aliases for role addresses, then reload:
echo 'postmaster: you@localhost' | sudo tee -a /etc/aliases sudo newaliases && sudo systemctl reload postfix
Done: write mail in mutt (in ~/.muttrc:
set from="you@uucpmail.de", set use_from=yes,
set envelope_from=yes) or with
mail -s "Test" dest@example.com – it is sent and
received on the next poll.
3. Poll regularly
# every 15 minutes – the schedule is yours: echo '*/15 * * * * uucp /usr/sbin/uucico -S uucpsrv' | sudo tee /etc/cron.d/uucpmail
One UUCP session always does both: your queued mail goes out, waiting mail comes in. Once a day is as legitimate as every five minutes – that is the point of UUCP.
Troubleshooting
| Symptom | Fix |
|---|---|
Permission denied (publickey) |
Key registered with the operator? Correct key under /etc/uucp/ssh? |
Handshake failed (You are unknown to me) |
Check the node name in /etc/uucp/config – must match exactly |
Timed out in chat script |
chat "" missing in /etc/uucp/sys |
System already locked |
Another uucico is still running (e.g. from cron) – wait a moment |
| Sending rejected (553) | The envelope sender must be one of your registered @uucpmail.de addresses |
| Debug view | sudo -u uucp /usr/sbin/uucico -S uucpsrv -D -x chat,handshake plus /var/log/uucp/Log and /var/log/uucp/Debug |
Free-tier limits and the beta terms apply. Questions and problems: beta@uucpmail.de – happily via UUCP mail once your setup works.