RFC 821 indicates that the MAIL verb can be given a <forward-path> argument of the form "@ONE,@TWO:JOE@THREE" to indicate intermediate routing hosts (@ONE,@TWO) and the final receiver of the email (JOE@THREE). See 3.6, Relaying: https://www.rfc-editor.org/rfc/rfc821

RFC 2821 dictates that if an SMTP server is sent a forward-path of @ONE,@TWO:JOE@THREE that the email could be directly routed to JOE@THREE - bypassing the intermediate hosts - by performing a DNS MX lookup on THREE. See 3.7, Relaying: https://www.rfc-editor.org/rfc/rfc2821

I believe I understand RFC 2821 correctly: the DNS MX lookup would simply return the IP of the SMTP server for the domain (e.g. @THREE here). Is this right? What I don't understand at all, however, is how email would be routed under RFC 821. This specification was written up before DNS existed, so I presume any host names were specified in a hosts.txt file? How were emails with forward paths routed?

1 Answer 1


So this is a history question? :-)

Before DNS existed, hostnames would be resolved, as you say, with HOSTS.TXT or generally via other means of hostname resolution available locally (/etc/hosts, perhaps NIS, whatever). But that's only if the local mail transfer agent's configuration didn't contain explicit routing instructions already. And considering that most mail at the time was delivered via UUCP, most mail transfer agents would mostly work based on these kinds of explicit instructions (queried through "mailertable" and other key-value database lookups). If you were a well-connected UUCP host you'd have a large routing database that map each destination to a calculated hop-by-hop path through the UUCP network (bang path). If you were a small end site you'd probably just have a default route to an upstream UUCP host.

None of this has anything to do with the source routes you asked about. If you had a destination JOE@THREE then you would look up THREE in the manner I have described (i.e. most likely through your "mailertable" database). If you instead had @ONE,@TWO:JOE@THREE then you would look up ONE.

Today, of course, no MTA on the Internet would respect a source route. If a modern MTA accepts the syntax at all (it might very well not), it will ignore the source route and go straight to looking up THREE. It's considered insecure to trust source routes, and MTAs aren't open relays by default anymore.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .