The distribution of email is usually done by dedicated email servers that communicate with your machine using special protocols. In this section we show how simple the basic steps are.7
To receive email, we use the Post Office Protocol (POP). Sending can be done with the much older Simple Mail Transfer Protocol (SMTP).
When you type in the following program, replace the emailhost by the name of your local email server. Ask your administrator if the server has a POP service, and then use its name or number in the program below. Now the program is ready to connect to your email server, but it will not succeed in retrieving your mail because it does not yet know your login name or password. Replace them in the program and it shows you the first email the server has in store:
BEGIN { POPService = "/inet/tcp/0/emailhost/pop3" RS = ORS = "\r\n" print "user name" |& POPService POPService |& getline print "pass password" |& POPService POPService |& getline print "retr 1" |& POPService POPService |& getline if ($1 != "+OK") exit print "quit" |& POPService RS = "\r\n\\.\r\n" POPService |& getline print $0 close(POPService) }
We redefine the record separators RS
and ORS
because the
protocol (POP) requires CR-LF to separate lines. After identifying
yourself to the email service, the command ‘retr 1’ instructs the
service to send the first of all your email messages in line. If the service
replies with something other than ‘+OK’, the program exits; maybe there
is no email. Otherwise, the program first announces that it intends to finish
reading email, and then redefines RS
in order to read the entire
email as multiline input in one record. From the POP RFC, we know that the body
of the email always ends with a single line containing a single dot.
The program looks for this using ‘RS = "\r\n\\.\r\n"’.
When it finds this sequence in the mail message, it quits.
You can invoke this program as often as you like; it does not delete the
message it reads, but instead leaves it on the server.
No,
things are not that simple any more. Things were that simple
when email was young in the 20th century. These days, unencrypted plaintext
authentication is usually disallowed on non-secure connections.
Since encryption of network connections is not supported in gawk
,
you should not use gawk
to write such scripts.
We left this section as it is because it demonstrates how
application level protocols work in principle (a command being issued
by the client followed by a reply coming back). Unfortunately, modern
application level protocols are much more flexible in the sequence of
actions. For example, modern POP3 servers may introduce themselves
with an unprompted initial line that arrives before the initial command.
Dealing with such variance is not worth the effort in gawk
.