My laptop doesn't have a static IP number. My mail service provider is not a smart host for my laptop. That's why I've been using `msmtp` to send email from the command line.
My `~/.mailrc` used to contain the following:
set sendmail="/usr/bin/msmtp"
I removed this line because I want to send mails by UUCP or NNCP, depending on the domain used. It is only when none of these work that I want to fall back to `msmtp`.
Clearly, I need to add something to my `exim` configuration. When reading the `exim` config, it's important to understand that all the additions come in pairs: a router and a transport.
I use Debian.
I use `mail` to read mail and `ed` to write mail. At least when I'm doing this particular admin hobby project. 😂
As people will use a variety of domain names to send mail to me, I have to decide which ones `mail` should recognize as being "me". That's why `~/.mailrc` contains the following:
alternates alex@sibirocobombus,alex@campaignwiki.org,alex@campaignwiki
To read MIME-encoded mail, I use `munpack -t` which comes with the `mpack` package.
This is the file generated by `sudo dpkg-reconfigure exim4-config`.
Importantly, it specifies that my laptop only delivers local mail. UUCP, NNCP and `msmtp` are all exceptions to that.
This config file also specifies that the `exim` configuration is split into many small files. This makes it easy for me to add new files.
When I make changes, I must always run `sudo update-exim4.conf`.
The config files are concatenated in sort order, which is why the file names start with numbers. All of the routers must sort before `200_exim4-config_primary` because it stops all processing. It does that because this config file says that my laptop only delivers local mail.
dc_eximconfig_configtype='local' dc_other_hostnames='melanobombus' dc_local_interfaces='127.0.0.1 ; ::1' dc_readhost='alexschroeder.ch' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='' CFILEMODE='644' dc_use_split_config='true' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='mail_spool'
The domains that get mail via UUCP are listed in `/etc/exim4/uucp`.
uucp_router: debug_print = "R: uucp_router for $local_part@$domain" driver = accept require_files = +/usr/bin/uux domains = wildlsearch;/etc/exim4/uucp transport = rsmtp
Example `/etc/exim4/uucp`:
dwalin sibirocobombus!dwalin campaignwiki sibirocobombus
That is, `dwalin` can only be reached via `sibirocobombus` and `campaignwiki` is the same as `sibirocobombus`.
`sibirocobombus` is defined in `/etc/uucp/sys`.
Note that mail to the `sibirocobombus` domain itself doesn't get sent via UUCP!
The domains that get mail via NNCP are listed in `/etc/exim4/nncp`.
nncp_router: debug_print = "R: nncp_router for $local_part@$domain" driver=accept require_files = +/usr/bin/nncp-exec domains = wildlsearch;/etc/exim4/nncp transport = nncp
Example `/etc/exim4/nncp`:
sibirocobombus sibirocobombus erebor erebor
Compare this to the previous entry. Mail to the `sibirocobombus` domain is sent via NNCP!
Both `sibirocobombus` and `erebor` must be defined in `/etc/nncp.hjson`.
This relies on the fact that the sender is a local user.
msmtp_router: debug_print = "R: msmtp_router for $local_part@$domain" driver=accept user = ${lookup{$sender_address_local_part}lsearch,ret=key{/etc/passwd}} domains = ! +local_domains require_files = +/usr/bin/msmtp transport = msmtp
rsmtp: debug_print = "T: rsmtp for $pipe_addresses" driver=pipe command = /usr/bin/uux - -r -a${lookup{$sender_address_local_part}lsearch,ret=key{/etc/passwd}} -gC $domain_data!rsmtp use_bsmtp return_fail_output user=uucp batch_max = 100
nncp: debug_print = "T: nncp for $pipe_addresses" driver=pipe user=nncp command = /usr/bin/nncp-exec -noprogress -quiet $domain_data rsmtp use_bsmtp return_fail_output
msmtp: debug_print = "T: msmtp for $pipe_addresses" driver = pipe command = /usr/bin/msmtp --read-recipients --file=/home/${lookup{$sender_address_local_part}lsearch,ret=key{/etc/passwd}}/.config/msmtp/config return_fail_output
Note that this ensures that `msmtp` is run for each user, using their own config files.
My config is stored in `~/.config/msmtp/config` and it must necessarily be non-interactive.
2024-06-30 Connecting the laptop to the server using UUCP
2024-06-29 Sending mail from the laptop to the server via NNCP
2024-06-28 Connecting the laptop to the server via NNCP
​#Administration ​#Mail ​#UUCP ​#NNCP ​#msmtp