ZMAILER.CONF(5zm)                                            ZMAILER.CONF(5zm)

       zmailer.conf  -  file format

       These  are generated from inline XMLishly tagged descriptions in gener-
       ated file: SiteConfig.

       ZMailer 'ZENV' Environment Variables:

       A config file for storing various site config parameters

       These are generic material that do not depend upon compilers!

       This is generated with autoconfiguration  process  from
       file, and the configuration parameters.

       Following paragraph appears to be outdated:

       The  standard installation procedure will not overwrite the destination
       ZCONFIG file with the new one.  This file contains one  parameter  that
       is  compiled  in  the  binaries, and is not overridable with this file,
       namely the  ZCONFIG  variable, alias the final  location  of  the  pro-
       cessed result of this SiteConfig file.

              ZCONFIG is the pathname of the configuration file specifying all
              the other host-dependent information needed by ZMailer programs.
              This  file  is created from the SiteConfig file in the distribu-
              tion (the file you are reading right now), and contains variable
              assignments in an sh-compatible format.

              Several  top-level components of ZMailer do have runtime options
              to choose some other path, than compiled-in  default  for  this:

              Some programs (notably 'sendmail(8zm)', and transport agents) do
              check for standard UNIX environment variables for  overrider  of
              this value.)

              MAILBIN  is the directory hierarchy containing all ZMailer bina-

              Configured as: /opt/mail/bin

              MAILSHARE is the directory hierarchy containing  site-wide  con-
              figuration files and databases.

              Configured as: /opt/mail

              MAILVAR is the directory that will contain machine-specific con-
              figuration files and databases.

              Configured as: /opt/mail

              MAILBOX is the directory  containing  all  the  user  mailboxes.
              This  is  defaulted  inside  the mailbox(8zm) program and may be
              overridden here.

              Configured as: /var/spool/mail

              POSTOFFICE is the directory hierarchy used to manipulate message
              files, where runtime activity takes places.

              Configured as: /var/spool/postoffice

              LOGDIR is the directory where log files will appear.

              Configured as: /var/log/mail

              INPUTDIRS  are alternate directories to receive files instead of
              standard "router" and $ROUTERDIRS set.

              When defined, INPUTDIRHASH submits messages immediately into the
              If  no  such "hash subdirs" exist, message submission will fail!
              (The value must be "1" for this to take effect!)

              The INPUTNOTIFY defines, where is a socket at  which  some  pre-
              router  queue  processor listens for PF_UNIX/SOCK_DGRAM messages
              telling paths to new jobs.

              The injection library informs the router  queuing  subsystem  of
              new jobs, and does it with same message as  ROUTERNOTIFY=  uses.

              ROUTEROPTIONS are command line options given to the  router(8zm)
              when started from the zmailer(1zm) shell script.

              The default values are "-dWkn 4"

              Multiple  LOWER  priorities on message routing can be defined by
              creating $POSTOFFICE/<component-of-$ROUTERDIRS> -directories.

              Routers process first   $POSTOFFICE/router/ -directory, and once
              it  is empty, files from subsequent dirs.  See mail(3) mail_pri-

              These can be only under the $POSTOFFICE.

              When defined, ROUTERDIRHASH submits  messages  immediately  into
              the  If  no  such  "hash subdirs" exist, message submission will
              fail!  (The value must be "1" for this to take effect!)

              The ROUTERNOTIFY defines, where is a socket at which the  router
              listens  for  PF_UNIX/SOCK_DGRAM  messages  telling paths to new
              jobs.  The injection library informs the router queuing  subsys-
              tem of new jobs.

              SMTPOPTIONS  are  command  line  options given to the smtpserver
              when started from the zmailer shell script.  The intent is  that
              if you want non-default address verification options they can be
              specified here.  The default value is  "-sve".    This  is  also
              used, when invoking  ``sendmail'' with "-bs" option.

              VALID  ANYMORE  ???   ALLOWSOURCEROUTE  (when present) stops the
              system from ignoring the old RFC821/822 source routes  of  type:
              @a,@b:c@d;   By  "ignoring"  we mean here that system chops away
              "@a,@b:" and uses only:  c@d This is done at all input  portals;
              smtpserver, and at sendmail/rmail.  System behaviour is prone to
              problems in case this is ever enabled!

              SCHEDULEROPTIONS are command line options given to the scheduler
              when  started from the zmailer shell script.  The intent is that
              if you want non-default logging options, the  can  be  specified

              The configured default value is: "-S -H"

              The  SCHEDULERDIRHASH  is magic thing to tell to the router that
              it should move resulting files directly into hash  subdir(s)  of
              the  scheduler subsystem, and not only to the main-level.  Exis-
              tence of this variable also overrides -H option(s) to the sched-
              uler.   Value is the number of -H options.  If these hash subdi-
              rectories don't exist, system failure happens!  Systems with low
              loads  can  do  with  value "1", while systems with large queues
              should definitely use value "2" !

              The SCHEDULERNOTIFY defines, where is  a  socket  at  which  the
              scheduler  listens for PF_UNIX/SOCK_DGRAM messages telling paths
              to new jobs.  The router(s) inform the scheduler of new jobs.

              The   configured   default   is:   /var/spool/postoffice/.sched-

       Following  few ZM ``environment'' variables are used by the router(8zm)
       configuration at your site.

              MAILSERVER is the hostname  of  the  remote  machine  where  the
              postoffice is located.  This value is only needed in an environ-
              ment with distributed file systems, and if  it  exists  will  be
              used  by  the mail queue querying program as the default name of
              the host to query.  It is a way of overriding the algorithm used
              by  mailq  in an NFS environment, or when you are running a dif-
              ferent kind of DFS.  Usually undefined or a hostname.

              PUNTHOST is where mail  that  is  supposed  to  go  to  a  local
              address, but no such address exists, is punted to.

              FORCEPUNT  is  for cases when the local machine under no circum-
              stances is to store any email locally, but send all such to this
              given  address (local host is a member on a "cluster" whose mes-
              sage store is at some other cluster server, and said  node  han-
              dles  "local"  delivery  for  all cluster members... *including*
              running pipes..)

              SMARTHOST is where mail that cannot be  resolved  or  routed  is
              punted to.

              There used to be a variable for this, now a better way is to use
              'routes'   database    at    which    you    put    line:      .
              smtp!     (That    is:    dot,    white-space(s),
              "smtp!" )

              NOBODY is the unprivileged UID value.

              This is absolutely necessary  if  setuid()  will  fail  on  your
              "nobody" account uid (if it is -2, for example).  Make sure that
              whatever value you give here will work  with  setuid().   Values
              between 1 and 29999 will usually work.

              Be  carefull  with  this!   The  system  relies  on it very much

              (On SunOS 4.1.x, the value of "-2" works the best,   on  Solaris
              the  default  for  nobody is 60001!  If your system has "nobody"
              "account", use here the name instead  of  number  --  it  should
              (usually) work)

              -- Use a mapping via /etc/passwd, this is most generic..

              LOGLEVEL  may be set to restrict the log output of the router to
              entries whose tags are found in the specified string value.  The
              currently known tags are:

              address: deferred: file: header_defer: info: recipient:

              Builtin USENET channel uses  NNTPSERVER variable (depending upon
              your inews ..) to send the artickle to..

              Where the sendmail (compability one) shall be located ?

              The configured default is: /usr/sbin/sendmail

              Where is the rmail to be located at ?

              The configured default is: /bin/rmail

              TA_USE_MMAP - value "1" in this variable  mmap()s control-,  and
              message  body files into transport agent process memories.  This
              may, or may not give performance boost.

              This has no effect, if  the  system  does  not  have  functional
              mmap(2) system call.

              The configured default is: 0

              TALOCKMODE=[TFW] -- don't use!

              MAILBOX locking scheme -- no configuration option (yet) See man-
              page of  mailbox(8zm) for details; the  order  of  key-chars  is

              `.'    Dotlock scheme for mailboxes at $MAILBOX/ directory

              `F'    flock() locking of files (and perhaps mailboxes)

              `L'    lockf() locking of files (and perhaps mailboxes)

              `:'    Separates  the  two  parts of the parameter; left part is
                     for the mailbox locking, and right part is for all  other
                     kinds of files.

              We  use  compiled-in defaults at the mailbox program!  Following
              examples are  for   flock(),  and  lockf()  systems  with  their
              respective  defaults.   (  Systems  capable to use both will use
              lockf() )

              The SELFADDRESSES is a comma separated list of IP address liter-
              als  listing  all  of our acceptable IP addresses (Comma because
              IPv6 uses colon for short-hand notation..):

              For usual (IPv4) universe, no addresses are needed listing, how-
              ever  for IPv6 it may be necessary - likewise if you want to use
              cluster-mode, you may want to list all *cluster* addresses  here
              -   nodes   know  only  their  local  ones,  after  all..  (See:

              What kind of DB type we prefer to use ?  We can support several,
              simultaneously, after all; btree/ndbm/gdbm ...

              Configured default value: btree

              What extension that particular DB type wants for open operations

              Configured default value: .db

              What extension that particular DB  type  will  actually  have  ?
              This is used in file age tests.

              Configured default value: .db

              The characterset to be used as a default when turning 8-bit con-
              taining headers to MIME-2 headers -- and  what  to  say  at  the
              default   generated   "Content-Type:  text/plain;  charset=XXXX"
              -header in case the original message was not of MIME, and  still
              had 8-bit chars...

              We  want those nice tabs between the header field name and value
              The task of generating TABs or SPACEs is at TA  *writeheaders().
              Value '0' here yields expansion of possibly existing header res-
              ident line-start TABs.  There is no mechanism to turn line-start
              SPACEs to TABs with any other value stored here.

              Existence  NORECEIVEDFORCLAUSE  ZENV variable forbids the trans-
              port agents from adding '(ORCPT <...> ...)'  or   'for  <...>  '
              clauses to the top-most "Received:" header.

              SYSLOGFLG  tells  which systems use syslog to log things: Set of
              chars which are as follows:

              S      smtpserver and /usr/sbin/sendmail

              R      router

              T      transport agents

              C      scheduler completion of a message

              Per default,  ZMailer uses ``daemon'' userid when  it  wants  to
              operate  in   ``runastrusteduser()''  mode.  Finding that userid
              (or rather its numeric uid) can be a bit difficult,  and  if  it
              fails, apparently uid 65535 will be used.

              Use  ORGDOMAIN  in ZENV if the system can't generate MIME multi-
              part boundary string contained host/domain ids  automagically...

              Depending,  are  you  running  strange  private customer account
              databases hooked (only) into 'mailbox', or not, make  sure  fol-
              lowing  is  non-empty  if  you *are* using private databases, as
              then ZMailer's router won't claim wronly userid to  be  nonexis-
              tent..  These  shunted tests look for HOMEDIRECTORY, which might
              be nonexistent thing at such funny systems...  An  EMPTY  string
              means "this is NORMAL unix":

              (A  "bug" is that this isn't automatically substituted, but non-
              void content gives behaviour that has been around  for  quite  a

              Some  sites  (well,  one  FUNET site), has LISTSERV, this is for
              configuring that subpart of the  scripts:

              If defined, BINDADDR specifies to which local interface to  bind
              smtpserver, smtp transport agent and scheduler Possible specifi-
              cation formats are:


              SNMP-like global system instance monitoring datablock path: This
              _file_  has  absolute path (bo substitutions are allowed), it is
              shared  in  between  all  principal  subsystem   components   in
              mmap(MAP_SHARED, MAP_READ|MAP_WRITE) mode. Counters in this file
              are NEVER reset.  Gauges are managed  as  shadows  of  subsystem
              internal state.

              Define this to "1" if you use (replacement) getpwnam() that han-
              dles username together with domain.  This is a convenient way to
              support  virtual  domains:  users in different domains automati-
              cally have different userids, different  homes  etc.   Actually,
              this  often  can  be  arranged  even within standard /etc/passwd
              model, at least on Linux.


       This document authored and copyright by:
          Matti Aarnio <>

                                  2006-Dec-13                ZMAILER.CONF(5zm)