During the summer and autumn of 1971, I was part of a small group of programmers who were developing a time-sharing system called TENEX that ran on Digital PDP-10 computers. We were supporting a larger group working on natural language. Earlier, I had worked on the Network Control Protocol (NCP) for TENEX and network programs such as an experimental file transfer program called CPYNET.
I was making improvements to the local inter-user mail program called SNDMSG. Single-computer electronic mail had existed since at least the early 1960's and SNDMSG was an example of that. SNDMSG allowed a user to compose, address, and send a message to other users' mailboxes.
A mailbox was simply a file with a particular name. It's only special property was its protection which only allowed other users to append to the file. That is, they could write more material onto the end of the mailbox, but they couldn't read or overwrite what was already there. The idea occurred to me that CPYNET could append material to a mailbox file just as readily as SNDMSG could. SNDMSG could easily incorporate the code from CPYNET and direct messages through a network connection to remote mailboxes in addition to appending messages to local mailbox files.
The missing piece was that the experimental CPYNET protocol had no provision for appending to a file; it could just send and receive files. Adding the missing piece was a no-brainer -- just a minor addition to the protocol. I don't recall the protocol details, but appending to a file was the same as writing to a file except for the mode in which the file was opened.
Next, the CPYNET code was incorporated into SNDMSG. It remained to provide a way to distinguish local mail from network mail. I chose to append an at sign and the host name to the user's (login) name. I am frequently asked why I chose the at sign, but the at sign just makes sense. The purpose of the at sign (in English) was to indicate a unit price (for example, 10 items @ $1.95). I used the at sign to indicate that the user was "at" some other host rather than being local.
The first message was sent between two machines that were literally side by side. The only physical connection they had (aside from the floor they sat on) was through the ARPANET. I sent a number of test messages to myself from one machine to the other. The test messages were entirely forgettable and I have, therefore, forgotten them. Most likely the first message was QWERTYUIOP or something similar. When I was satisfied that the program seemed to work, I sent a message to the rest of my group explaining how to send messages over the network. The first use of network email announced its own existence.
These first messages were sent in late 1971. The next release of TENEX went out in early 1972 and included the version of SNDMSG with network mail capabilities. The CPYNET protocol was soon replaced with a real file transfer protocol having specific mail handling features. Later, a number of more general mail protocols were developed.