Simple email filters you can script

By Cameron Laird and Kathryn Soraiz, Unix Insider |   Add a new comment

Part 1 of this series on simple email automations began with a look at outbound messages. We exhibited simple scripts that can send out items and even attachments.

This time, we will filter incoming items.

Forwarding facilities

It's possible to filter at several points in the transmission of a message. Most consumer email clients have proprietary filtering capabilities. System administrators generally have ways to filter traffic on a sitewide basis. They often use alias and :include facilities for some of the functions we describe below.

We'll concentrate today on the filtering an individual can write when a Unix machine hosts her mail spool. If your "mail server" is a specific Unix machine that you reach through POP3 or IMAP4 authorization, or by a direct log-in to the host, email is usually delivered by sendmail or a sendmail alternative that is sufficiently compatible to respect .forward.

.forward files tell your email service if you want your email forwarded. Suppose you have an account, someuser, hosted on somemachine.com. Email addressed to someuser@somemachine.com goes straight to that machine's mail spool.

Someday, you might decide it's more convenient for you to forward someuser's email to a machine on a personal network -- say, me3@mymachine.elsewhere.com. If you create a file called .forward in someuser's home directory on somemachine.com, and put the single line


     me3@mymachine.elsewhere.com
   

in that file, then all email addressed to someuser@somemachine.com will actually be delivered to me3@mymachine.elsewhere.com. Specific email services generally impose a few minimal security requirements: .forward must be owned by its own user, have its "user read bit" set, and so on.

Many users take advantage of this simple forwarding capability. It's only the beginning of what a .forward can do for you, though. You can forward your email, but also leave copies where they "naturally" belong, with


     \someuser, me3@mymachine.elsewhere.com
   

You can leave a permanent copy of all your traffic with


     \someuser, /usr/users/someuser/backup/allmail
   

That creates the /usr/users/someuser/backup/allmail file as a huge spool that receives a duplicate of every item sent to someuser.

Your own filters

Most exciting of all is the ability to vector traffic through your own filter scripts. Start experimenting by using


     \someuser, "|/usr/users/someuser/programs/mytest"
   

Then create /usr/users/someuser/programs/mytest as the shell script, with contents


     #!/bin/sh

     echo "Email received at `date`." >> /usr/users/someuser/logs/maillog
   

and execution bit set. You'll soon see /usr/users/someuser/logs/maillog accumulating a log of all your email messages.

Several programs have been specifically developed to filter email traffic. We've written before about using procmail to filter out spam and sort incoming traffic into folders. While procmail's excellent performance and security ensure its widespread use, its arcane syntax makes it inconvenient for more general email chores.

    Add a comment

    Post a comment using one of these accounts
    Or join now
    At least 6 characters

    Note: Comment will appear soon after you have activated your account.
    Obscene/spam comments will be removed and accounts suspended.
    The information you submit is subject to our Privacy Policy and Terms of Service.

    ITworld LIVE

    Ask a question

    Ask a Question