COURIERUUCP(8)
π NAME π
okay so this is courieruucp(8) β the sample Courier mail filter, bestie π and yeah the page header has S. Varshavchik up in the corner, we'll get to them at the bottom, patience babe β¨
π«Ά SYNOPSIS π«Ά
makeuucpneighbors
that's it. that's the whole thing. she's minimal, she's iconic π
π DESCRIPTION π
so π the Courier mail server can literally send and receive mail over UUCP. But β and this is important β Courier does not implement UUCP itself. Nope. It uses third-party UUCP software, which you have to install on your own, separately, personally, yourself π. The UUCP support comes free from the courieruucp module, and it's compiled and installed by default, so like, slash slay β¨
Courier sends mail via UUCP by issuing a request via uux to execute the rmail command on the remote UUCP node. It hands the message envelope sender to rmail through the -f flag, and then the message envelope recipients go in as the remaining arguments. Message envelope addresses and the E-mail addresses sitting in the message headers both get appropriately rewritten. glow up π
Courier will only send mail via UUCP if it knows about the recipient's UUCP node, no cap. The config file /etc/courier/uucpneighbors is a plain text configuration file. The makeuucpneighbors script compiles that config file into a binary database that Courier reads. Changes to /etc/courier/uucpneighbors do not take effect until makeuucpneighbors is executed and Courier is restarted. two steps, don't skip the second one π
Also plot twist: /etc/courier/uucpneighbors can be a subdirectory instead of a plain text file π¦ and if it is, then the contents of all the text files in that subdirectory get automatically concatenated by the makeuucpneighbors script. automatic. effortless. she did that.
π Contents of /etc/courier/uucpme
This config file must be initialized to contain the UUCP node name that this machine is known by to its neighbors. And if /etc/courier/uucpme doesn't exist? No stress β Courier falls back to using the first node name of the hostname specified by the /etc/courier/me configuration file. fallback queen π
π§ Contents of /etc/courier/uucpneighbors
okay real talk bestie, in addition to creating this config file you also have to configure your UUCP software to appropriately route UUCP mail to the specified nodes β and that is a completely separate task. two different chores. don't @ me π
Blank lines in this file get ignored. Lines that start with the # character are comments and also get ignored. The remaining lines look exactly like this:
node<TAB>flags
where node is a UUCP node, like "apple" or "food!fruits!apple". <TAB> is a single tab character. And flags is zero or more of the single character flags described below. Oh and the tab character can be ommited if there are no flags β yes we're keeping the original's spelling of "ommited", it's part of the lore π
If there's an entry for node in /etc/courier/uucpneighbors then Courier will accept mail for any address of the form "node!user", but not "node!nodule!user". So to accept mail for "node!nodule!user" you must enter both "node" and "node!nodule" β unless you use the F or the G flag, in which case you're covered π«Ά
The flags are as follows:
Fβ π Unrestricted forwarding. This flag accepts any UUCP path that starts with the specified node. Example:
food<TAB>F
This will accept "food!fruits!apple", "food!fruits!banana", "food!drinks!orangejuice", and so on. You can simply list all your immediate UUCP neighbors using the F flag and accept mail to any address that's reachable via any neighbor. one flag, infinite vibes β¨
Gβ π This is a gateway. Identical to theFflag, except thatrmailis executed on the specified node. Normally Courier issues auuxrequest to runrmailon the last node, for example"uux food!fruits!rmail apple". UsingGinstead ofFrunsrmailon the listed node instead, for example"uux food!rmail fruits!apple". same energy, different node πRβ π This is a relay. Used where neitherFnorGis appropriate, but you still want to runrmailon this node. Example:
food!fruits
food<TAB>R
In this example, mail to "food!fruits!apple" is sent by executing "uux food!rmail fruits!apple". If the R flag is not specified, then Courier will request "uux food!fruits!rmail apple". subtle but make it make sense π
πΈ Contents of /etc/courier/module.uucp
This is the standard Courier module configuration file. the usual, with three settings:
MAXDELSβ π Maximum simultaneous UUCP deliveries. Lowkey this setting is a bit misleading. From Courier's viewpoint, a delivery consists only of runninguuxto queue up the message via UUCP. Onceuuxreturns, as far as Courier is concerned, the message is delivered. UUCP is responsible for getting the message the rest of the way. So UUCP deliveries tend to be fairly quick π¬οΈ and it is not necessary to configure a large number of concurrentcourieruucpprocesses, since each one will terminate quickly. Onceuuxterminates, the UUCP software is on the hook for queueing and sending the message. not me doing one (1) job and dipping πMAXHOSTβ β¨ Maximum simultaneous UUCP deliveries to the same UUCP node. Since UUCP deliveries tend to be fairly quick, it's not usually necessary to useMAXHOSTto limit concurrent deliveries to the same UUCP node β soMAXHOSTshould generally be set to the same value asMAXDELS. twin settings, matched outfits π«ΆMAXRCPTβ π Maximum recipients per message. When the same message goes to multiple recipients on the same UUCP node, Courier can ask to runrmailonly once and list all the recipients together.MAXRCPTspecifies the upper limit on the number of recipients batched together. You want to set a limit based on any limitations on the length of command lines that's imposed by the operating system. And sending the same message to different UUCP nodes is always handled as separate deliveries β no batching across nodes, periodt π
π HEADER AND ADDRESS REWRITING π
Courier is certainly capable of relaying mail between the Internet β via ESMTP β and UUCP-land, rewriting headers and addresses appropriately π¦ The address rewriting rules are fixed, but they're expected to work in nearly every case. And if you find yourself in some oddball situation? bestie, you'll just have to invest the time to add custom header rewriting code. no shortcuts, go off π
So say you're example.com and your UUCP node is example β then <user@example.com> gets rewritten as example!user. clean. gorgeous. iconic β¨
Internet mail may be sent via ESMTP to your UUCP neighbor apple!john by sending it to <apple!john@example.com>. When that's forwarded via UUCP, the return address of <someone@domain.com> will be rewritten as example!domain.com!someone. glow up in transit π«
apple!john will get the mail with this return address, which should be repliable back to the sender. Then Courier's UUCP module receives the UUCP address domain.com!someone, and translates it back as <someone@domain.com>. round trip, baby, she came back different but the same π«Ά
π BUGS π
Courier does not support defining multiple UUCP node names in /etc/courier/uucpme. one node name only. that's the rule π
π SEE ALSO π
esmtpd(8)πcouriertcpd(8)β¨courier(8)π
β¨ AUTHOR β¨
Sam Varshavchik
- Author π
π NOTES π
esmtpd(8)β https://www.courier-mta.org/esmtpd.htmlcouriertcpd(8)β https://www.courier-mta.org/couriertcpd.htmlcourier(8)β https://www.courier-mta.org/courier.html
and that's the whole page bestie π this manual is from the Courier Mail Server, dated 01/10/2026, and honestly? reading a manpage has never been this fun. go configure your UUCP neighbors, run makeuucpneighbors, restart Courier, and drink some water π«Άπ
β¨
π¦ where this page comes from
- ubuntu stonking: courier-mta 2.0.6-1 Β· GPL-3+~with-OpenSSL-exception
- Copyright 1998 - 2007 S. Varshavchik. See COPYING for -->
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms