Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ mhook(1) — BSD/386 1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

MHOOK(1)



MHOOK(1)                      [mh.6]                     MHOOK(1)


NAME
       mhook - MH receive-mail hooks

SYNOPSIS
       $HOME/.maildelivery

     /usr/contrib/mh/lib/rcvdist                 [-form formfile]
            [switches for postproc] address ...  [-help]

     /usr/contrib/mh/lib/rcvpack file [-help]

     /usr/contrib/mh/lib/rcvtty [command ...]  [-help]

DESCRIPTION
       A receive-mail hook is a program that is run whenever  you
       receive  a mail message.  You do NOT invoke the hook your-
       self, rather the hook is invoked on your behalf  by  Send-
       Mail, when you include the line
                | /usr/contrib/mh/lib/slocal -user $USER
       in your .forward file in your home directory.

       The  .maildelivery  file, which is an ordinary ASCII file,
       controls how local delivery is performed.   This  file  is
       read by slocal.

       The format of each line in the .maildelivery file is

            field pattern action result string

       where

          field:
            The name of a field that is to be searched for a pat-
            tern.  This is any field in the headers of  the  mes-
            sage that might be present.  In addition, the follow-
            ing special fields are also defined:
              source: the out-of-band sender information
              addr: the address that was used to  cause  delivery
              to the recipient
              default:  this  matches  only if the message hasn't
              been delivered yet
              *: this always matches

          pattern:
            The sequence of characters to match in the  specified
            field.    Matching   is   case-insensitive   but  not
            RE-based.

          action:
            The action to take to deliver the message.   This  is
            one of

            file or >:
                 Append  the message to the file named by string.



MH                        April 22, 1986                        1




MHOOK(1)                      [mh.6]                     MHOOK(1)


                 The standard maildrop delivery process is  used.
                 If the message can be appended to the file, then
                 this action succeeds.

                 When writing to the file, a new field is added:

                      Delivery-Date: date

                 which indicates the date and time  that  message
                 was appended to the file.

            pipe or |:
                 Pipe  the  message  as the standard input to the
                 command named by string, using the Bourne  shell
                 sh (1) to interpret the string.  Prior to giving
                 the string to the shell, it is expanded with the
                 following built-in variables:
                   $(sender): the return address for the message
                   $(address): the address that was used to cause
                   delivery to the recipient
                   $(size): the size of the message in bytes
                   $(reply-to): either  the  Reply-To:  or  From:
                   field of the message
                   $(info): miscellaneous out-of-band information

                 When a process is invoked, its  environment  is:
                 the user/group id:s are set to recipient's id:s;
                 the working directory is the recipient's  direc-
                 tory;  the  umask  is  0077;  the process has no
                 /dev/tty; the standard input is set to the  mes-
                 sage;  the standard output and diagnostic output
                 are set to /dev/null; all other file-descriptors
                 are closed; the envariables $USER, $HOME, $SHELL
                 are set appropriately, and no other  envariables
                 exist.

                 The process is given a certain amount of time to
                 execute.  If the process does  not  exit  within
                 this  limit, the process will be terminated with
                 extreme prejudice.  The amount of time is calcu-
                 lated as ((size x 60) + 300) seconds, where size
                 is the number of bytes in the message.

                 The exit status of the process is  consulted  in
                 determining  the success of the action.  An exit
                 status of zero means that the action  succeeded.
                 Any  other exit status (or abnormal termination)
                 means that the action failed.

                 In order to  avoid  any  time  limitations,  you
                 might implement a process that began by forking.
                 The parent would return  the  appropriate  value
                 immediately,  and  the  child could continue on,
                 doing whatever it  wanted  for  as  long  as  it



MH                        April 22, 1986                        2




