uucpmail.de

← back to start · Deutsch

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

SymptomFix
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.