MHOOK(1)                      [mh.6]                     MHOOK(1)


                 wanted.   This approach is somewhat risky if the
                 parent is going to  return  an  exit  status  of
                 zero.   If  the  parent  is  going  to  return a
                 non-zero exit status,  then  this  approach  can
                 lead to quicker delivery into your maildrop.

            qpipe or <caret>:
                 Similar   to  pipe,  but  executes  the  command
                 directly,  after  built-in  variable  expansion,
                 without assistance from the shell.

            destroy:
                 This action always succeeds.

          result:
            Indicates how the action should be performed:

            A:
                 Perform  the  action.   If the action succeeded,
                 then the message is considered delivered.

            R:
                 Perform the action.  Regardless of  the  outcome
                 of  the  action,  the  message is not considered
                 delivered.

            ?:
                 Perform the action only if the message  has  not
                 been  delivered.   If the action succeeded, then
                 the message is considered delivered.

       The file  is  always  read  completely,  so  that  several
       matches can be made and several actions can be taken.  The
       .maildelivery file must be owned either by the user or  by
       root,  and  must  be  writable  only by the owner.  If the
       .maildelivery file can not be found, or does  not  perform
       an  action  which  delivers  the  message,  then  the file
       /usr/contrib/mh/lib/maildelivery is read according to  the
       same  rules.  This file must be owned by the root and must
       be writable only by the root.  If this  file  can  not  be
       found  or  does  not  perform an action which delivers the
       message, then standard delivery to  the  user's  maildrop,
       /var/mail/$USER, is performed.

       Arguments  in  the  .maildelivery  file  are  separated by
       white-space or comma.  Since  double-quotes  are  honored,
       these  characters  may be included in a single argument by
       enclosing the entire argument in  double-quotes.   A  dou-
       ble-quote  can  be  included by preceeding it with a back-
       slash.

       To summarize, here's an example:

            #field   pattern          action  result  string



MH                        April 22, 1986                        3




MHOOK(1)                      [mh.6]                     MHOOK(1)


            # lines starting with a '#' are ignored, as are blank lines
            #
            # file mail with mmdf2 in the To: line into file mmdf2.log
            To       mmdf2            file    A       mmdf2.log
            # Messages from mmdf pipe to the program err-message-archive
            From     mmdf             pipe    A       err-message-archive
            # Anything with the Sender: address uk-mmdf-workers
            # file in mmdf2.log if not filed already
            Sender   uk-mmdf-workers  file    ?       mmdf2.log
            # To: unix - put in file unix-news
            To       Unix             >       A       unix-news
            # if the address is jpo=mmdf - pipe into mmdf-redist
            addr     jpo=mmdf         |       A       mmdf-redist
            # if the address is jpo=ack - send an acknowledgement copy back
            addr     jpo=ack          |       R       resend -r $(reply-to)
            # anything from steve - destroy!
            From     steve            destroy A       -
            # anything not matched yet - put into mailbox
            default  -                >       ?       mailbox
            # always run rcvalert
            *        -                |       R       rcvalert

       Four programs are currently standardly available,  rcvdist
       (redistribute incoming messages to additional recipients),
       rcvpack (save incoming messages in a  packf'd  file),  and
       rcvtty  (notify  user  of  incoming messages).  The fourth
       program, rcvstore (1) is described separately.   They  all
       reside in the /usr/contrib/mh/lib/ directory.

       The  rcvdist  program will resend a copy of the message to
       all of the addresses listed on its command line.  It  uses
       the format string facility described in mh-format (5).

       The  rcvpack  program will append a copy of the message to
       the file listed on its command line.  Its use is obsoleted
       by the .maildelivery.

       The  rcvtty  program executes the named file with the mes-
       sage as its standard input, and gives the resulting output
       to  the  terminal access daemon for display on your termi-
       nal.  If the terminal access daemon is unavailable on your
       system, then rcvtty will write the output to your terminal
       if, and only if, your terminal has world-writable  permis-
       sion.   If  no  file is specified, or is bogus, etc., then
       the rcvtty program will give a one-line  scan  listing  to
       the terminal access daemon.

FILES
       /usr/contrib/mh/lib/mtstailor         tailor file
       $HOME/.maildelivery                   The file controlling local delivery
       /usr/contrib/mh/lib/maildelivery      Rather than the standard file

SEE ALSO
       rcvstore (1)



MH                        April 22, 1986                        4




MHOOK(1)                      [mh.6]                     MHOOK(1)


CONTEXT
       None

HISTORY
       For  compatibility  with  older  versions of MH, if slocal
       can't find the user's .maildelivery file, it will  attempt
       to  execute  an old-style rcvmail hook in the user's $HOME
       directory.  In particular, it will first attempt  to  exe-
       cute

            .mh_receive file maildrop directory user

       failing that it will attempt to execute

            $HOME/bin/rcvmail user file sender

       before giving up and writing to the user's maildrop.

       In  addition,  whenever  a  hook  or  process  is invoked,
       file-descriptor three (3) is set to the message  in  addi-
       tion to the standard input.


BUGS
       Only two return codes are meaningful, others should be.
































MH                        April 22, 1986                        5


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026