Readme.txt
上传用户:woshihumen
上传日期:2013-07-18
资源大小:484k
文件大小:120k
源码类别:

Email服务器

开发平台:

Visual C++

  1. NAME
  2.     XMail - Internet/Intranet mail server.
  3.     [top]
  4. LICENSE
  5.     This program is free software; you can redistribute it and/or modify it
  6.     under the terms of the GNU General Public License as published by the
  7.     Free Software Foundation (<http://www.gnu.org>); either version 2 of the
  8.     License, or (at your option) any later version.
  9.     This program is distributed in the hope that it will be useful, but
  10.     WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  12.     Public License for more details.
  13.     you should have received a copy of the GNU General Public License along
  14.     with this program; if not, write to the Free Software Foundation, Inc.,
  15.     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  16.     [top]
  17. OVERVIEW
  18.     XMail is an Internet and Intranet mail server featuring an SMTP server,
  19.     POP3 server, finger server, multiple domains, no need for users to have
  20.     a real system account, SMTP relay checking, RBL/RSS/ORBS/DUL and custom
  21.     (IP based and address based) spam protection, SMTP authentication (PLAIN
  22.     LOGIN CRAM-MD5 POP3-before-SMTP and custom), a POP3 account synchronizer
  23.     with external POP3 accounts, account aliases, domain aliases, custom
  24.     mail processing, direct mail files delivery, custom mail filters,
  25.     mailing lists, remote administration, custom mail exchangers, logging,
  26.     and multi-platform code.
  27.     XMail sources compile under GNU/Linux, FreeBSD, OpenBSD, NetBSD, OSX,
  28.     Solaris and NT/2K.
  29.     This server born due to the need of having a free and stable Mail Server
  30.     to be used inside my old company, which used a Windows Network. I don't
  31.     like to reinvent the wheel but the need of some special features drive
  32.     me to start a new project. Probably if I could use a Linux server on my
  33.     net, I would be able to satisfy my needs without write code, but this is
  34.     not my case. It should be also portable to other OSs, like Linux and
  35.     other Unixes.
  36.     Another reason that drove me to write XMail is the presence of the same
  37.     steps in setting up a typical mail server, ie:
  38.      sendmail + qpopper + fetchmail
  39.     if one needs SMTP, POP3 and external synchronization, or:
  40.      sendmail + qpopper
  41.     for only SMTP and POP3 (I've quoted sendmail, qpopper and fetchmail, but
  42.     there are many other packages you can use to reach these needs). With
  43.     XMail you get an all-in-one package with a central administration that
  44.     can simplify the above common steps.
  45.     The first code of XMail Server is started on Windows NT and Linux, and
  46.     now, the FreeBSD and Solaris version ready. The compilers supported are
  47.     gcc for Linux, FreeBSD, OpenBSD and Solaris and M$ Visual C++ for NT/2K.
  48.     [top]
  49. VERSION
  50.   current
  51.     1.22
  52.   release type
  53.     Gnu Public License <http://www.gnu.org>
  54.   release date
  55.     Oct 12, 2005
  56.   project by
  57.     Davide Libenzi <davidel@xmailserver.org> <http://www.xmailserver.org/>
  58.   credits
  59.     Michael Hartle <mhartle@hartle-klug.com>
  60.     Shawn Anderson <sanderson@eye-catcher.com>
  61.     Dick van der Kaaden <dick@netrex.nl>
  62.     Beau E, Cox <beau@beaucox.com>
  63.   warning
  64.      ************************************************************
  65.      *                     <<WARNING>>                          *
  66.      *  If you're upgrading an existing version of XMail it's   *
  67.      *  strongly suggested that you read all the ChangeLog.txt  *
  68.      *  notes that range from existing version to the new one.  *
  69.      ************************************************************
  70.     [top]
  71. DOCUMENTATION CONVENTIONS
  72.     This document contains various examples of entries you must make to the
  73.     XMail configuration tables. These examples are written in a
  74.      mono-spaced font like this.
  75.     The prototype statement is shown with explicit '[TAB]' and '[NEWLINE]'
  76.     characters:
  77.      "aliasdomain"[TAB]"realdomain"[NEWLINE]
  78.     while examples omit these characters:
  79.      "simpson.org"   "simpson.com"
  80.      "*.homer.net"   "homer.net"
  81.     'YOU MUST ALWAYS ENTER THE DATA EXACTLY AS SHOWN IN THE PROTOTYPE.'
  82.     When a protype or example statement is too long to easily be shown on
  83.     the screen or printed, the line is split into multiple lines by showing
  84.     '=>' at the end of continued lines and indenting the continuation
  85.     line(s):
  86.      "domain"[TAB]"account"[TAB]"enc-passwd"[TAB]"account-id"[TAB]"account-dir"[TAB]=>
  87.        "account-type"[NEWLINE]
  88.     'DO NOT ENTER THE => CHARACTERS. ENTER THE ENTIRE ENTRY AS ONE LINE.'
  89.     [top]
  90. FEATURES
  91.     *   ESMTP server
  92.     *   POP3 server
  93.     *   Finger server
  94.     *   Multiple domains
  95.     *   Users don't need a real system account
  96.     *   SMTP relay checking
  97.     *   SMTP RBL maps check (rbl.maps.vix.com)
  98.     *   SMTP RSS maps check (relays.mail-abuse.org)
  99.     *   SMTP ORBS relay check (relays.orbs.org)
  100.     *   SMTP DUL map check (dialups.mail-abuse.org)
  101.     *   SMTP protection over spammers (IP based and address based)
  102.     *   SMTP authentication (PLAIN LOGIN CRAM-MD5 POP3/SMTP and custom)
  103.     *   SMTP ETRN command support
  104.     *   POP3 account synchronizer with external POP3 accounts
  105.     *   Account aliasing
  106.     *   Domain aliasing
  107.     *   Mailing lists
  108.     *   Custom mail processing
  109.     *   Locally generated mail files delivery
  110.     *   Remote administration
  111.     *   Custom mail exchangers
  112.     *   Logging
  113.     *   Multi platform
  114.     *   Domain message filters
  115.     *   Custom (external) POP3 authentication
  116.     [top]
  117. PORTING STATUS
  118.     Right now the Linux and NT ports are stable, while the Solaris, FreeBSD
  119.     and OpenBSD ones have not been tested as well as the previous OSs.
  120.     [top]
  121. REQUIREMENTS
  122.     *   Any version of Linux that has glibc.
  123.     *   Windows NT with ws2_32.dll correctly installed.
  124.     *   A working DNS and gateway to the Internet (if you plan to use it).
  125.     *   To build from source for Linux you need any version of gcc and glibc
  126.         installed.
  127.     *   To build from source for Windows you need MS Visual C++ (project
  128.         included).
  129.     *   -or- any other working compiler that provides support for the Win32
  130.         SDK.
  131.     [top]
  132. OBTAINING THE SOURCE
  133.     Always get the latest sources at the XMail home page
  134.     <http://www.xmailserver.org/> because otherwise you may be using an old
  135.     version.
  136.     Use the correct distribution for your system and don't mix Unix files
  137.     with Windows ones because this is one of the most common cause of XMail
  138.     bad behavior.
  139.     When you unzip (or untar) the package you've to check that the MailRoot
  140.     directory contained inside the package itself is complete (look at the
  141.     directory tree listed below) because some unzippers don't restore empty
  142.     directories.
  143.     [top]
  144. BUILD
  145.     For Windows, Visual C++ project files are supplied, while for *nixes,
  146.     the following options are given:
  147.     [Linux]
  148.       # make -f Makefile.lnx
  149.     [FreeBSD]
  150.       # setenv OSTYPE FreeBSD
  151.       # gmake -f Makefile.bsd
  152.     or (depending on the shell):
  153.       # OSTYPE=FreeBSD gmake -f Makefile.bsd
  154.     [OpenBSD]
  155.       # setenv OSTYPE OpenBSD
  156.       # gmake -f Makefile.bsd
  157.     or (depending on the shell):
  158.       # OSTYPE=OpenBSD gmake -f Makefile.bsd
  159.     [NetBSD]
  160.       # setenv OSTYPE NetBSD
  161.       # gmake -f Makefile.bsd
  162.     or (depending on the shell):
  163.       # OSTYPE=NetBSD gmake -f Makefile.bsd
  164.     [OSX]
  165.       # OSTYPE=Darwin make -f Makefile.bsd
  166.     or (depending on the shell):
  167.       # setenv OSTYPE Darwin
  168.       # make -f Makefile.bsd
  169.     [Solaris]
  170.       # make -f Makefile.sso
  171.     Under Linux an init.d startup script is supplied (xmail) to allow you to
  172.     run XMail as a standard rc? daemon. You must put it into /etc/init.d (it
  173.     depends on which distro you're using) directory and then create K??xmail
  174.     - S??xmail links into the proper directories.
  175.     Under Windows NT/2000/XP the XMail's executable is a Win32 service by
  176.     default and if you want to have it built like a standard executable
  177.     you've to comment the statement:
  178.      "#define SERVICE" in MainWin.cpp
  179.     When it's built as a service (default) you can run:
  180.      XMail --install
  181.     to install XMail as a manual startup service or:
  182.      XMail --install-auto
  183.     to install XMail as an automatic startup service.
  184.     If you run '--install' and you want XMail to run at NT boot, you must go
  185.     in ControlPanel->Services and edit the startup options of XMail. Once
  186.     you have the service version of XMail you can run it in a 'normal' way
  187.     by executing:
  188.      XMail --debug [options]
  189.     [top]
  190. CONFIGURATION
  191.   Linux/Solaris/FreeBSD/OpenBSD
  192.     1.  Build XMail.
  193.     2.  Log as root.
  194.     3.  Copy the supplied MailRoot directory where you want it to reside
  195.         (normally /var).
  196.     4.  Do a # chmod 700 /var/MailRoot to setup MailRoot directory access
  197.         rights.
  198.     5.  Strip XMail executables if you want to reduce their sizes (strip
  199.         filename).
  200.     6.  Copy XMail executables to /var/MailRoot/bin.
  201.     7.  If you have 'inetd' installed, comment out the lines of
  202.         '/etc/inetd.conf' that involve SMTP, POP3, and Finger. Restart
  203.         'inetd' (kill -HUP ...).
  204.     8.  Since XMail use syslog to log messages, enable syslogd if it's not
  205.         running.
  206.     9.  Setup the 'SERVER.TAB' configuration option (after reading the rest
  207.         of this document well).
  208.     10. Add your users and domains (after reading the rest of this document
  209.         well).
  210.     11. Change or comment out (#) the example account in 'ctrlaccounts.tab'
  211.         by using non-trivial username and password.
  212.     12. Copy the xmail startup script to your init.d directory (it's
  213.         position depends on your distro). If you've setup XMail to work in a
  214.         subdirectory other than '/var/MailRoot' you must edit xmail startup
  215.         script to customize its boot.
  216.     13. Use the 'sysv_inst.sh' shell script (from root user) to create SysV
  217.         boot script - unless your distro has other tools to do this.
  218.     14. To start XMail without reboot you can run (from root):
  219.         /etc/rc.d/init.d/xmail start otherwise reboot your machine.
  220.     15. Setup the file 'smtprelay.tab' if you want to extend mail relaying
  221.         to IPs out of the internet's private IP blocks (or you want to deny
  222.         even those - that comes enabled by default with XMail).
  223.     [configuration] [top]
  224.   NT/Win2K
  225.     1.  Build XMail.
  226.     2.  Copy the supplied MailRoot directory where you want it to reside
  227.         (normally 'C:MailRoot').
  228.     3.  Setup the MailRoot directory (and subdirectories and file)
  229.         permissions to allow access only to System and Administrators. Doing
  230.         this you can run XMail as a console startup only if you're
  231.         Administrator (service startup as System).
  232.     4.  Copy XMail executables to 'C:MailRootbin'.
  233.     5.  With 'regedit', create 'GNU' key inside
  234.         'HKEY_LOCAL_MACHINESOFTWARE' and then 'XMail' key inside
  235.         'HKEY_LOCAL_MACHINESOFTWAREGNU'.
  236.     6.  Create a new string value named 'MAIL_ROOT' inside
  237.         'HKEY_LOCAL_MACHINESOFTWAREGNUXMail' with value 'C:MailRoot'.
  238.     7.  Optionally create a new string value named 'MAIL_CMD_LINE' inside
  239.         'HKEY_LOCAL_MACHINESOFTWAREGNUXMail' to store your command line
  240.         options (read well the rest of this document).
  241.     8.  Open an NT console (command prompt).
  242.     9.  Go inside 'C:MailRootbin' and run: XMail --install for a manual
  243.         startup, or: XMail --install-auto for an automatic startup.
  244.     10. If you have other services that give the same functionality of
  245.         XMail, that is SMTP, POP3, or Finger servers, you must stop these
  246.         services.
  247.     11. Setup the 'SERVER.TAB' configuration option after reading the rest
  248.         of this document well.
  249.     12. Add your users and domains (after reading to the rest of this
  250.         document well).
  251.     13. Setup file permissions of the 'C:MailRoot' directory to grant
  252.         access only to 'SYSTEM' and 'Domain Admins'.
  253.     14. Change or comment out (#) the example account in ctrlaccounts.tab by
  254.         using a non-trivial username and password.
  255.     15. To start XMail without reboot you can go to: ControlPanel ->
  256.         Services -> XMail server and start the service, otherwise reboot
  257.         your machine.
  258.     16. Setup the file 'smtprelay.tab' if you want to extend mail relaying
  259.         to IPs out of the internet's private IP blocks (or you want to deny
  260.         even those - that comes enabled by default with XMail).
  261.     [configuration] [top]
  262.   Environment variables
  263.     [MAIL_ROOT]
  264.         If you want to start XMail as a simple test you must setup an
  265.         environment variable MAIL_ROOT that point to the XMail Server root
  266.         directory.
  267.         Linux/etc.:
  268.          export MAIL_ROOT=/var/XMailRoot
  269.         Windows:
  270.          set MAIL_ROOT=C:MailRoot
  271.     [MAIL_CMD_LINE]
  272.         Let the user to specify extra command line parameters (they will be
  273.         appended to the ones specified in the command line).
  274.     [XMAIL_PID_DIR]
  275.         Let the user to specify the PID directory (Unix only ports). The
  276.         specified directory must NOT have the final slash (/) appended to
  277.         the path.
  278.     [configuration] [top]
  279.   MailRoot structure
  280.     Mail root directory contain these files:
  281.       aliases.tab <file>
  282.       aliasdomain.tab <file>
  283.       domains.tab <file>
  284.       dnsroots    <file>
  285.       extaliases.tab  <file>
  286.       mailusers.tab   <file>
  287.       message.id  <file>
  288.       pop3links.tab   <file>
  289.       server.tab  <file>
  290.       smtpgw.tab  <file>
  291.       smtpfwd.tab <file>
  292.       smtprelay.tab   <file>
  293.       smtpauth.tab    <file>
  294.       smtpextauth.tab <file>
  295.       userdef.tab <file>
  296.       ctrlaccounts.tab    <file>
  297.       spammers.tab    <file>
  298.       spam-address.tab    <file>
  299.       pop3.ipmap.tab  <file>
  300.       smtp.ipmap.tab  <file>
  301.       ctrl.ipmap.tab  <file>
  302.       finger.ipmap.tab    <file>
  303.       filters.in.tab  <file>
  304.       filters.out.tab <file>
  305.       filters.pre-data.tab <file>
  306.       filters.post-data.tab <file>
  307.       smtp.ipprop.tab <file>
  308.     and these directories:
  309.       bin     <dir>
  310.       cmdaliases  <dir>
  311.       tabindex    <dir>
  312.       dnscache    <dir>
  313.         mx  <dir>
  314.         ns  <dir>
  315.       custdomains <dir>
  316.       filters     <dir>
  317.       logs        <dir>
  318.       pop3locks   <dir>
  319.       pop3linklocks   <dir>
  320.       pop3links   <dir>
  321.       spool       <dir>
  322.         local       <dir>
  323.         temp        <dir>
  324.         0           <dir>
  325.           0           <dir>
  326.             mess        <dir>
  327.             rsnd        <dir>
  328.             info        <dir>
  329.             temp        <dir>
  330.             slog        <dir>
  331.             lock        <dir>
  332.             cust        <dir>
  333.             froz        <dir>
  334.           ...
  335.         ...
  336.       userauth    <dir>
  337.         pop3    <dir>
  338.         smtp    <dir>
  339.       domains     <dir>
  340.     and for each domain DOMAIN handled a directory (inside domains):
  341.         DOMAIN      <dir>
  342.         userdef.tab <file>
  343.         mailproc.tab    <file>  [ optional ]
  344.     inside of which reside, for each account ACCOUNT:
  345.           ACCOUNT         <dir>
  346.             user.tab    <file>
  347.             mlusers.tab <file>  [ mailing list case ]
  348.             mailproc.tab    <file>  [ optional ]
  349.             pop3.ipmap.tab  <file>  [ optional ]
  350.     and
  351.             mailbox     <dir>
  352.     for mailbox structure, while:
  353.             Maildir     <dir>
  354.               tmp <dir>
  355.               new <dir>
  356.               cur <dir>
  357.     for Maildir structure.
  358.     [configuration] [top]
  359.   Configuration tables
  360.     TAB ('something.tab') files are text files (in the sense meant by the OS
  361.     in use: <CR><LF> for NT and <CR> for Linux) with this format:
  362.      "value1"[TAB]"value2"[TAB]...[NEWLINE]
  363.     The following sections explain each file's structure and use.
  364.     "ALIASES.TAB"
  365.     "ALIASDOMAIN.TAB"
  366.     "DOMAINS.TAB"
  367.     "DNSROOTS"
  368.     "EXTALIASES.TAB"
  369.     "MAILUSERS.TAB"
  370.     "MESSAGE.ID"
  371.     "POP3LINKS.TAB"
  372.     "SERVER.TAB"
  373.     "SMTPGW.TAB"
  374.     "SMTPFWD.TAB"
  375.     "SMTPRELAY.TAB"
  376.     "SMTPAUTH.TAB"
  377.     "SMTPEXTAUTH.TAB"
  378.     "USERDEF.TAB"
  379.     "CTRLACCOUNTS.TAB"
  380.     "SPAMMERS.TAB"
  381.     "SPAM-ADDRESS.TAB"
  382.     "POP3.IPMAP.TAB"
  383.     "SMTP.IPMAP.TAB"
  384.     "CTRL.IPMAP.TAB"
  385.     "FINGER.IPMAP.TAB"
  386.     "USER.TAB"
  387.     "MLUSERS.TAB"
  388.     "MAILPROC.TAB"
  389.     "SMTP.IPPROP.TAB"
  390.     "FILTERS.IN.TAB"
  391.     "FILTERS.OUT.TAB"
  392.     "FILTERS.PRE-DATA.TAB"
  393.     "FILTERS.POST-DATA.TAB"
  394.     [configuration] [top]
  395.    ALIASES.TAB
  396.      "domain"[TAB]"alias"[TAB]"realaccount"[NEWLINE]
  397.     Example:
  398.      "home.bogus"    "davidel"   "dlibenzi"
  399.     define 'davidel' as alias for 'dlibenzi' in 'home.bogus' domain.
  400.      "home.bogus"    "foo*bog"   "homer@internal-domain.org"
  401.     define an alias for all users whose name starts with 'foo' and ends with
  402.     'bog' that point to the locally handled account
  403.     'homer@internal-domain.org'.
  404.      "home.bogus"    "??trips"   "travels"
  405.     define an alias for all users whose names start with any two chars and
  406.     end with 'trips'. You can have widcard even in the domain field, as:
  407.      "*" "postmaster"    "postmaster@domain.net"
  408.     You 'CANNOT' edit this file while XMail is running because it is an
  409.     indexed file.
  410.     [table index] [configuration] [top]
  411.    ALIASDOMAIN.TAB
  412.      "aliasdomain"[TAB]"realdomain"[NEWLINE]
  413.     where 'aliasdomain' can use wildcards:
  414.      "simpson.org"   "simpson.com"
  415.      "*.homer.net"   "homer.net"
  416.     The first line defines 'simpson.org' as an alias of 'simpson.com' while
  417.     the second remaps all subdomains of 'homer.net' to 'homer.net'.
  418.     You 'CANNOT' edit this file while XMail is running because it is an
  419.     indexed file.
  420.     [table index] [configuration] [top]
  421.    DOMAINS.TAB
  422.      "domain"[NEWLINE]
  423.     defines domains handled by the server.
  424.     [table index] [configuration] [top]
  425.    DNSROOTS
  426.      host
  427.     This is a file that lists a root name server in each line (this is not a
  428.     TAB file). This can be created from a query via nslookup for type=ns and
  429.     host = '.'.
  430.     [table index] [configuration] [top]
  431.    EXTALIASES.TAB
  432.      "external-domain"[TAB]"external-account"[TAB]"local-domain"[TAB]"local-user"[NEWLINE]
  433.     Example:
  434.      "xmailserver.org"   "dlibenzi"  "home.bogus"    "dlibenzi"
  435.     This file is used in configurations in which the server does not run
  436.     directly on Internet (like my case) but acts as internal mail exchanger
  437.     and external mail gateway. This file defines 'Return-Path: <...>'
  438.     mapping for internal mail delivery. If you are using a Mail client like
  439.     Outlook, Eudora, KMail ... you have to configure your email address with
  440.     the external account say 'dlibenzi@xmailserver.org'. When you post an
  441.     internal message to 'foo@home.bogus' the mail client puts your external
  442.     email address ('dlibenzi@xmailserver.org') in the 'MAIL FROM: <...>'
  443.     SMTP request. Now if the user 'foo' replies to this message, it replies
  444.     to 'dlibenzi@xmailserver.org', and then is sent to the external mail
  445.     server. With the entry above in 'EXTALIASES.TAB' file the 'Return-Path:
  446.     <...>' field is filled with 'dlibenzi@home.bogus' that leads to an
  447.     internal mail reply.
  448.     You 'CANNOT' edit this file while XMail is running because it is an
  449.     indexed file.
  450.     [table index] [configuration] [top]
  451.    MAILUSERS.TAB
  452.      "domain"[TAB]"account"[TAB]"enc-passwd"[TAB]"account-id"[TAB]"account-dir"[TAB]=>
  453.        "account-type"[NEWLINE]
  454.     (remember, enter as one line.) Example:
  455.      "home.bogus"    "dlibenzi"  "XYZ..."    1   "dlibenzi"  "U"
  456.     defines an account 'dlibenzi' in domain 'home.bogus' with the encrypted
  457.     password 'XYZ...', user id '1' and mail directory 'dlibenzi' inside
  458.     '$MAIL_ROOT/domains/home.bogus'. To allow multiple domain handling the
  459.     POP3 client must use the entire email address for the POP3 user account;
  460.     for example. if a user has email user@domain it must supply:
  461.      user@domain
  462.     as POP3 account login.
  463.     The directory 'account-dir' 'must' case match with the field
  464.     'account-dir' of this file. Note that user id 'must' be unique for all
  465.     users (duplicate user ids are not allowed). The user id 0 is reserved by
  466.     XMail and cannot be used.
  467.     The last field 'U' is the account type:
  468.      "U" = User account
  469.      "M" = Mailing list account
  470.     The encrypted password is generated by 'XMCrypt' whose source is
  471.     'XMCrypt.cpp'. Even if external authentication is used (see "External
  472.     Authentication") this file 'must' contain an entry for each user handled
  473.     by XMail.
  474.     You 'CANNOT' edit this file while XMail is running because it is an
  475.     indexed file.
  476.     [table index] [configuration] [top]
  477.    MESSAGE.ID
  478.     A file storing a sequential message number. Set it at 1 when you install
  479.     the server and leave it be handled by the software.
  480.     [table index] [configuration] [top]
  481.    POP3LINKS.TAB
  482.      "local-domain"[TAB]"local-account"[TAB]"external-domain"[TAB]=>
  483.        "external-account"[TAB]"external-crypted-password"[TAB]"authtype"[NEWLINE]
  484.     (remember, enter as one line) where:
  485.     'authtype' = authentication method ('CLR' = USER/PASS auth, 'APOP' =
  486.     APOP auth).
  487.     Examples;
  488.      "home.bogus"    "dlibenzi"  "xmailserver.org"   "dlibenzi" "XYZ..."=>
  489.        "APOP"
  490.     This entry is used to synchronize the external account
  491.     'dlibenzi@xmailserver.org' with encrypted password 'XYZ...' with the
  492.     local account 'dlibenzi@home.bogus' using 'APOP' authentication. It
  493.     connect with the 'xmailserver.org' POP3 server and download all messages
  494.     for 'dlibenzi@xmailserver.org' into the local account
  495.     'dlibenzi@home.bogus'. The remote server must support 'APOP'
  496.     authentication to specify 'APOP' as authtype. Even if using APOP
  497.     authentication is more secure because clear usernames and password does
  498.     not travel on the network, if you're not sure about it, specify 'CLR' as
  499.     authtype. For non local POP3 sync you've to specify a line like this one
  500.     (@ as the first domain char):
  501.      "@home.bogus.com"   "dlibenzi"  "xmailserver.org:110"   "dlibenzi" "XYZ..."=>
  502.        "CLR"
  503.     This entry is used to synchronize the external account
  504.     'dlibenzi@xmailserver.org' with encrypted password 'XYZ...' with the
  505.     account 'dlibenzi@home.bogus.com' using 'CLR' authentication. The
  506.     message is pushed into the spool having as destination
  507.     dlibenzi@home.bogus.com , so you've to have some kind of processing for
  508.     that user or domain in your XMail configuration (for example custom
  509.     domain processing). you can also have the option to setup a line like
  510.     this one:
  511.      "?home.bogus.com,felins.net,pets.org"   "dlibenzi"  "xmailserver.org"=>
  512.        "dlibenzi"  "XYZ..."    "CLR"
  513.     and messages are dropped inside the spool by following these rules:
  514.     1.  XMail parse the message headers by searching for To:, Cc: and Bcc:
  515.         addresses.
  516.     2.  Each address's domain is compared with the list of valid domains
  517.         (felins.net, pets.org).
  518.     3.  For each valid address the username part is taken and joined with
  519.         the '@' and the masquerade domain name (the name following '?').
  520.     4.  The message is spooled with the above built destination address.
  521.     Obviously the masquerade domain ('home.bogus.com') MUST be handled by
  522.     the server or MUST be a valid external mail domain. So if a message
  523.     having as To: address graycat@felins.net is fetched by the previous line
  524.     a message is pushed into the spool with address graycat@home.bogus.com.
  525.     Particular attention is to be taken about at not creating mail loops.
  526.     Another option is:
  527.      "&.local,felins.net,pets.org"   "dlibenzi"  "xmailserver.org" "dlibenzi"=>
  528.        "XYZ..."    "CLR"
  529.     where a fetched message whose To: address is graycat@felins.net is
  530.     replaced with graycat@felins.net.local. You can avoid the matching
  531.     domain list after the masquerading domain but, in that case, you may
  532.     have bad destination addresses inside the spool. The list MUST be comma
  533.     separated WITHOUT spaces. XMail starts PSYNC session with a delay that
  534.     you can specify with the -Yi nsec command line parameter (default 120).
  535.     XMail also checks for the presence (inside MAIL_ROOT) of a file named
  536.     '.psync-trigger' and, when this file is found, a PSYNC session starts
  537.     and that file is removed.
  538.     [table index] [configuration] [top]
  539.    SERVER.TAB
  540.      "varname"[TAB]"varvalue"[NEWLINE]
  541.     This file contains server configuration variables. See "SERVER.TAB
  542.     variables" below for details.
  543.     [table index] [configuration] [top]
  544.    SMTPGW.TAB
  545.      "domain"[TAB]"smtp-gateway"[NEWLINE]
  546.     Examples:
  547.      "foo.example.com"   "@xmailserver.org"
  548.     sends all mail for 'foo.example.com' through the 'xmailserver.org' SMTP
  549.     server, while:
  550.      "*.dummy.net"   "@relay.xmailserver.org"
  551.     sends all mail for "*'*.dummy.net' through 'relay.xmailserver.org'.
  552.     The 'smtp-gateway' can be a complex routing also, for example:
  553.      "*.dummy.net"   "@relay.xmailserver.org,@mail.nowhere.org"
  554.     sends all mail for "*'*.dummy.net' through
  555.     '@relay.xmailserver.org,@mail.nowhere.org', in this way:
  556.     relay.xmailserver.org --> mail.nowhere.org --> @DESTINATION.
  557.     [table index] [configuration] [top]
  558.    SMTPFWD.TAB
  559.      "domain"[TAB]"smtp-mx-list"[NEWLINE]
  560.     Examples:
  561.      "foo.example.com"   "mail.xmailserver.org:7001,192.168.1.1:6123,mx.xmailserver.org"
  562.     sends all mail for 'foo.example.com' using the provided list of mail
  563.     exchangers, while:
  564.      "*.dummy.net"   "mail.xmailserver.org,192.168.1.1,mx.xmailserver.org:6423"
  565.     sends all mail for "*'*.dummy.net' through the provided list of mail
  566.     exchangers. If the port (:nn) is not specified the default SMTP port
  567.     (25) is assumed. you can also enable XMail to random-select the order of
  568.     the gateway list by specifying:
  569.      "*.dummy.net"   "#mail.xmailserver.org,192.168.1.1,mx.xmailserver.org:6423"
  570.     using the character '#' as the first char of the gateway list.
  571.     [table index] [configuration] [top]
  572.    SMTPRELAY.TAB
  573.      "ipaddr"[TAB]"netmask"[NEWLINE]
  574.     Example:
  575.      "212.131.173.0"   "255.255.255.0"
  576.     allows all hosts of the class 'C' network '212.131.173.XXX' to use the
  577.     server as relay.
  578.     [table index] [configuration] [top]
  579.    SMTPAUTH.TAB
  580.      "username"[TAB]"password"[TAB]"permissions"[NEWLINE]
  581.     is used to permit SMTP clients authentication with protocols PLAIN,
  582.     LOGIN, CRAM-MD5 and custom. With custom authentication a file containing
  583.     all secrets (username + ':' + password) is passed as parameter to the
  584.     custom authentication program which tests all secrets to find the one
  585.     matching (if exist). For this reason it's better to keep the number of
  586.     entries in this file as low as possible. Permissions are a string that
  587.     can contain:
  588.     M   open mailing features
  589.     R   open relay features (bypass all other relay blocking traps)
  590.     V   VRFY command enabled (bypass SERVER.TAB variable)
  591.     T   ETRN command enabled (bypass SERVER.TAB variable)
  592.     Z   disable mail size checking (bypass SERVER.TAB variable)
  593.     When PLAIN, LOGIN or CRAM-MD5 authentication mode are used, first a
  594.     lookup in 'MAILUSERS.TAB' accounts is performed to avoid duplicating
  595.     information with 'SMTPAUTH.TAB'. Therefore when using these
  596.     authentication modes a user must use as username the full email address
  597.     (the : separator is permitted instead of @) and as password his POP3
  598.     password. If the lookup succeed the 'SERVER.TAB' variable
  599.     'DefaultSmtpPerms' is used to assign user SMTP permissions (default MR).
  600.     If the lookup fails then 'SMTPAUTH.TAB' lookup is done.
  601.     [table index] [configuration] [top]
  602.    SMTPEXTAUTH.TAB
  603.     Besides internal SMTP authentication methods a user (XMail
  604.     administrator) can define custom authentication procedures by setting up
  605.     this file properly. The section "SMTP Client Authentication" explains
  606.     the client part of custom authentication when we put an 'external' line
  607.     inside the configuration file. The file 'SMTPEXTAUTH.TAB' is the server
  608.     part of the custom authentication which has the given format:
  609.      "auth-name"[TAB]"base-challenge"[TAB]"program-path"[TAB]"arg-or-macro"...[NEWLINE]
  610.     This file can contain multiple lines whose 'auth-name' are listed during
  611.     the EHLO command response. Where 'arg-or-macro' can be:
  612.     @@CHALL
  613.         server challenge given by base-challenge + ':' + server-timestamp
  614.     @@DGEST
  615.         client response to server challenge (@CHALL)
  616.     @@FSECRT
  617.         a file containing all the lines (username + ':' + password) of
  618.         SMTPAUTH.TAB
  619.     Example:
  620.      "RSA-AUTH" "foochallenge" "/usr/bin/myrsa-authenticate"=>
  621.        "-c" "@@CHALL" "-f" "@@FSECRT" "-d" "@@DGEST"
  622.     The external program must test all lines of '@@FSECRT' to find the one
  623.     (if it exists) that matches the client digest (@@DGEST). If it finds a
  624.     match, it must return zero and overwrite '@@FSECRT' with the matching
  625.     secret (username + ':' + password). If a match is not found, the program
  626.     must return a value other than zero.
  627.     [table index] [configuration] [top]
  628.    USERDEF.TAB
  629.      "varname"[TAB]"varvalue"[NEWLINE]
  630.     Example:
  631.      "RealName"  "??"
  632.      "HomePage"  "??"
  633.      "Address"   "??"
  634.      "Telephone" "??"
  635.      "MaxMBSize" "10000"
  636.     contains user default values for new users that are not set during the
  637.     new account creation. This file is looked up in two different places,
  638.     first in '$MAIL_ROOT/domains/DOMAIN' then in '$MAIL_ROOT', where
  639.     'DOMAIN' is the name of the domain where We're going to create the new
  640.     user.
  641.     For each 'domain' handled by the server we'll create a directory
  642.     'domain' inside $MAIL_ROOT. Inside $MAIL_ROOT/'domain' reside
  643.     'domain'->'account' directories ($MAIL_ROOT/'domain'/'account'). This
  644.     folder contains a sub folder named 'mailbox' (or
  645.     'Maildir/(tmp,new,cur)') that stores all 'account' messages. It also
  646.     contains a file named 'USER.TAB' that stores"account" variabiles,
  647.     example:
  648.      "RealName"  "Davide Libenzi"
  649.      "HomePage"  "http://www.xmailserver.org/davide.html"
  650.      "MaxMBSize" "30000"
  651.     [table index] [configuration] [top]
  652.    CTRLACCOUNTS.TAB
  653.      "username"[TAB]"password"[NEWLINE]
  654.     This file contains the accounts that are enable to remote administer
  655.     XMail. The password is encrypted with the 'XMCrypt' program supplied
  656.     with the source distro.
  657.     'REMEMBER THAT THIS HOLDS ADMIN ACCOUNTS, SO PLEASE CHOOSE COMPLEX
  658.     USERNAMES AND PASSWORDS AND USE CTRL.IPMAP.TAB TO RESTRICT IP ACCESS!
  659.     REMEMBER TO REMOVE THE EXAMPLE ACCOUNT FROM THIS FILE!'
  660.     [table index] [configuration] [top]
  661.    SPAMMERS.TAB
  662.      "ipaddr"[TAB]"netmask"[NEWLINE]
  663.     or:
  664.      "ipaddr"[TAB]"netmask"[TAB]"params"[NEWLINE]
  665.     or:
  666.      "ipaddr/bits"[NEWLINE]
  667.     or:
  668.      "ipaddr/bits"[TAB]"params"[NEWLINE]
  669.     Example:
  670.      "212.131.173.0"  "255.255.255.0"
  671.      "212.131.173.0/24"
  672.     register all hosts of the class 'C' network '212.131.173.XXX' as
  673.     spammers, and block them the use of XMail SMTP server. If a match is
  674.     found on one of those records, XMail will reject the incoming SMTP
  675.     connection at early stages. It is possible to specify optional
  676.     parameters to tell XMail which behaviour it should assume in case of
  677.     match. An example of such setup is:
  678.      "212.131.173.0/24"  "code=0"
  679.     In this case a code=0 tells XMail to flag the connection as possible
  680.     spammer, but wait later SMTP session stages to reject the connection
  681.     itself. In this case an authenticated SMTP session can override the
  682.     SPAMMERS.TAB match. The optional "params" field lists parameters
  683.     associated with the record, separated by a comma:
  684.      "param1=value1,param2=value2,...,paramN=valueN"
  685.     Currently supported parameters are:
  686.     code
  687.         Specify the rejection code for the record. If the value is greater
  688.         than zero, the connection is rejected soon, and the remote SMTP
  689.         client is disconnected. If the value is zero, the connection is
  690.         flagged as spammer but wait later stages for rejection, by allowing
  691.         authenticated SMTP connections to bypass the SPAMMERS.TAB match. If
  692.         the value is less than zero, XMail will insert an "absolute value"
  693.         seconds delay between SMTP commands.
  694.     [table index] [configuration] [top]
  695.    SPAM-ADDRESS.TAB
  696.      "spam-address"[NEWLINE]
  697.     Example:
  698.      "*@rude.net"
  699.      "*-admin@even.more.rude.net"
  700.     blocks mails coming from the entire domain 'rude.net' and coming from
  701.     all addresses that end with '-admin@'even.more.rude.net.
  702.     [table index] [configuration] [top]
  703.    POP3.IPMAP.TAB
  704.      "ipaddr"[TAB]"netmask"[TAB]"permission"[TAB]"precedence"[NEWLINE]
  705.     This file controls the global IP access permission to the POP3 server if
  706.     located in the MAIL_ROOT path, and user IP access to its POP3 mailbox if
  707.     located inside the user directory.
  708.     Example:
  709.      "0.0.0.0"  "0.0.0.0"  "DENY"  "1"
  710.      "212.131.173.0"  "255.255.255.0"  "ALLOW"  "2"
  711.     This configuration denies access to all IPs except the ones of the class
  712.     'C' network '212.131.173.XXX'.
  713.     Higher precedences win over lower ones.
  714.     [table index] [configuration] [top]
  715.    SMTP.IPMAP.TAB
  716.      "ipaddr"[TAB]"netmask"[TAB]"permission"[TAB]"precedence"[NEWLINE]
  717.     This file controls IP access permission to SMTP server.
  718.     Example:
  719.      "0.0.0.0"  "0.0.0.0"  "DENY"  "1"
  720.      "212.131.173.0"  "255.255.255.0"  "ALLOW"  "2"
  721.     This configuration denies access to all IPs except the ones of the class
  722.     'C' network '212.131.173.XXX'.
  723.     Higher precedences win over lower ones.
  724.     [table index] [configuration] [top]
  725.    CTRL.IPMAP.TAB
  726.      "ipaddr"[TAB]"netmask"[TAB]"permission"[TAB]"precedence"[NEWLINE]
  727.     This file control IP access permission to CTRL server. Example:
  728.      "0.0.0.0"  "0.0.0.0"  "DENY"  "1"
  729.      "212.131.173.0"  "255.255.255.0"  "ALLOW"  "2"
  730.     This configuration deny access to all IPs except the ones of the class
  731.     'C' network '212.131.173.XXX'. Higher precedences win over lower ones.
  732.     [table index] [configuration] [top]
  733.    FINGER.IPMAP.TAB
  734.      "ipaddr"[TAB]"netmask"[TAB]"permission"[TAB]"precedence"[NEWLINE]
  735.     This file controls IP access permission to FINGER server. Example:
  736.      "0.0.0.0"  "0.0.0.0"  "DENY"  "1"
  737.      "212.131.173.0"  "255.255.255.0"  "ALLOW"  "2"
  738.     This configuration denies access to all IPs except the ones of the class
  739.     'C' network '212.131.173.XXX'. Higher precedences win over lower ones.
  740.     [table index] [configuration] [top]
  741.    USER.TAB
  742.      "variable"[TAB]"value"[NEWLINE]
  743.     store user information such as:
  744.      "RealName"  "Davide Libenzi"
  745.      "HomePage"  "http://www.xmailserver.org/davide.html"
  746.      "MaxMBSize" "30000"
  747.      "ClosedML"  "0"
  748.     Please refer to "USER.TAB variables" below.
  749.     [table index] [configuration] [top]
  750.    MLUSERS.TAB
  751.     If the user is a mailing list this file must exist inside the user
  752.     account subdirectory and contain a list of users subscribed to this
  753.     list. The file format is:
  754.      "user"[TAB]"perms"[NEWLINE]
  755.     where:
  756.     user
  757.         subscriber email address.
  758.     perms
  759.         subscriber permissions:
  760.         R       read.
  761.         W       write (check done using the 'MAIL FROM:<...>' SMTP return
  762.                 path).
  763.         A       write (check done using the email address used for SMTP
  764.                 authentication).
  765.     Example:
  766.      "davidel@xmailserver.org"   "RW"
  767.      "ghostuser@nightmare.net"   "R"
  768.      "meawmeaw@kitty.cat"        "RA"
  769.     If the 'USER.TAB' file defines the 'ClosedML' variable as '1' then a
  770.     client can post to this mailing list only if it's listed in
  771.     'MLUSERS.TAB' with RW permissions.
  772.     [table index] [configuration] [top]
  773.    MAILPROC.TAB
  774.      "command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  775.     stores commands (internals or externals) that have to be executed on a
  776.     message file. The presence of this file is optional ans if it does not
  777.     exist the default processing is to store the message in user mailbox.
  778.     The 'MAILPROC.TAB' file can be either per user or per domain, depending
  779.     where the file is stored. If stored inside the user directory it applies
  780.     only to the user whose directory hosts the 'MAILPROC.TAB', while if
  781.     stored inside the domain directory it applies to all users of such
  782.     domain. Each argument can be a macro also:
  783.     @@FROM
  784.         is substituted for the sender of the message
  785.     @@RCPT
  786.         is substituted for the recipient of the message
  787.     @@RRCPT
  788.         is substituted for the real recipient (@@RCPT could be an alias) of
  789.         the message
  790.     @@FILE
  791.         is substituted for the message file path (the external command
  792.         _must_ only read the file)
  793.     @@MSGID
  794.         is substituted for the (XMail unique) message id
  795.     @@MSGREF
  796.         is substituted for the reference SMTP message id
  797.     @@TMPFILE
  798.         creates a copy of the message file to a temporary one. It can be
  799.         used with 'external' command but in this case it's external program
  800.         responsibility to delete the temporary file. Do not use it with
  801.         'filter' commands since the filter will have no way to modify the
  802.         real spool file
  803.     @@USERAUTH
  804.         name of the SMTP authenticated user, or "-" if no authentication has
  805.         been supplied
  806.     Supported commands:
  807.     [EXTERNAL]
  808.      "external"[TAB]"priority"[TAB]"wait-timeout"[TAB]"command-path"[TAB]=>
  809.        "arg-or-macro"[TAB]...[NEWLINE]
  810.     where:
  811.     external
  812.         command keyword
  813.     priority
  814.         process priority: 0 = normal -1 = below normal +1 = above normal
  815.     wait-timeout
  816.         wait timeout for process execution in seconds: 0 = nowait
  817.         Be carefull if using @@FILE to give the external command enough
  818.         timeout to complete, otherwise the file will be removed by XMail
  819.         while the command is processing. This is because such file is a
  820.         temporary one that is deleted when XMail exits from 'MAILPROC.TAB'
  821.         file processing. In case the external command exit code will be
  822.         '16', the command processing will stop and all the following
  823.         commands listed inside the file will be skipped.
  824.     [FILTER]
  825.      "filter"[TAB]"priority"[TAB]"wait-timeout"[TAB]"command-path"[TAB]=>
  826.        "arg-or-macro"[TAB]...[NEWLINE]
  827.     where:
  828.     filter
  829.         command keyword
  830.     priority
  831.         process priority: 0 = normal -1 = below normal +1 = above normal
  832.     wait-timeout
  833.         wait timeout for process execution in seconds: 0 = nowait
  834.         With filters, it is not suggested to use @@TMPFILE, since the filter
  835.         will never have the ability to change the message content in that
  836.         way. Also, to avoid problems very difficult to troubleshoot, it is
  837.         suggested to give the filter 'ENOUGH' timeout to complete (90
  838.         seconds or more). See [MESSAGE FILTERS] for detailed information
  839.         about return codes. In the filter command, the "Stop Filter
  840.         Processing" return flag will make XMail to stop the execution of the
  841.         current custom processing file.
  842.     The 'filter' command will pass the message file to a custom external
  843.     filter, that after inspecting it, has the option to accept, reject or
  844.     modify it. Care should be taken to properly re-format the message after
  845.     changing it, to avoid message corruption. The 'filter' command 'CANNOT'
  846.     successfully change the private XMail's header part of the spool
  847.     message.
  848.     [MAILBOX]
  849.      "mailbox"[NEWLINE]
  850.     With this command the message is pushed into local user mailbox.
  851.     [REDIRECT]
  852.      "redirect"[TAB]"domain-or-emailaddress"[TAB]...[NEWLINE]
  853.     Redirect message to internal or external domain or email address. If the
  854.     message was for foo-user@custdomain.net and the file custdomain.net.tab
  855.     contains a line:
  856.      "redirect"  "target-domain.org"
  857.     the message is delivered to 'foo-user@target-domain.org'.
  858.     While the line:
  859.      "redirect"  "user@target-domain.org"
  860.     redirects the message to user@target-domain.org.
  861.     [LREDIRECT]
  862.      "lredirect"[TAB]"domain-or-emailaddress"[TAB]...[NEWLINE]
  863.     Redirect the message to internal or external domain (or email address)
  864.     impersonating local domain during messages delivery. If the message was
  865.     for foo-user@custdomain.net and the file custdomain.net.tab contains a
  866.     line:
  867.      "redirect"  "target-domain.org"
  868.     the message is delivered to 'foo-user@target-domain.org'.
  869.     While the line:
  870.      "redirect"  "user@target-domain.org"
  871.     redirects the message to 'user@target-domain.org'. The difference
  872.     between "redirect" and "lredirect" is the following. Suppose A@B sends a
  873.     message to C@D, that has a redirect to E@F. With "redirect" E@F will see
  874.     A@B has sender while with "lredirect" he will see C@D.
  875.     [SMTPRELAY]
  876.      "smtprelay"[TAB]"server[:port],server[:port],..."[NEWLINE]
  877.     Send mail to the specified SMTP server list by trying the first, if
  878.     fails the second and so on. Otherwise You can use this syntax:
  879.      "smtprelay"[TAB]"#server[:port],server[:port],..."[NEWLINE]
  880.     to have XMail random-select the order the specified relays.
  881.     [table index] [configuration] [top]
  882.    SMTP.IPPROP.TAB
  883.      "ip-addr"[TAB]"var0=value0"...[TAB]"varN=valueN"[NEWLINE]
  884.     Example:
  885.      "192.168.0.7/32"   "WhiteList=1"
  886.     Address selection mask are formed by an IP address (network) plus the
  887.     number of valid bits inside the network mask. No space are allowed
  888.     between the variable name and the '=' sign and between the '=' sign and
  889.     the value. These are the currently defined variables:
  890.     WhiteList
  891.         If set to 1 and if the peer IP matches the address mask, all peer IP
  892.         based checks will be skipped.
  893.     [table index] [configuration] [top]
  894.    FILTERS.IN.TAB
  895.     See [MESSAGE FILTERS]
  896.     [table index] [configuration] [top]
  897.    FILTERS.OUT.TAB
  898.     See [MESSAGE FILTERS]
  899.     [table index] [configuration] [top]
  900.    FILTERS.PRE-DATA.TAB
  901.     See [SMTP MESSAGE FILTERS]
  902.     [table index] [configuration] [top]
  903.    FILTERS.POST-DATA.TAB
  904.     See [SMTP MESSAGE FILTERS]
  905.     [table index] [configuration] [top]
  906. EXTERNAL AUTHENTICATION
  907.     You can use external modules (executables) to perform user
  908.     authentication instead of using XMail 'mailusers.tab' lookups. Inside
  909.     the userauth directory you'll find one directory for each service whose
  910.     authentication can be handled externally (for now only POP3). Suppose We
  911.     must authenticate 'USERNAME' inside 'DOMAIN', XMail first tries to
  912.     lookup (inside userauth/pop3) a file named:
  913.     'DOMAIN.tab'
  914.     else:
  915.     '.tab'
  916.     If one of these files is found, XMail authenticates 'USERNAME' -
  917.     'DOMAIN' using that file. The authentication file is a TAB file (see at
  918.     the proper section in this document) which has the given structure:
  919.      "auth-action"[TAB]"command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  920.     Each argument can be a macro also:
  921.     @@USER
  922.         the USERNAME to authenticate
  923.     @@DOMAIN
  924.         the DOMAIN to authenticate
  925.     @@PASSWD
  926.         the user password
  927.     @@PATH
  928.         user path
  929.     The values for 'auth-action' can be one of:
  930.         item userauth
  931.         executed when user authentication is required
  932.     useradd
  933.         executed when a user need to be added
  934.     useredit
  935.         executed when a user change is required
  936.     userdel
  937.         executed when a user deletion is required
  938.     domaindrop
  939.         executed when all domain users need to be deleted
  940.     The first line that stores the handling command for the requested action
  941.     is executed as:
  942.      command arg0 ... argN
  943.     that must return zero if successful. Any other exit code is interpreted
  944.     as authentication operation failure, that. in 'userauth' case, means
  945.     such user is not authenticated.
  946.     If the execution of the command fails for system reasons (command not
  947.     found, access denied, etc ...) then the user is not authenticated.
  948.     If none of this file's id are found, then usual authentication is
  949.     performed ('mailusers.tab'). The use of external authentication does not
  950.     avoid the presence of the user entry in 'mailusers.tab'.
  951.     [top]
  952. SMTP CLIENT AUTHENTICATION
  953.     When a message is to be sent through an SMTP server that requires
  954.     authentication, XMail provides a way to handle this task by if the
  955.     'userauth/smtp' subdirectory is set up properly.
  956.     Suppose a mail is to be sent through the SMTP server 'mail.foo.net',
  957.     this makes XMail to search for a file named (inside userauth/smtp):
  958.     'mail.foo.net.tab'
  959.     then:
  960.     'foo.net.tab'
  961.     then:
  962.     'net.tab'
  963.     If one of these files is found its content is used to authenticate the
  964.     SMTP client session. The structure of this file, as the extension says,
  965.     is the TAB one used for most of the configuration files inside XMail.
  966.     Only the first valid line (uncommented #) is used to choose the
  967.     authentication method and lines has this format:
  968.      "auth-type"[TAB]"param1"...[TAB]"paramN"[NEWLINE]
  969.     Valid lines are:
  970.      "plain" "username"  "password"
  971.     or
  972.      "login" "username"  "password"
  973.     or
  974.      "cram-md5"  "username"  "password"
  975.     or
  976.      "external"  "auth-name" "secret"    "prog-path" "arg-or-macro"  ...
  977.     Where 'auth-name' can be any symbolic name and 'arg-or-macro' can be a
  978.     program argument or one of these macros:
  979.     @@CHALL
  980.         server challenge string
  981.     @@SECRT
  982.         authentication secret
  983.     @@RFILE
  984.         output response file path
  985.     For example:
  986.      "external" "RSA-AUTH" "mysecret" "/usr/bin/myrsa-auth" "-c" "@@CHALL" "-s"=>
  987.        "@@SECRT" "-f" "@@RFILE"
  988.     XMail sends a line like:
  989.      AUTH RSA-AUTH
  990.     to the SMTP server, and wait for a line like:
  991.      3?? base64-challenge
  992.     Then XMail decodes 'base64-challenge' and invokes the external program
  993.     to get the response to send to the SMTP server. The external program
  994.     must return zero upon success and must put the response into the file
  995.     @@RFILE (without new line termination).
  996.     [top]
  997. CUSTOM DOMAIN MAIL PROCESSING
  998.     If a message that has as target domain of 'sub1.sub2.domain.net' arrives
  999.     at the XMail server, 'AND' XMail does not have a real domain
  1000.     'sub1.sub2.domain.net' inside its domain list, XMail decides if this
  1001.     domain gets a custom domain processing by trying to lookup:
  1002.      sub1.sub2.domain.net.tab
  1003.      .sub2.domain.net.tab
  1004.      .domain.net.tab
  1005.      .net.tab
  1006.      .tab
  1007.     inside the 'custdomains' directory.
  1008.     If one of these files is found the incoming mail gets custom domain
  1009.     processing by executing commands that are stored in such a file.
  1010.     The format is:
  1011.      "command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  1012.     These tables store commands (internals or externals) that have to be
  1013.     executed on the message file. The presence of one of these files is
  1014.     optional and if none exist the default processing is applied to the
  1015.     message via SMTP.
  1016.     Each argument can be a macro also:
  1017.     @@FROM
  1018.         the sender of the message
  1019.     @@RCPT
  1020.         the target of the message
  1021.     @@FILE
  1022.         the message file path (the external command 'must only read' the
  1023.         file)
  1024.     @@MSGID
  1025.         the (XMail unique) message id
  1026.     @@MSGREF
  1027.         the reference SMTP message id
  1028.     @@TMPFILE
  1029.         creates a copy of the message file to a temporary one. It can be
  1030.         used with 'external' command but in this case it's external
  1031.         program's responsibility to delete the temporary file
  1032.     @@USERAUTH
  1033.         name of the SMTP authenticated user, or "-" if no authentication has
  1034.         been supplied
  1035.     Supported commands:
  1036.     [EXTERNAL]
  1037.          "external"[TAB]"priority"[TAB]"wait-timeout"[TAB]"command-path"[TAB]=>
  1038.            "arg-or-macro"[TAB]...[NEWLINE]
  1039.         where:
  1040.         external
  1041.                 command keyword
  1042.         priority
  1043.                 process priority: 0 = normal -1 = below normal +1 = above
  1044.                 normal
  1045.         wait-timeout
  1046.                 wait timeout for process execution in seconds: 0 = nowait
  1047.                 Be carefull if using @@FILE to give the external command
  1048.                 enough timeout to complete, otherwise the file will be
  1049.                 removed by XMail while the command is processing. This is
  1050.                 because such file is a temporary one that is deleted when
  1051.                 XMail exits from file processing. In case the external
  1052.                 command exit code will be '16', the command processing will
  1053.                 stop and all the following commands listed inside the file
  1054.                 will be skipped.
  1055.     [FILTER]
  1056.          "filter"[TAB]"priority"[TAB]"wait-timeout"[TAB]"command-path"[TAB]=>
  1057.            "arg-or-macro"[TAB]...[NEWLINE]
  1058.         where:
  1059.         filter
  1060.             command keyword
  1061.         priority
  1062.             process priority: 0 = normal -1 = below normal +1 = above normal
  1063.         wait-timeout
  1064.             wait timeout for process execution in seconds: 0 = nowait
  1065.             With filters, it is not suggested to use @@TMPFILE, since the
  1066.             filter will never have the ability to change the message content
  1067.             in that way. Also, to avoid problems very difficult to
  1068.             troubleshoot, it is suggested to give the filter 'ENOUGH'
  1069.             timeout to complete (90 seconds or more). See [MESSAGE FILTERS]
  1070.             for detailed information about return codes. In the filter
  1071.             command, the "Stop Filter Processing" return flag will make
  1072.             XMail to stop the execution of the current custom processing
  1073.             file.
  1074.         The 'filter' command will pass the message file to a custom external
  1075.         filter, that after inspecting it, has the option to accept, reject
  1076.         or modify it. Care should be taken to properly re-format the message
  1077.         after changing it, to avoid message corruption. The 'filter' command
  1078.         'CANNOT' successfully change the private XMail's header part of the
  1079.         spool message.
  1080.     [REDIRECT]
  1081.          "redirect"[TAB]"domain-or-emailaddress"[TAB]...[NEWLINE]
  1082.         Redirect message to internal or external domain or email address. If
  1083.         the message was for foo-user@custdomain.net and the file
  1084.         custdomain.net.tab contains a line:
  1085.          "redirect"  "target-domain.org"
  1086.         the message is delivered to 'foo-user@target-domain.org'.
  1087.         While the line:
  1088.          "redirect"  "user@target-domain.org"
  1089.         redirects the message to user@target-domain.org.
  1090.     [LREDIRECT]
  1091.          "lredirect"[TAB]"domain-or-emailaddress"[TAB]...[NEWLINE]
  1092.         Redirect the message to internal or external domain (or email
  1093.         address) impersonating local domain during messages delivery. If the
  1094.         message was for foo-user@custdomain.net and the file
  1095.         custdomain.net.tab contains a line:
  1096.          "redirect"  "target-domain.org"
  1097.         the message is delivered to 'foo-user@target-domain.org'.
  1098.         While the line:
  1099.          "redirect"  "user@target-domain.org"
  1100.         redirects the message to 'user@target-domain.org'. The difference
  1101.         between "redirect" and "lredirect" is the following. Suppose A@B
  1102.         sends a message to C@D, that has a redirect to E@F. With "redirect"
  1103.         E@F will see A@B has sender while with "lredirect" he will see C@D.
  1104.     [SMTPRELAY]
  1105.          "smtprelay"[TAB]"server[:port],server[:port],..."[NEWLINE]
  1106.         Send mail to the specified SMTP server list by trying the first, if
  1107.         that fails, the second and so on.
  1108.         Otherwise you can use this syntax:
  1109.          "smtprelay"[TAB]"#server[:port],server[:port],..."[NEWLINE]
  1110.         To have XMail random-select the order the specified relays.
  1111.     [SMTP]
  1112.          "smtp"[NEWLINE]
  1113.         Do SMTP delivery.
  1114.     [top]
  1115. CMD ALIASES
  1116.     CmdAliases implement aliases that are handled only through commands and
  1117.     can be thought of as a user level implementation of custom domain
  1118.     processing commands. The command set is the same of the one that is
  1119.     described above ("Custom domain mail processing") and won't be explained
  1120.     again here.
  1121.     For every handled domain (listed inside 'domains.tab') a directory with
  1122.     the same domain name is created inside the 'cmdaliases' subdirectory.
  1123.     This directory is automatically created and removed when you add/remove
  1124.     domains through the CTRL protocol (or 'CtrlClnt').
  1125.     When a mail for 'USER@DOMAIN' is received by the server, the domain
  1126.     'DOMAIN' is to be handled locally, and the standard users/aliases lookup
  1127.     fails, a file named 'USER.tab' is searched inside
  1128.     '$MAIL_ROOT/cmdaliases/DOMAIN'. If such file is found, commands listed
  1129.     inside the file (whose format must follow the one described in the
  1130.     previous section) are executed by the server as a matter of mail message
  1131.     processing. An important thing to remember is that all domain and user
  1132.     names, when applied to the file system, must be lower case.
  1133.     The use of the command '[SMTP]' must be implemented with great care
  1134.     because it could create mail loops within the server.
  1135.     [top]
  1136. SERVER.TAB VARIABLES
  1137.     The following variables are for use int the "SERVER.TAB" configuration
  1138.     file.
  1139.     [RootDomain]
  1140.         Indicate the primary domain for the server.
  1141.     [SmtpServerDomain]
  1142.         If set, forces the domain name XMail uses inside the ESMTP banner
  1143.         used to support CRAM-MD5 ESMTP authentication.
  1144.     [POP3Domain]
  1145.         Set the default domain for POP3 client connections.
  1146.     [PostMaster]
  1147.         Set the postmaster address.
  1148.     [ErrorsAdmin]
  1149.         The email address that receives notification messages for every
  1150.         message that has had delivery errors. If it is empty (allowed), the
  1151.         notification message is sent to the sender only.
  1152.     [TempErrorsAdmin]
  1153.         The email address that receives notification for temporary delivery
  1154.         failures. In case it's empty the notification message is sent to the
  1155.         sender only.
  1156.     [DefaultSMTPGateways]
  1157.         A comma separated list of SMTP servers XMail 'must' use to send its
  1158.         mails. This has the precedence over MX records.
  1159.     [HeloDomain]
  1160.         If this variable is specified and is not empty, its content is sent
  1161.         as HELO domain. Otherwise the reverse lookup of the local IP is sent
  1162.         as HELO domain. This helps to deal with remote SMTP servers that are
  1163.         set to check the reverse lookup of the incoming IP.
  1164.     [CheckMailerDomain]
  1165.         Enable validation of the sender domain ('MAIL FROM:<...@xxx>') by
  1166.         looking up DNS/MX entries.
  1167.     [RemoveSpoolErrors]
  1168.         Indicate if mail has to be removed or stored in 'froz' directory
  1169.         after a failure in delivery or filtering.
  1170.     [NotifyMsgLinesExtra]
  1171.         Number of lines of the bounced message that have to be listed inside
  1172.         the notify message (lines after the headers section). Default is
  1173.         zero.
  1174.     [NotifySendLogToSender]
  1175.         Enable/Disable sending the message log file inside the notify
  1176.         message to the sender. Default is off (zero).
  1177.     [NotifyTryPattern]
  1178.         List of delivery attempts that require the system to send a
  1179.         notification to the sender (and eventually to 'TempErrorsAdmin').
  1180.         The list is a comma separated list of numbers (with no extra spaces)
  1181.         as in:
  1182.          "1,4,9"
  1183.         Default is empty which means no notification is sent upon a delivery
  1184.         attempt failure.
  1185.     [AllowNullSender]
  1186.         Enable null sender ('MAIL FROM:<>') messages to be accepted by
  1187.         XMail.
  1188.     [NoSenderBounce]
  1189.         When building bounce messages, use the null SMTP sender ('MAIL
  1190.         FROM:<>') instead of the 'PostMaster' address. This will affect only
  1191.         the SMTP sender, while the message RFC822 headers will still contain
  1192.         the correct From: header.
  1193.     [MaxMTAOps]
  1194.         Set the maximum number of MTA relay steps before to declare the
  1195.         message as looped (default 16).
  1196.     [ReceivedHdrType]
  1197.         Set the verbosity of the Received: message headers tag.
  1198.         '0'     Standard (client IP shown , server IP not). Default.
  1199.         '1'     Verbose (client IP shown , server IP shown)
  1200.         '2'     Strict (no IP shown)
  1201.         '3'     Same as 0 but the client IP is not shown if the client
  1202.                 authenticate itself.
  1203.         '4'     Same as 1 but the client IP is not shown if the client
  1204.                 authenticate itself.
  1205.     [FetchHdrTags]
  1206.         Set the list of headers tags to be used to extract addresses from
  1207.         POP3 fetched messages ("POP3LINKS.TAB"). This is a comma delimited
  1208.         list (no extra space or TABs must be included inside the list) as
  1209.         in:
  1210.          "+X-Deliver-To,To,Cc"
  1211.         Tags preceded by a '+' character make XMail stop scanning when an
  1212.         address is found inside the header tag.
  1213.         Tags preceded by a '+' character must be listed before other tags.
  1214.         The string "+X-Deliver-To,To,Cc" is the default if nothing is
  1215.         specified.
  1216.     [SMTP-MaxErrors]
  1217.         Set the maximum number of errors allowed in a single SMTP session.
  1218.         When the maximum number of allowed errors is exceeded, the
  1219.         connection will be automatically dropped. If such variable is not
  1220.         set, or it is set to zero, the maximum number of errors will be
  1221.         unlimited.
  1222.     [SmtpMsgIPBanSpammers]
  1223.         Used to set the message that is sent to the SMTP client when the
  1224.         client IP is listed inside the file SPAMMER.TAB.
  1225.     [SmtpMsgIPBanSpamAddress]
  1226.         Used to set the message that is sent to the SMTP client when the
  1227.         client IP is listed inside the file SPAM-ADDRESS.TAB.
  1228.     [SmtpMsgIPBanMaps]
  1229.         Used to set the message that is sent to the SMTP client when the
  1230.         client IP is listed inside one of the "CustMapsList".
  1231.     [CustomSMTPMessage]
  1232.         Set this to the message that you want to follow the standard SMTP
  1233.         error response sent by XMail, as in (one line, remember the =>):
  1234.          "Please open http://www.xmailserver.test/smtp_errors.html to get=>
  1235.             more information about this error"
  1236.         Please be aware the RFC821 fix the maximum reply line length to 512
  1237.         bytes.
  1238.     [AllowSmtpVRFY]
  1239.         Enable the use of VRFY SMTP command. This flag may be forced by SMTP
  1240.         authentication.
  1241.     [AllowSmtpETRN]
  1242.         Enable the use of ETRN SMTP command. This flag may be forced by SMTP
  1243.         authentication.
  1244.     [SmtpMinDiskSpace]
  1245.         Minimum disk space (in Kb) that is requested before accepting an
  1246.         SMTP connection.
  1247.     [SmtpMinVirtMemSpace]
  1248.         Minimum virtual memory (in Kb) that is requested before accepting an
  1249.         SMTP connection.
  1250.     [Pop3MinVirtMemSpace]
  1251.         Minimum virtual memory (in Kb) that is requested before accepting a
  1252.         POP3 connection.
  1253.     [Pop3SyncErrorAccount]
  1254.         This defines the email account (MUST be handled locally) that
  1255.         receives all fetched email that XMail has not been able to deliver.
  1256.     [EnableAuthSMTP-POP3]
  1257.         Enable SMTP after POP3 authentication (default on).
  1258.     [MaxMessageSize]
  1259.         Set the maximum message size in Kb that is possible to send through
  1260.         the server.
  1261.     [DefaultSmtpPerms]
  1262.         This list SMTP permissions assigned to users looked up inside
  1263.         "MAILUSERS.TAB" during SMTP authentication. It also defines the
  1264.         permissions for users authenticated with SMTP after POP3.
  1265.     [CustMapsList]
  1266.         This is a list a user can use to set custom maps checking. The list
  1267.         has the given (strict) format:
  1268.         maps-root:code,maps-root:code...
  1269.         Where maps-root is the root for the dns query (ie.
  1270.         dialups.mail-abuse.org.) and the code can be:
  1271.         '1'     the connection is drooped soon
  1272.         "0"     the connection is kept alive but only authenticated users
  1273.                 can send mail
  1274.         '-S'    the peer can send messages but a delay of S seconds is
  1275.                 introduced between commands
  1276.     [SMTP-RDNSCheck]
  1277.         Indicate if XMail must do an RDNS lookup before accepting a incoming
  1278.         SMTP connection. If 0, the check is not performed; if 1 and the
  1279.         check fails, the user receives a 'server use forbidden' at MAIL_FROM
  1280.         time; if -S (S > 0) and the check fails, a delay of S seconds
  1281.         between SMTP commands is used to prevent massive spamming.
  1282.         SMTP authentication overrides the denial set by this option by
  1283.         giving authenticated users the ability to access the server from
  1284.         'mapped' IPs.
  1285.     [SmartDNSHost]
  1286.         Setup a list of smart DNS hosts to which are directed DNS queries
  1287.         with recursion bit set to true. Such DNS hosts must support DNS
  1288.         recursion in queries. The format is:
  1289.          dns.home.bogus.net:tcp,192.168.1.1:udp,...
  1290.     [DisableEmitAuthUser]
  1291.         Enable/disable the emission the the 'X-AuthUser:' mail header for
  1292.         authenticated users. Valid values are "0" or '1', default is "0"
  1293.         (emission enabled).
  1294.     [DynDnsSetup]
  1295.         Give the possibility to handle dynamic IP domain registration to
  1296.         dynamic IP servers. One of these service providers is
  1297.         'www.dyndns.org' whose site you can watch for registrations and more
  1298.         info.
  1299.         The string has the format:
  1300.          server,port,HTTP-GET-String[,username,password]
  1301.         For Example:
  1302.         members.dyndns.org,80,/nic/dyndns?action=edit&started=1&hostname=YES
  1303.         &host_id=yourhost.ourdomain.ext&myip=%s&wildcard=OFF&mx=mail.exchang
  1304.         er.ext&backmx=NO,foouser,foopasswd
  1305.         or
  1306.         www.dns4ever.com,80,/sys/u.cgi?d=DOMAIN&u=USERNAME&p=PASSWORD&i=%s
  1307.         where:
  1308.         DOMAIN  the domain you've registered
  1309.         USERNAME
  1310.                 the username you get from service provider
  1311.         PASSWORD
  1312.                 the password you get from service provider
  1313.         The %s in HTTP-GET-String is replaced with the IP address to
  1314.         register.
  1315.     [SmtpConfig]
  1316.         Default SMTP server config loaded if specific server IP config is
  1317.         not found.
  1318.     [SmtpConfig-XXX.YYY.ZZZ.WWW]
  1319.         Specific IP SMTP server config. The variable value is a comma
  1320.         separated sequence of configuration tokens whose meaning is:
  1321.         mail-auth
  1322.                 authentication required to send mail to the server. Please
  1323.                 note that by setting this value everything requires
  1324.                 authentication, even for sending to local domains, and this
  1325.                 is probably not what you want.
  1326.     [top]
  1327. MESSAGE FILTERS
  1328.     This feature offers a way to filter messages by providing the ability to
  1329.     execute external programs, such as scripts or real executables. These
  1330.     'filters' may examine and/or modify messages and inform XMail of their
  1331.     actions with a return value.
  1332.     This feature offers the ability to inspect and modify messages, giving a
  1333.     way to reject messages based on content, alter messages (address
  1334.     rewriting) and so on.
  1335.     If this filters returns '4, 5 or 6' the message is rejected and is
  1336.     stopped in its travel. If the filter modifies the message it must return
  1337.     '7'.
  1338.     Additional flags are allowed to be returned to XMail as a result of
  1339.     filter processing by adding the flags value to the exits code above
  1340.     listed. The currently defined flags are :
  1341.     '16'
  1342.         Stop selected filter list processing.
  1343.     Filter flags are additive and if more than one flag need to be
  1344.     specified, their values must be added together. If a filter "raw" exit
  1345.     code is RC and the filter needs to return extra flags FILTER-SUM, the
  1346.     final return code FRC must be :
  1347.     FRC = RC + FILTER-SUM
  1348.     Example. Suppose a filter modified the message and hence needs to return
  1349.     7 as return code. Suppose also that a filter wants to block the filter
  1350.     selection list processing by specifying a flags value of 16, the value
  1351.     to be returned will be :
  1352.     FRC = 7 + 16 = 23
  1353.     Filter selection is driven by two files 'FILTERS.IN.TAB' and
  1354.     'FILTERS.OUT.TAB' located inside the $MAIL_ROOT/ directory and that have
  1355.     the following format:
  1356.      "sender"[TAB]"recipient"[TAB]"remote-addr"[TAB]"local-addr"[TAB]"filename"[NEWLINE]
  1357.     For example:
  1358.      "*@bad-domain.com" "*" "0.0.0.0/0" "0.0.0.0/0" "av-filter.tab"
  1359.      "*" "clean@purified.net" "0.0.0.0/0" "0.0.0.0/0" "spam-block.tab"
  1360.      "*" "*" "192.168.1.0/24" "0.0.0.0/0" "archive.tab"
  1361.     where the file "av-filter.tab" must be present inside the
  1362.     $MAIL_ROOT/filters directory. The "sender" and the "recipient" are
  1363.     resolved to the real account when possible. Address selection mask are
  1364.     formed by an IP address (network) plus the number of valid bits inside
  1365.     the network mask. The file 'FILTERS.IN.TAB' lists filters that have to
  1366.     be applied to inbound messages (going to local mailboxes) while the file
  1367.     'FILTERS.OUT.TAB' lists filters that have to be applied to outbound
  1368.     messages (delivered remotely). All four
  1369.     (sender+recipient+remote-addr+local-addr) selection fields must have a
  1370.     match in order "filename" to be evaluated. The syntax of the filter file
  1371.     is:
  1372.      "command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  1373.     or:
  1374.      "!flags"[TAB]"command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  1375.     Each file may contain multiple commands, that will be executed in
  1376.     strictly sequential order. The first command that will trigger a
  1377.     rejection code will make the filtering process to end. The 'flags'
  1378.     parameter is a comma-separated list of flags that drives the filter
  1379.     execution. The syntax of each flag is either FLAG or FLAG=VAL. Currently
  1380.     supported flags are:
  1381.     aex exclude filter execution in case of authenticated sender
  1382.     Each argument can be a macro also:
  1383.     @@FROM
  1384.         the sender of the message
  1385.     @@RFROM
  1386.         the sender of the message resolved to the real account, when
  1387.         possible (alias resolution)
  1388.     @@RCPT
  1389.         the target of the message
  1390.     @@RRCPT
  1391.         the target of the message resolved to the real account, when
  1392.         possible (alias resolution)
  1393.     @@REMOTEADDR
  1394.         remote IP address and port of the sender
  1395.     @@LOCALADDR
  1396.         local IP address and port where the message has been accepted
  1397.     @@FILE
  1398.         the message file path (the external command may modify the file if
  1399.         it returns '7' as command exit value.)
  1400.     @@MSGID
  1401.         with the (XMail unique) message id
  1402.     @@MSGREF
  1403.         the reference SMTP message id
  1404.     @@USERAUTH
  1405.         name of the SMTP authenticated user, or "-" if no authentication has
  1406.         been supplied
  1407.     Here 'command' is the name of an external program that processes the
  1408.     message and returns its processing result. If it returns '6' the message
  1409.     is rejected and a notification message is sent to the sender. By
  1410.     returning '5' the message is rejected without notification. While
  1411.     returning '4' the message is rejected without notification and without
  1412.     being frozen (a '5' response could lead to a frozen message if the
  1413.     "SERVER.TAB" configuration enables this). If all filters return values
  1414.     different from '6, 5 and 4' the message continues its trip. The filter
  1415.     command may also modify the file (AV scanning, content filter, message
  1416.     rewriting, etc) by returning '7'. The filter 'MUST' return '7' in case
  1417.     it modifies the message. If the filter changes the message file it
  1418.     'MUST' keep the message structure and it 'MUST' terminate all line with
  1419.     <CR><LF>. The filter has also the ability to return a one-line custom
  1420.     return message by creating a file named @@FILE.rej holding the message
  1421.     in the very first line. This file should be created 'ONLY' when the
  1422.     filter returns a rejection code ('6, 5 and 4')and 'NEVER' in case of
  1423.     passthru code ('7') or modify code.
  1424.     The spool files has this structure:
  1425.      Info Data           [ 1th line ]
  1426.      SmtpDomain          [ 2nd line ]
  1427.      SmtpMessageID       [ 3rd line ]
  1428.      MAIL FROM:<...>     [ 4th line ]
  1429.      RCPT TO:<...>       [ 5th line ]
  1430.      <<MAIL-DATA>>       [ 6th line ]
  1431.      ...
  1432.     After the '<<MAIL-DATA>>' tag (5th line) the message follows. The
  1433.     message is composed of a headers section and, after the first empty
  1434.     line, the message body. The format of the "Info Data" line is:
  1435.      ClientDomain;ClientIP;ClientPort;ServerDomain;ServerIP;ServerPort;Time;Logo
  1436.     'EXTREME' care must be used when modifying the message because the
  1437.     filter will be working on the real message, and a badly reformatted file
  1438.     will lead to message loss. The spool file header (any data before
  1439.     <<MAIL-DATA>>) 'MUST' be preserved as is by the filter in case of
  1440.     message rewrite happens.
  1441.     [top]
  1442. SMTP MESSAGE FILTERS
  1443.     Besides having the ability to perform off-line message filtering, XMail
  1444.     gives the user the power to run filters during the SMTP session. Two
  1445.     files drive the SMTP on-line filtering, and these are
  1446.     'FILTERS.PRE-DATA.TAB' and 'FILTERS.POST-DATA.TAB'. The file
  1447.     'FILTERS.PRE-DATA.TAB' contains one or more commands to be executed
  1448.     after the remote SMTP client sends the DATA command, and before XMail
  1449.     sends the response to the command. Using such filters, the user can tell
  1450.     XMail if or if not accept the following DATA transaction and, in case of
  1451.     rejection, the user is also allowed to specify a custom message to be
  1452.     sent to the remote SMTP client. The file 'FILTERS.POST-DATA.TAB'
  1453.     contains one or more commands to be executed after XMail received the
  1454.     whole client DATA, and before XMail sends the final response to the DATA
  1455.     command (final messages ack). The files 'FILTERS.PRE-DATA.TAB' and
  1456.     'FILTERS.POST-DATA.TAB' conatins zero or more lines with the following
  1457.     format:
  1458.      "command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  1459.     or:
  1460.      "!flags"[TAB]"command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
  1461.     Each file may contain multiple commands, that will be executed in
  1462.     strictly sequential order. The first command that will trigger a
  1463.     rejection code will make the filtering process to end. The 'flags'
  1464.     parameter is a comma-separated list of flags that drives the filter
  1465.     execution. The syntax of each flag is either FLAG or FLAG=VAL. Currently
  1466.     supported flags are:
  1467.     aex exclude filter execution in case of authenticated sender
  1468.     Each argument can be a macro also:
  1469.     @@FILE
  1470.         message file path
  1471.     @@USERAUTH
  1472.         name of the SMTP authenticated user, or "-" if no authentication has
  1473.         been supplied
  1474.     @@REMOTEADDR
  1475.         remote IP address and port of the sender
  1476.     @@LOCALADDR
  1477.         local IP address and port where the message has been accepted
  1478.     Filter commands have the ability to inspect and modify the content of
  1479.     the message (or info) file. The exit code of commands executed by XMail
  1480.     are used to tell XMail the action that has to be performed as a
  1481.     cosequence of the filter. The exit code is composed by a raw exit code
  1482.     and additional flags. Currently defined flags are:
  1483.     '16'
  1484.         Stop selected filter list processing.
  1485.     Currently defined raw exit codes are:
  1486.     '3' Reject the message.
  1487.     Any other exit codes will make XMail to accept the message, and can be
  1488.     used also when changing the content of the @@FILE file. 'EXTREME' care
  1489.     must be used when changing the @@FILE file, since XMail expect the file
  1490.     format to be correct. Also, it is important to preserve the <CR><LF>
  1491.     line termination of the file itself. When rejecting the message, the
  1492.     filter command has the ability to specify the SMTP status code that
  1493.     XMail will send to the remote SMTP client, by creating a file named
  1494.     @@FILE.rej containing the message in the very first line. Such file will
  1495.     be automatically removed by XMail. The data passed to filter commands
  1496.     inside @@FILE varies depending if the command is listed inside
  1497.     'FILTERS.PRE-DATA.TAB' or inside 'FILTERS.POST-DATA.TAB'. Commands
  1498.     listed inside 'FILTERS.PRE-DATA.TAB' will receive the following data
  1499.     stored inside @@FILE:
  1500.      Info Data           [ 1th line ]
  1501.      SmtpDomain          [ 2nd line ]
  1502.      SmtpMessageID       [ 3rd line ]
  1503.      MAIL FROM:<...>     [ 4th line ]
  1504.      RCPT TO:<...> {...} [ 5th line ]
  1505.      ...
  1506.     The file can have one or more "RCPT TO" lines. The format of the "Info
  1507.     Data" line is:
  1508.      ClientDomain;ClientIP;ClientPort;ServerDomain;ServerIP;ServerPort;Time;Logo
  1509.     Commands listed inside 'FILTERS.POST-DATA.TAB' will receive the
  1510.     following data stored inside @@FILE:
  1511.      Info Data           [ 1th line ]
  1512.      SmtpDomain          [ 2nd line ]
  1513.      SmtpMessageID       [ 3rd line ]
  1514.      MAIL FROM:<...>     [ 4th line ]
  1515.      RCPT TO:<...> {...} [ 5th line ]
  1516.      ...
  1517.      <<MAIL-DATA>>
  1518.      ...
  1519.     After the '<<MAIL-DATA>>' tag the message follows. The message is
  1520.     composed of a headers section and, after the first empty line, the
  1521.     message body. The format of the RCPT line is:
  1522.      RCPT TO:<address> {ra=real-address}
  1523.     where "real-address" is the "address" after it has been translated (if
  1524.     aliases applies) to the real local address. Otherwise it holds the same
  1525.     value of "address".
  1526.     [top]
  1527. USER.TAB VARIABLES
  1528.     The following variables are for use in the "USER.TAB" configuration
  1529.     file.
  1530.     [RealName]
  1531.         Full user name, ie.:
  1532.          "RealName"  "Davide Libenzi"
  1533.     [HomePage]
  1534.         User home page, ie.:
  1535.          "HomePage"  "http://www.xmailserver.org/davide.html"
  1536.     [MaxMBSize]
  1537.         Max user mailbox size in Kb, ie.:
  1538.          "MaxMBSize" "30000"
  1539.     [ClosedML]
  1540.         Specify if the mailing list is closed only to subscribed users, ie.:
  1541.          "ClosedML"  "1"
  1542.     [ListSender]
  1543.         Specify the mailing list sender or administrator:
  1544.          "ListSender"    "ml-admin@xmailserver.org"
  1545.         This variable should be set to avoid delivery error notifications to
  1546.         reach the original message senders.
  1547.     [SmtpPerms]
  1548.         User SMTP permissions (see SMTPAUTH.TAB for info).
  1549.     [ReceiveEnable]
  1550.         Set to '1' if the account can receive email, '0' if you want to
  1551.         disable the account from receiving messages.
  1552.     [PopEnable]
  1553.         Set to '1' if you want to enable the account to fetch POP3 messages,
  1554.         '0' otherwise.
  1555.     [UseReplyTo]
  1556.         Enable/Disable the emission of the Reply-To: header for mailing
  1557.         list's messages (default 1).
  1558.     [MaxMessageSize]
  1559.         Set the maximum message size (in Kb) that the user is able to send
  1560.         through the server. Overrides the SERVER.TAB variable.
  1561.     [DisableEmitAuthUser]
  1562.         Enable/disable the emission the the 'X-AuthUser:' mail header for
  1563.         authenticated users. Valid values are '0' or '1', default is '0'
  1564.         (emission enabled). This variable overrides the SERVER.TAB one when
  1565.         present.
  1566.     [top]
  1567. MAIL ROUTING THROUGH ADDRESSES
  1568.     A full implementation of SMTP protocol allows the ability to perform
  1569.     mail routing bypassing DNS MX records by means of setting, in a ruled
  1570.     way, the 'RCPT TO: <>' request. A mail from 'xuser@hostz' directed to
  1571.     '@hosta,@hostb:foouser@hostc' is received by '@hosta' then sent to
  1572.     '@hostb' using 'MAIL FROM: <@hosta:xuser@hostz>' and 'RCPT TO:
  1573.     <@hostb:foouser@hostc>'. The message is then sent to '@'hostc using
  1574.     'MAIL FROM: <@hostb,@hosta:xuser@hostz>' and 'RCPT TO: <foouser@hostc>'.
  1575.     [top]
  1576. XMAIL SPOOL DESIGN
  1577.     The new spool fs tree format has been designed to enable XMail to handle
  1578.     very large queues. Instead of having a single spool directory (like
  1579.     versions older than 0.61) a two layer deep splitting has been introduced
  1580.     so that its structure is:
  1581.      0   <dir>
  1582.        0   <dir>
  1583.          mess    <dir>
  1584.          rsnd    <dir>
  1585.          info    <dir>
  1586.          temp    <dir>
  1587.          slog    <dir>
  1588.          cust    <dir>
  1589.          froz    <dir>
  1590.        ...
  1591.      ...
  1592.     When XMail needs to create a new spool file a spool path is chosen in a
  1593.     random way and a new file with the format:
  1594.      mstime.tid.seq.hostname
  1595.     is created inside the 'temp' subdirectory. When the spool file is ready
  1596.     to be committed, it's moved into the 'mess' subdirectory that holds
  1597.     newer spool files. If XMail fails sending a new message (the ones in
  1598.     mess subdirectory) it creates a log file (with the same name of the
  1599.     message file) inside the 'slog' subdirectory and move the file from
  1600.     'mess' to 'rsnd'. During the message sending the message itself is
  1601.     locked by creating a file inside the 'lock' subdirectory (with the same
  1602.     name of the message file). If the message has permanent delivery errors
  1603.     or is expired and if the option 'RemoveSpoolErrors' of the 'SERVER.TAB'
  1604.     file is off, the message file is moved into the 'froz' subdirectory.
  1605.     [top]
  1606. SMTP COMMANDS
  1607.     These are commands understood by ESMTP server:
  1608.     MAIL FROM:<>
  1609.     RCPT TO:<>
  1610.     DATA
  1611.     HELO
  1612.     EHLO
  1613.     AUTH
  1614.     RSET
  1615.     VRFY
  1616.     ETRN
  1617.     NOOP
  1618.     HELP
  1619.     QUIT
  1620.     [top]
  1621. POP3 COMMANDS
  1622.     These are commands understood by POP3 server:
  1623.     USER
  1624.     PASS
  1625.     APOP
  1626.     STAT
  1627.     LIST
  1628.     UIDL
  1629.     QUIT
  1630.     RETR
  1631.     TOP
  1632.     DELE
  1633.     NOOP
  1634.     LAST
  1635.     RSET
  1636.     [top]
  1637. COMMAND LINE
  1638.     Most of XMail configuration settings are command line tunables. These
  1639.     are command line switches organized by server.
  1640.     [XMAIL]
  1641.         -Ms pathname
  1642.                 Mail root path (also settable with MAIL_ROOT environment).
  1643.         -Md     Activate debug (verbose) mode.
  1644.         -Mr hours
  1645.                 Set log rotate hours step.
  1646.         -Mx split-level
  1647.                 Set the queue split level. The value you set here is rounded
  1648.                 to the lower prime number higher or equal than the value
  1649.                 you've set.
  1650.         -MR bytes
  1651.                 Set the size of the socket's receive buffer in bytes
  1652.                 (rounded up to 1024).
  1653.         -MS bytes
  1654.                 Set the size of the socket's send buffer in bytes (rounded
  1655.                 up to 1024).
  1656.         -MM     Setup XMail to use 'Maildir' delivery (default on Unix).
  1657.         -Mm     Setup XMail to use 'mailbox' delivery (default on Windows).
  1658.         -MD ndirs
  1659.                 Set the number of subdirectories allocated for the DNS cache
  1660.                 files storage ( default 101 ).
  1661.     [POP3]
  1662.         -Pp port
  1663.                 Set POP3 server port (if you change this you must know what
  1664.                 you're doing).
  1665.         -Pt timeout
  1666.                 Set POP3 session timeout (seconds) after which the server
  1667.                 closes. the connection if it does not receive any commands.
  1668.         -Pl     Enable POP3 logging.
  1669.         -Pw timeout
  1670.                 Set the delay timeout in response to a bad POP3 login. Such
  1671.                 time is doubled at the next bad login.
  1672.         -Ph     Hang the connection in bad login response.
  1673.         -PI ip[:port]
  1674.                 Bind server to the specified ip address and (optional) port
  1675.                 (can be multiple).
  1676.         -PX nthreads
  1677.                 Set the maximum number of threads for POP3 server.
  1678.     [SMTP]
  1679.         -Sp port
  1680.                 Set SMTP server port (if you change this you must know what
  1681.                 you're doing).
  1682.         -St timeout
  1683.                 Set SMTP session timeout (seconds) after which the server
  1684.                 closes the connection if no commands are received.
  1685.         -Sl     Enable SMTP logging.
  1686.         -SI ip[:port]
  1687.                 Bind server to the specified ip address and (optional) port
  1688.                 (can be multiple).
  1689.         -SX nthreads
  1690.                 Set the maximum number of threads for SMTP server.
  1691.         -Sr maxrcpts
  1692.                 Set the maximu number of recipients for a single SMTP
  1693.                 message (default 100).
  1694.         -Se nsecs
  1695.                 Set the expire timeout for a POP3 authentication IP (default
  1696.                 900).
  1697.     [SMAIL]
  1698.         -Qn nthreads
  1699.                 Set the number of mailer threads.
  1700.         -Qt timeout
  1701.                 Set the time to be wait for a next try after send failure.
  1702.                 Default 480.
  1703.         -Qi ratio
  1704.                 Set the increment ratio of the reschedule time in sending a
  1705.                 messages. At every failure in delivery a message, reschedule
  1706.                 time T is incremented by (T / ratio), therefore :
  1707.                  T(i) = T(i-1) + T(i-1)/ratio.
  1708.                 If you set this ratio to zero, T remain unchanged over
  1709.                 delivery tentatives. Default 16.
  1710.         -Qr nretries
  1711.                 Set the maximum number of times to try to send the message.
  1712.                 Default 32.
  1713.         -Ql     Enable SMAIL logging.
  1714.         -QT timeout
  1715.                 Timeout value for filters commands in seconds. Default 90.
  1716.         -Qg     Enable filter logging.
  1717.     [PSYNC]
  1718.         -Yi interval
  1719.                 Set external POP3 accounts sync interval. Setting this to
  1720.                 zero will disable the PSYNC task. Default 120.
  1721.         -Yt nthreads
  1722.                 Set the number of POP3 sync threads.
  1723.         -Yl     Enable PSYNC logging.
  1724.     [FINGER]
  1725.         -Fp port
  1726.                 Set FINGER server port (if you change this you must know
  1727.                 what you're doing).
  1728.         -Fl     Enable FINGER logging.
  1729.         -FI ip[:port]
  1730.                 Bind server to the specified ip address and (optional) port
  1731.                 (can be multiple).
  1732.     [CTRL]
  1733.         -Cp port
  1734.                 Set CTRL server port (if you change this you must know what
  1735.                 you're doing).
  1736.         -Ct timeout
  1737.                 Set CTRL session timeout (seconds) after which the server
  1738.                 closes the connection if no commands are received.
  1739.         -Cl     Enable CTRL logging.
  1740.         -CI ip[:port]
  1741.                 Bind server to the specified ip address and (optional) port
  1742.                 (can be multiple).
  1743.         -CX nthreads
  1744.                 Set the maximum number of threads for CTRL server.
  1745.     [LMAIL]
  1746.         -Ln nthreads
  1747.                 Set the number of local mailer threads.
  1748.         -Lt timeout
  1749.                 Set the sleep timeout for LMAIL threads (in seconds, default
  1750.                 2).
  1751.         -Ll     Enable local mail logging.
  1752.     [top]
  1753. XMAIL ADMIN PROTOCOL
  1754.     It's possible to remote admin XMail due to the existence of a
  1755.     'controller server' that runs with XMail and waits for TCP/IP
  1756.     connections on a port (6017 or tunable via a '-Cp nport') command line
  1757.     option.
  1758.     Admin protocol details:
  1759.     "Description"
  1760.     "Adding a user"
  1761.     "Deleting a user"
  1762.     "Changing a user's password"
  1763.     "Authenticate user"
  1764.     "Retrieve user statistics"
  1765.     "Adding an alias"
  1766.     "Deleting an alias"
  1767.     "Listing aliases"
  1768.     "Listing user vars"
  1769.     "Setting user vars"
  1770.     "Listing users"
  1771.     "Getting mailproc.tab file"
  1772.     "Setting mailproc.tab file"
  1773.     "Adding a mailing list user"
  1774.     "Deleting a mailing list user"
  1775.     "Listing mailing list users"
  1776.     "Adding a domain"
  1777.     "Deleting a domain"
  1778.     "Listing handled domains"
  1779.     "Adding a domain alias"
  1780.     "Deleting a domain alias"
  1781.     "Listing alias domains"
  1782.     "Getting custom domain file"
  1783.     "Setting custom domain file"
  1784.     "Listing custom domains"
  1785.     "Adding a POP3 external link"
  1786.     "Deleting a POP3 external link"
  1787.     "Listing POP3 external links"
  1788.     "Enabling a POP3 external link"
  1789.     "Listing files"
  1790.     "Getting configuration file"
  1791.     "Setting configuration file"
  1792.     "Listing frozen messages"
  1793.     "Rescheduling frozen message"
  1794.     "Deleting frozen message"
  1795.     "Getting frozen message log file"
  1796.     "Getting frozen message"
  1797.     "Starting a queue flush"
  1798.     "Do nothing command"
  1799.     "Quit the connection"
  1800.     "Do you want...?"
  1801.   Description
  1802.     The XMail admin server 'speaks' a given protocol that can be used by
  1803.     external GUI utilities written with the more disparate scripting
  1804.     languages, to remote administer the mail server. The protocol is based
  1805.     on sending formatted command and waiting for formatted server responses
  1806.     and error codes. All the lines, commands, and responses are delimited by
  1807.     a <CR><LF> pair. The error code string (I'll call it RESSTRING) has the
  1808.     given format:
  1809.      "+DDDDD OK"<CR><LF>
  1810.     if the command execution is successful while:
  1811.      "-DDDDD ErrorString"<CR><LF>
  1812.     if the command failed.
  1813.     The " character is not included in responses. DDDDD is a numeric error
  1814.     code while ErrorString is a description of the error. If DDDDD equals
  1815.     00100, a lines list, terminated by a line with a single point
  1816.     (<CR><LF>.<CR><LF>), follows the response.
  1817.     The input format for commands is similar to the one used in TAB files:
  1818.      "cmdstring"[TAB]"param1"[TAB]..."paramN"<CR><LF>
  1819.     where 'cmdstring' is the command string identifying the action to be
  1820.     performed, and param1,... are the parameters of the command.
  1821.     Immediately after the connection with XMail controller server is
  1822.     established the client receives a RESSTRING that is:
  1823.      +00000 <TimeStamp> XMail ...
  1824.     if the server is ready, while:
  1825.      -DDDDD ...
  1826.     (where DDDDDD is an error code) if not.
  1827.     The TimeStamp string has the format:
  1828.      currtime.pid@ipaddress
  1829.     and is used in MD5 authentication procedure.
  1830.     As the first action immediately after the connection the client must
  1831.     send an authentication string with this format:
  1832.      "user"[TAB]"password"<CR><LF>
  1833.     where user must be enabled to remote admin XMail. Clear text
  1834.     authentication should not be used due server security. Using MD5
  1835.     authentication instead, the client must perform an MD5 checksum on the
  1836.     string composed by (<> included):
  1837.      <TimeStamp>password
  1838.     and then send to the server:
  1839.      "user"[TAB]"#md5chksum"<CR><LF>
  1840.     where md5chksum is the MD5 checksum (note '#' as first char of sent
  1841.     digest). The result of the authentication send is a RESSTRING. If the
  1842.     user does not receive a positive authentication response, the connection
  1843.     is closed by the server.
  1844.     [admin protocol] [top]
  1845.   Adding a user
  1846.      "useradd"[TAB]"domain"[TAB]"username"[TAB]"password"[TAB]"usertype"<CR><LF>
  1847.     where:
  1848.     domain
  1849.         domain name (must be handled by the server).
  1850.     username
  1851.         username to add.
  1852.     password
  1853.         user password.
  1854.     usertype
  1855.         'U' for normal user and 'M' for mailing list.
  1856.     The result is a RESSTRING.
  1857.     [admin protocol] [top]
  1858.   Deleting a user
  1859.      "userdel"[TAB]"domain"[TAB]"username"<CR><LF>
  1860.     where:
  1861.     domain
  1862.         domain name (must be handled by the server).
  1863.     username
  1864.         username to delete.
  1865.     The result is a RESSTRING.
  1866.     [admin protocol] [top]
  1867.   Changing a user's password
  1868.      "userpasswd"[TAB]"domain"[TAB]"username"[TAB]"password"<CR><LF>
  1869.     where:
  1870.     domain
  1871.         domain name (must be handled by the server).
  1872.     username
  1873.         username (must exist).
  1874.     password
  1875.         new password.
  1876.     The result is a RESSTRING.
  1877.     [admin protocol] [top]
  1878.   Authenticate user
  1879.      "userauth"[TAB]"domain"[TAB]"username"[TAB]"password"<CR><LF>
  1880.     where:
  1881.     domain
  1882.         domain name.
  1883.     username
  1884.         username.
  1885.     password
  1886.         password.
  1887.     The result is a RESSTRING.
  1888.     [admin protocol] [top]
  1889.   Retrieve user statistics
  1890.      "userstat"[TAB]"domain"[TAB]"username"<CR><LF>
  1891.     where:
  1892.     domain
  1893.         domain name.
  1894.     username
  1895.         username/alias.
  1896.     The result is a RESSTRING. If successful (00100), a formatted matching
  1897.     users list follows terminated by a line containing a single dot
  1898.     (<CR><LF>.<CR><LF>). This is the format of the listing:
  1899.      "variable"[TAB]"value"<CR><LF>
  1900.     Where valid variables are:
  1901.     RealAddress
  1902.         real address (maybe different is the supplied username is an alias).
  1903.     MailboxSize
  1904.         total size of the mailbox in bytes.
  1905.     MailboxMessages
  1906.         total number of messages.
  1907.     LastLoginIP
  1908.         last user login IP address.
  1909.     LastLoginTimeDate
  1910.         time of the last login.
  1911.     [admin protocol] [top]
  1912.   Adding an alias
  1913.      "aliasadd"[TAB]"domain"[TAB]"alias"[TAB]"account"<CR><LF>
  1914.     where:
  1915.     domain
  1916.         domain name (must be handled by the server).
  1917.     alias
  1918.         alias to add.
  1919.     account
  1920.         real email account (locally handled). This can be a fully qualified
  1921.         email address or a username inside the same domain.
  1922.     The result is a RESSTRING.
  1923.     [admin protocol] [top]
  1924.   Deleting an alias
  1925.      "aliasdel"[TAB]"domain"[TAB]"alias"<CR><LF>
  1926.     where:
  1927.     domain
  1928.         domain name (must be handled by the server).
  1929.     alias
  1930.         alias to delete.
  1931.     The result is a RESSTRING.
  1932.     [admin protocol] [top]
  1933.   Listing aliases
  1934.      "aliaslist"[TAB]"domain"[TAB]"alias"[TAB]"account"<CR><LF>
  1935.     or
  1936.      "aliaslist"[TAB]"domain"[TAB]"alias"<CR><LF>
  1937.     or
  1938.      "aliaslist"[TAB]"domain"<CR><LF>
  1939.     or
  1940.      "aliaslist"<CR><LF>
  1941.     where:
  1942.     domain
  1943.         domain name, optional (can contain wild cards).
  1944.     alias
  1945.         alias name, optional (can contain wildcards).
  1946.     account
  1947.         account, optional (can contain wildcards).
  1948.     Example:
  1949.      "aliaslist"[TAB]"foo.bar"[TAB]"*"[TAB]"mickey"<CR><LF>
  1950.     lists all aliases of user 'mickey' in domain 'foo.bar'.
  1951.     The result is a RESSTRING. In successful cases (00100) a formatted
  1952.     matching users list follows, terminated by a line containing a single
  1953.     dot (<CR><LF>.<CR><LF>). This is the format of the listing:
  1954.      "domain"[TAB]"alias"[TAB]"username"<CR><LF>
  1955.     [admin protocol] [top]
  1956.   Adding an external alias
  1957.      "exaliasadd"[TAB]"local-address"[TAB]"remote-address"<CR><LF>
  1958.     where:
  1959.     local-address
  1960.         local email address.
  1961.     remote-address
  1962.         remote email address.
  1963.     For example, the following command string:
  1964.      "exaliasadd"[TAB]"dlibenzi@home.bogus"[TAB]"dlibenzi@xmailserver.org"<CR><LF>
  1965.     will link the external email address 'dlibenzi@xmailserver.org' with the
  1966.     local email address 'dlibenzi@home.bogus'. The result is a RESSTRING.
  1967.     [admin protocol] [top]
  1968.   Deleting an external alias
  1969.      "exaliasdel"[TAB]"remote-address"<CR><LF>
  1970.     where:
  1971.     remote-address
  1972.         remote email address.
  1973.     The result is a RESSTRING.
  1974.     [admin protocol] [top]
  1975.   Listing external aliases
  1976.      "exaliaslist"[TAB]"local-address"[TAB]"remote-address"<CR><LF>
  1977.     or
  1978.      "exaliaslist"[TAB]"local-address"<CR><LF>
  1979.     or
  1980.      "exaliaslist"<CR><LF>
  1981.     where:
  1982.     local-address
  1983.         local email address. This can contain wildcard characters.
  1984.     remote-address
  1985.         remote email address. This can contain wildcard characters.
  1986.     Example:
  1987.      "exaliaslist"[TAB]"*@home.bogus"<CR><LF>
  1988.     lists all the external aliases linked to local accounts in domain
  1989.     'home.bogus'.
  1990.     The result is a RESSTRING. In successful cases (00100) a formatted
  1991.     matching users list follows, terminated by a line containing a single
  1992.     dot (<CR><LF>.<CR><LF>). This is the format of the listing:
  1993.      "rmt-domain"[TAB]"rmt-name"[TAB]"loc-domain"[TAB]"loc-name"<CR><LF>
  1994.     [admin protocol] [top]
  1995.   Listing user vars
  1996.      "uservars"[TAB]"domain"[TAB]"username"<CR><LF>
  1997.     where:
  1998.     domain
  1999.         domain name.
  2000.     username
  2001.         username.
  2002.     The result is a RESSTRING. In successfully cases (00100) a formatted
  2003.     list of user vars follow, terminated by a line containing a single dot
  2004.     (<CR><LF>.<CR><LF>). This is the format of the listing:
  2005.      "varname"[TAB]"varvalue"<CR><LF>
  2006.     [admin protocol] [top]
  2007.   Setting user vars
  2008.      "uservarsset"[TAB]"domain"[TAB]"username"[TAB]"varname"[TAB]"varvalue" ... <CR><LF>
  2009.     where:
  2010.     domain
  2011.         domain name.
  2012.     username
  2013.         username.
  2014.     varname
  2015.         variable name.
  2016.     varvalue
  2017.         variable value.
  2018.     There can be multiple variable assignments with a single call. If
  2019.     'varvalue' is the string '.|rm' the variable 'varname' is deleted. The
  2020.     result is a RESSTRING.
  2021.     [admin protocol] [top]
  2022.   Listing users
  2023.      "userlist"[TAB]"domain"[TAB]"username"<CR><LF>
  2024.     or
  2025.      "userlist"[TAB]"domain"<CR><LF>
  2026.     or
  2027.      "userlist"<CR><LF>
  2028.     where:
  2029.     domain
  2030.         domain name, optional (can contain wild cards).
  2031.     username
  2032.         username, optional (can contain wild cards).
  2033.     Example:
  2034.      "userlist"[TAB]"spacejam.foo"[TAB]"*admin"<CR><LF>
  2035.     lists all users of domain 'spacejam.foo' that end with the word 'admin'.
  2036.     The result are a RESSTRING. If successful (00100), a formatted matching
  2037.     users list follows terminated by a line containing a single dot
  2038.     (<CR><LF>.<CR><LF>). This is the format of the listing:
  2039.      "domain"[TAB]"username"[TAB]"password"[TAB]"usertype"<CR><LF>
  2040.     [admin protocol] [top]
  2041.   Getting mailproc.tab file
  2042.      "usergetmproc"[TAB]"domain"[TAB]"username"<CR><LF>
  2043.     where:
  2044.     domain
  2045.         domain name.
  2046.     username
  2047.         username.
  2048.     Example:
  2049.      "usergetmproc"[TAB]"spacejam.foo"[TAB]"admin"<CR><LF>
  2050.     gets mailproc.tab file for user 'admin' in domain 'spacejam.foo'.
  2051.     The result is a RESSTRING. In successful cases (00100) the mailproc.tab
  2052.     file is listed line by line, terminated by a line containing a single
  2053.     dot (<CR><LF>.<CR><LF>).
  2054.     [admin protocol] [top]
  2055.   Setting mailproc.tab file
  2056.      "usersetmproc"[TAB]"domain"[TAB]"username"<CR><LF>
  2057.     where:
  2058.     domain
  2059.         domain name.
  2060.     username
  2061.         username.
  2062.     Example:
  2063.      "usersetmproc"[TAB]"spacejam.foo"[TAB]"admin"<CR><LF>
  2064.     sets mailproc.tab file for user 'admin' in domain 'spacejam.foo'.
  2065.     The result is a RESSTRING. If successful (00101), the client must list
  2066.     the mailproc.tab file line by line, ending with a line containing a
  2067.     single dot (<CR><LF>.<CR><LF>). If a line of the file begins with a dot,
  2068.     another dot must be added at the beginning of the line. If the file has
  2069.     zero length the mailproc.tab is deleted. The client then gets another
  2070.     RESSTRING indicating the final command result.
  2071.     [admin protocol] [top]
  2072.   Adding a mailing list user
  2073.      "mluseradd"[TAB]"domain"[TAB]"mlusername"[TAB]"mailaddress"[TAB]"perms"<CR><LF>
  2074.     or
  2075.      "mluseradd"[TAB]"domain"[TAB]"mlusername"[TAB]"mailaddress"<CR><LF>
  2076.     where:
  2077.     domain
  2078.         domain name (must be handled by the server).
  2079.     mlusername
  2080.         mailing list username.
  2081.     mailaddress
  2082.         mail address to add to the mailing list 'mlusername@domain'.
  2083.     perms
  2084.         user permissions (R or RW or RA). When 'perms' is not specified the
  2085.         default is RW.
  2086.     The result is a RESSTRING.
  2087.     [admin protocol] [top]
  2088.   Deleting a mailing list user
  2089.      "mluserdel"[TAB]"domain"[TAB]"mlusername"[TAB]"mailaddress"<CR><LF>
  2090.     where:
  2091.     domain
  2092.         domain name (must be handled by the server).
  2093.     mlusername
  2094.         mailing list username.
  2095.     mailaddress
  2096.         mail address to delete from the mailing list 'mlusername@domain'.
  2097.     The result is a RESSTRING.
  2098.     [admin protocol] [top]
  2099.   Listing mailing list users
  2100.      "mluserlist"[TAB]"domain"[TAB]"mlusername"<CR><LF>
  2101.     where:
  2102.     domain
  2103.         domain name (must be handled by the server).
  2104.     mlusername
  2105.         mailing list username.
  2106.     The result is a RESSTRING. If successful (00100), a formatted list of
  2107.     mailing list users follows terminated by a line containing a single dot
  2108.     (<CR><LF>.<CR><LF>).
  2109.     [admin protocol] [top]
  2110.   Adding a domain
  2111.      "domainadd"[TAB]"domain"<CR><LF>
  2112.     where:
  2113.     domain
  2114.         domain name to add.
  2115.     The result is a RESSTRING.
  2116.     [admin protocol] [top]
  2117.   Deleting a domain
  2118.      "domaindel"[TAB]"domain"<CR><LF>
  2119.     where:
  2120.     domain
  2121.         domain name to delete.
  2122.     The result is a RESSTRING. This is not always a safe operation.
  2123.     [admin protocol] [top]
  2124.   Listing handled domains
  2125.      "domainlist"<CR><LF>
  2126.     or:
  2127.      "domainlist"[TAB]"wildmatch0"[TAB]...[TAB]"wildmatchN"<CR><LF>
  2128.     The result is a RESSTRING. The wild match versions simply returns a
  2129.     filtered list of domains. If successful (00100), a formatted list of
  2130.     handled domains follows, terminated by a line containing a single dot
  2131.     (<CR><LF>.<CR><LF>).
  2132.     [admin protocol] [top]
  2133.   Adding a domain alias
  2134.      "aliasdomainadd"[TAB]"realdomain"[TAB]"aliasdomain"<CR><LF>
  2135.     Example:
  2136.      "aliasdomainadd"[TAB]"xmailserver.org"[TAB]"xmailserver.com"<CR><LF>
  2137.     defines 'xmailserver.com' as an alias of 'xmailserver.org', or:
  2138.      "aliasdomainadd"[TAB]"xmailserver.org"[TAB]"*.xmailserver.org"<CR><LF>
  2139.     defines all subdomains of 'xmailserver.org' as alises of
  2140.     'xmailserver.org'.
  2141.     [admin protocol] [top]
  2142.   Deleting a domain alias
  2143.      "aliasdomaindel"[TAB]"aliasdomain"<CR><LF>
  2144.     Example:
  2145.      "aliasdomaindel"[TAB]"*.xmailserver.org"<CR><LF>
  2146.     removes the '*.xmailserver.org' domain alias.
  2147.     [admin protocol] [top]
  2148.   Listing alias domains
  2149.      "aliasdomainlist"<CR><LF>
  2150.     or:
  2151.      "aliasdomainlist"[TAB]"wild-dom-match"<CR><LF>
  2152.     or:
  2153.      "aliasdomainlist"[TAB]"wild-dom-match"[TAB]"wild-adom-match"<CR><LF>
  2154.     The result is a RESSTRING. The wild match version simply returns a
  2155.     filtered list of alias domains. If successful (00100), a formatted list
  2156.     of alias domains follows, terminated by a line containing a single dot
  2157.     (<CR><LF>.<CR><LF>). The output format is:
  2158.      "real-domain"[TAB]"alias-domain"<CR><LF>
  2159.     [admin protocol] [top]
  2160.   Getting custom domain file
  2161.      "custdomget"[TAB]"domain"<CR><LF>
  2162.     where:
  2163.     domain
  2164.         domain name.
  2165.     Example:
  2166.      "custdomget"[TAB]"spacejam.foo"<CR><LF>
  2167.     gets the custom domain file for domain 'spacejam.foo'.
  2168.     The result is a RESSTRING. If successful (00100), the custom domain file
  2169.     is listed line by line terminated by a line containing a single dot
  2170.     (<CR><LF>.<CR><LF>).
  2171.     [admin protocol] [top]
  2172.   Setting custom domain file
  2173.      "custdomset"[TAB]"domain"<CR><LF>
  2174.     where:
  2175.     domain
  2176.         domain name.
  2177.     Example:
  2178.      "custdomset"[TAB]"spacejam.foo"<CR><LF>
  2179.     sets custom domain file for domain 'spacejam.foo'.
  2180.     The result is a RESSTRING. If successful (00101), the client must list
  2181.     the custom domain file line by line, ending with a line containing a
  2182.     single dot (<CR><LF>.<CR><LF>). If a line of the file begins with a dot,
  2183.     another dot must be added at the begin of the line. If the file has zero
  2184.     length the custom domain file is deleted. The client then gets another
  2185.     RESSTRING indicating the final command result.
  2186.     [admin protocol] [top]
  2187.   Listing custom domains
  2188.      "custdomlist"<CR><LF>
  2189.     The result is a RESSTRING. If successful (00100), a formatted list of
  2190.     custom domains follows, terminated by a line containing a single dot
  2191.     (<CR><LF>.<CR><LF>).
  2192.     [admin protocol] [top]
  2193.   Adding a POP3 external link
  2194.      "poplnkadd"[TAB]"loc-domain"[TAB]"loc-username"[TAB]"extrn-domain"=>
  2195.        [TAB]"extrn-username"[TAB]"extrn-password"[TAB]"authtype"<CR><LF>
  2196.     where:
  2197.     loc-domain
  2198.         local domain name (must be handled by the server).
  2199.     loc-username
  2200.         local username which receives mails.
  2201.     extrn-domain
  2202.         external domain.
  2203.     extrn-username
  2204.         external username.
  2205.     extrn-password
  2206.         external user password.
  2207.     authtype
  2208.         authentication method ('CLR' = USER/PASS auth 'APOP' = APOP auth).
  2209.     The remote server must support 'APOP' authentication to specify APOP as
  2210.     authtype. Using APOP authentication is more secure because clear
  2211.     usernames and passwords do not travel on the network; if you're not sure
  2212.     about it, specify 'CLR' as authtype.
  2213.     The result is a RESSTRING.
  2214.     [admin protocol] [top]
  2215.   Deleting a POP3 external link
  2216.      "poplnkdel"[TAB]"loc-domain"[TAB]"loc-username"[TAB]"extrn-domain"=>
  2217.        [TAB]"extrn-username"<CR><LF>
  2218.     where:
  2219.     loc-domain
  2220.         local domain name (must be handled by the server).
  2221.     loc-username
  2222.         local username which receives mails.
  2223.     extrn-domain
  2224.         external domain.
  2225.     extrn-username
  2226.         external username.
  2227.     The result is a RESSTRING.
  2228.     [admin protocol] [top]
  2229.   Listing POP3 external links
  2230.      "poplnklist"[TAB]"loc-domain"[TAB]"loc-username"<CR><LF>
  2231.     or
  2232.      "poplnklist"[TAB]"loc-domain"<CR><LF>
  2233.     or
  2234.      "poplnklist"<CR><LF>
  2235.     The result is a RESSTRING. If successful (00100), a formatted list of
  2236.     handled domains follows, terminated by a line containing a single dot
  2237.     (<CR><LF>.<CR><LF>). The format of the listing is:
  2238.      "loc-domain"[TAB]"loc-username"[TAB]"extrn-domain"[TAB]"extrn-username"=>
  2239.        [TAB]"extrn-password"[TAB]"authtype"[TAB]"on-off"<CR><LF>
  2240.     [admin protocol] [top]
  2241.   Enabling a POP3 external link
  2242.      "poplnkenable"[TAB]"enable"[TAB]"loc-domain"[TAB]"loc-username"=>
  2243.        [TAB]"extrn-domain"[TAB]"extrn-username"<CR><LF>
  2244.     or
  2245.      "poplnkenable"[TAB]"enable"[TAB]"loc-domain"[TAB]"loc-username"<CR><LF>
  2246.     where:
  2247.     enable
  2248.         1 for enabling - 0 for disabling.
  2249.     loc-domain
  2250.         local domain name.
  2251.     loc-username
  2252.         local username which receives mails.
  2253.     extrn-domain
  2254.         external domain.
  2255.     extrn-username
  2256.         external username.
  2257.     In the second format all users, links are affected by the enable
  2258.     operation.
  2259.     The result is a RESSTRING.
  2260.     [admin protocol] [top]
  2261.   Listing files
  2262.      "filelist"[TAB]"relative-dir-path"[TAB]"match-string"<CR><LF>
  2263.     where:
  2264.     relative-dir-path
  2265.         path relative to MAIL_ROOT path.
  2266.     match-string
  2267.         wild card match string for file list selection.
  2268.     The result is a RESSTRING. If successful (00100), the directory is
  2269.     listed line by line, terminated by a line containing a single dot
  2270.     (<CR><LF>.<CR><LF>). The listing format is:
  2271.     "filename"[TAB]"filesize"<CR><LF>
  2272.     [admin protocol] [top]
  2273.   Getting configuration file
  2274.      "cfgfileget"[TAB]"relative-file-path"<CR><LF>
  2275.     where:
  2276.     relative-file-path
  2277.         path relative to MAIL_ROOT path.
  2278.     Example:
  2279.      "cfgfileget"[TAB]"ctrlaccounts.tab"<CR><LF>
  2280.     The result is a RESSTRING. If successful (00100), the file is listed
  2281.     line by line, terminated by a line containing a single dot
  2282.     (<CR><LF>.<CR><LF>). You CANNOT use this command with indexed files !
  2283.     [admin protocol] [top]
  2284.   Setting configuration file
  2285.      "cfgfileset"[TAB]"relative-file-path"<CR><LF>
  2286.     where:
  2287.     relative-file-path
  2288.         path relative to MAIL_ROOT path.
  2289.     Example:
  2290.      "cfgfileset"[TAB]"ctrlaccounts.tab"<CR><LF>
  2291.     The result is a RESSTRING. IF successful (00101), the client must list
  2292.     the configuration file line by line, ending with a line containing a
  2293.     single dot (<CR><LF>.<CR><LF>). If a line of the file begins with a dot,
  2294.     another dot must be added at the beginning of the line. If the file has
  2295.     zero length the configuration file is deleted. The client then gets
  2296.     another RESSTRING indicating the final command result. Remember that
  2297.     configuration files have a strict syntax and that pushing a incorrect
  2298.     one can make XMail not work properly. You CANNOT use this command with
  2299.     indexed files!
  2300.     [admin protocol] [top]
  2301.   Listing frozen messages
  2302.      "frozlist"<CR><LF>
  2303.     The result is a RESSTRING. If successful (00100), a formatted list of
  2304.     frozen messages follows, terminated by a line containing a single dot
  2305.     (<CR><LF>.<CR><LF>). The format of the listing is:
  2306.      "msgfile"[tab]"lev0"[TAB]"lev1"[TAB]"from"[TAB]"to"[TAB]"time"[TAB]"size"<CR><LF>
  2307.     Where:
  2308.     msgfile
  2309.         message name or id.
  2310.     lev0
  2311.         queue fs level 0 (first level directory index).
  2312.     lev1
  2313.         queue fs level 1 (second level directory index).
  2314.     from
  2315.         message sender.
  2316.     to  message destination.
  2317.     time
  2318.         message time ("YYYY-MM-DD HH:MM:SS").
  2319.     size
  2320.         message size in bytes.
  2321.     [admin protocol] [top]
  2322.   Rescheduling frozen message
  2323.      "frozsubmit"[TAB]"lev0"[TAB]"lev1"[TAB]"msgfile"<CR><LF>
  2324.     where:
  2325.     msgfile
  2326.         message name or id.
  2327.     lev0
  2328.         queue fs level 0 (first level directory index).
  2329.     lev1
  2330.         queue fs level 1 (second level directory index).
  2331.     You can get this information from the frozlist command. After a message
  2332.     has been successfully rescheduled it is deleted from the frozen fs path.
  2333.     The result is a RESSTRING.
  2334.     [admin protocol] [top]
  2335.   Deleting frozen message
  2336.      "frozdel"[TAB]"lev0"[TAB]"lev1"[TAB]"msgfile"<CR><LF>
  2337.     where:
  2338.     msgfile
  2339.         message name or id.
  2340.     lev0
  2341.         queue fs level 0 (first level directory index).
  2342.     lev1
  2343.         queue fs level 1 (second level directory index).
  2344.     You can get this information from the frozlist command. The result is a
  2345.     RESSTRING.
  2346.     [admin protocol] [top]
  2347.   Getting frozen message log file
  2348.      "frozgetlog"[TAB]"lev0"[TAB]"lev1"[TAB]"msgfile"<CR><LF>
  2349.     where:
  2350.     msgfile
  2351.         message name or id.
  2352.     lev0
  2353.         queue fs level 0 (first level directory index).
  2354.     lev1
  2355.         queue fs level 1 (second level directory index).
  2356.     You can get this information from the frozlist command. The result is a
  2357.     RESSTRING. If successful (00100), the frozen message log file follows,
  2358.     terminated by a line containing a single dot (<CR><LF>.<CR><LF>).
  2359.     [admin protocol] [top]
  2360.   Getting frozen message
  2361.      "frozgetmsg"[TAB]"lev0"[TAB]"lev1"[TAB]"msgfile"<CR><LF>
  2362.     where:
  2363.     msgfile
  2364.         message name or id.
  2365.     lev0
  2366.         queue fs level 0 (first level directory index).
  2367.     lev1
  2368.         queue fs level 1 (second level directory index).
  2369.     You can get this information from the frozlist command. The result is a
  2370.     RESSTRING. If successful (00100), the frozen message file follows,
  2371.     terminated by a line containing a single dot (<CR><LF>.<CR><LF>).
  2372.     [admin protocol] [top]
  2373.   Starting a queue flush
  2374.      "etrn"[TAB]"email-match0"...<CR><LF>
  2375.     where:
  2376.     email-match0
  2377.         wild card email matching for destination address.
  2378.     Example:
  2379.      "etrn"  "*@*.mydomain.com"  "your-domain.org"
  2380.     starts queueing all messages with a matching destination address.
  2381.     [admin protocol] [top]
  2382.   Do nothing command
  2383.     "noop"<CR><LF>
  2384.     The result is a RESSTRING.
  2385.     [admin protocol] [top]
  2386.   Quit the connection
  2387.      "quit"<CR><LF>
  2388.     The result is a RESSTRING.
  2389.     [admin protocol] [top]
  2390.   Do you want...?
  2391.     Do you want to build GUI configuration tools using common scripting
  2392.     languages (Java, TCL/Tk, etc) and XMail controller protocol? Do you want
  2393.     to build Web configuration tools? Please let me know
  2394.     <davidel@xmailserver.org>.
  2395.     [admin protocol] [top]
  2396. XMAIL LOCAL MAILER
  2397.     XMail has the ability to deliver locally prepared mail files that if
  2398.     finds in the 'spool/local' directory. The format of these files is
  2399.     strict:
  2400.      mail from:<...>[CR][LF]
  2401.      rcpt to:<...>[CR][LF]
  2402.      ...
  2403.      [CR][LF]
  2404.      message text in RFC822 format with [CR][LF] line termination
  2405.     All lines must be [CR][LF] terminated, with one mail-from statement, one
  2406.     or more rcpt-to statements, an empty line and the message text. Mail
  2407.     files must not be created directly inside the '/spool/local' directory
  2408.     but instead inside '/spool/temp' directory. When the file is prepared it
  2409.     has to be moved into '/spool/local'. The file name format is:
  2410.      stime-seqnr.pid.hostname
  2411.     where:
  2412.     stime
  2413.         system time in sec from 01/01/1970.
  2414.     seqnr
  2415.         sequence number for the current file.
  2416.     pid process or thread id.
  2417.     hostname
  2418.         creator process host name.
  2419.     Example:
  2420.      97456928-001.7892.home.bogus
  2421.     XMail has a number of LMAIL threads that periodically scan the
  2422.     '/spool/local' directory watching for locally generated mail files. You
  2423.     can tune this number of threads with the '-Ln nthreads' command line
  2424.     option. The suggested number ranges from three to seven.
  2425.     [top]
  2426. CtrlClnt (XMAIL ADMINISTRATION)
  2427.     You can use CtrlClnt to send administration commands to XMail. These
  2428.     commands are defined in the previous section ("XMAIL ADMIN PROTOCOL").
  2429.     The syntax of CtrlClnt is:
  2430.      CtrlClnt  [-snuptf]  ...
  2431.     where:
  2432.     -s server
  2433.         set server address.
  2434.     -n port
  2435.         set server port [6017].
  2436.     -u user
  2437.         set username.
  2438.     -p pass
  2439.         set password.
  2440.     -t timeout
  2441.         set timeout [60].
  2442.     -f filename
  2443.         set dump filename [stdout].
  2444.     With the command and parameters that follow adhering to the command
  2445.     syntax, ie:
  2446.      CtrlClnt  -s mail.foo.org -u davide.libenzi -p ciao=>
  2447.        useradd home.bogus foouser foopasswd U
  2448.     executes the command useradd with parameters 'home.bogus foouser
  2449.     foopasswd U'.
  2450.     CtrlClnt returns 0 if the command is successful and != 0 if not. If the
  2451.     command is a query, then the result is printed to stdout.
  2452.     [top]
  2453. SERVER SHUTDOWN
  2454.     [Linux]
  2455.         Under Linux, XMail creates a file named XMail.pid in '/var/run' that
  2456.         contains the PID of the main XMail thread. By issuing a:
  2457.          kill -INT `cat /var/run/XMail.pid`
  2458.         a system administrator can initiate the shutdown process (this can
  2459.         take several seconds). You can use the supplied 'xmail' startup
  2460.         script to start / stop / restart XMail:
  2461.          xmail start / stop / restart
  2462.     [NT as console service]
  2463.         Under NT console service (XMail --debug ...) you can hit Ctrl-C to
  2464.         initiate the shutdown process.
  2465.     [NT as service]
  2466.         Using [Control Panel]->[Services] you can start and stop XMail as
  2467.         you wish.
  2468.     [All]
  2469.         XMail detects a shutdown condition by checking the presence of a
  2470.         file named '.shutdown' in its main directory (MAIL_ROOT). You can
  2471.         initiate XMail shutdown process by creating (or copying) a file with
  2472.         that name into MAIL_ROOT.
  2473.     [top]
  2474. MkUsers
  2475.     This command line utility enables you to create the user accounts
  2476.     structure by giving it a formatted list of users parameters (or a
  2477.     formatted text file). The syntax of the list (or file) is:
  2478.      domain;username;password;real-name;homepage[NEWLINE]
  2479.     where a line whose first character is '#' is treated as a comment. This
  2480.     utility can also be used to create a random number users (useful for me
  2481.     to test server performance).
  2482.     These are MkUsers command line parameters:
  2483.     -a numusers
  2484.         number of users to create in auto-mode.
  2485.     -d domain
  2486.         domain name in auto-mode.
  2487.     -f inputFile
  2488.         input file name {stdin}.
  2489.     -u username
  2490.         radix user name in auto-mode.
  2491.     -r rootdir
  2492.         mail root path {./}.
  2493.     -s mboxsize
  2494.         mailbox maximum size {10000}.
  2495.     -i useridbase
  2496.         base user id {1};
  2497.     -m  create Maildir boxes.
  2498.     -h  show this message.
  2499.     MkUsers creates, under the specified root directory, the given
  2500.     structure:
  2501.      rootdir            <dir>
  2502.        mailusers.tab    <file>
  2503.        domains          <dir>
  2504.          domainXXX      <dir>
  2505.            userXXX      <dir>
  2506.              user.tab   <file>
  2507.              mailbox    <dir>
  2508.            ...
  2509.         ...
  2510.     for the mailbox structure, while:
  2511.      rootdir            <dir>
  2512.        mailusers.tab    <file>
  2513.        domains          <dir>
  2514.          domainXXX      <dir>
  2515.            userXXX      <dir>
  2516.              user.tab   <file>
  2517.              Maildir    <dir>
  2518.                tmp      <dir>
  2519.                new      <dir>
  2520.                cur      <dir>
  2521.            ...
  2522.          ...
  2523.     for the Maildir structure.
  2524.     If the file 'mailusers.tab' already exist in the mail root path, MkUsers
  2525.     exits without overwriting the existing copy. This protect you from
  2526.     accidentally overwriting your file when playing inside the real
  2527.     MAIL_ROOT directory. If you want to setup the root directory (-r ...) as
  2528.     MAIL_ROOT, you must delete by hand the existing file (you must know what
  2529.     you're doing). If you setup the root directory (-r ...) as MAIL_ROOT you
  2530.     MUST have XMail stopped before running MkUsers. Existing files and
  2531.     directories are not overwritten by MkUsers so you can keep your users db
  2532.     in the formatted text file (or generate it by a database dump for
  2533.     example) and run MkUsers to create the structure. Remember that you have
  2534.     to add new domains in the 'domains.tab' file by hand. MkUsers is
  2535.     intended as a bulk-mode utility, not to create single user; for this
  2536.     CtrlClnt (or other GUI/Web configuration utilities) is better suited.
  2537.     [top]
  2538. sendmail
  2539.     When building XMail, an executable called 'sendmail' is created. This is
  2540.     a replacement of the sendmail program used mostly on Unix systems; it
  2541.     uses the local mail delivery of XMail to send email generated onto the
  2542.     server machine. These sendmail options are supported (other options are
  2543.     simply ignored):
  2544.     -f{mail from}
  2545.         Set the sender of the email.
  2546.     -F{ext mail from}
  2547.         Set the extended sender of the email.
  2548.     -t  Extract recipients from the 'To:'/'Cc:'/'Bcc:' header tags.
  2549.     -i  Read the input until the End Of Stream, instead of stopping at the
  2550.         "n.n" sequence.
  2551.     The syntax is:
  2552.      sendmail [-t] [-f...] [-F...] [--input-file fname] [--xinput-file fname]=>
  2553.        [--rcpt-file fname] [--] recipient ...
  2554.     The message content is read from the standard input and must be RFC
  2555.     compliant.
  2556.     The following parameters are XMail extensions meant to be used with
  2557.     mailing lists managers (using sendmail as a mail list exploder):
  2558.     --input-file fname
  2559.         take the message from the specified file instead from stdin (RFC
  2560.         format).
  2561.     --xinput-file fname
  2562.         take the message from the specified file instead from stdin (XMail
  2563.         format).
  2564.     --rcpt-file fname
  2565.         add recipients listed inside the specified file (list exploder).
  2566.     To be RFC compliant means that the message MUST have the format:
  2567.      [Headers]
  2568.      NewLine
  2569.      Body
  2570.     Suppose you have your message in the file 'msg.txt', you're
  2571.     'xmailuser@smartdomain', and you want to send the message to
  2572.     'user1@dom1' and 'user2@dom2'. The syntax is:
  2573.      sendmail -fxmailuser@smartdomain user1@dom1 user2@dom2 < msg.txt
  2574.     or
  2575.      sendmail -fxmailuser@smartdomain --input-file msg.txt user1@dom1 user2@dom2
  2576.     [top]
  2577. MISCELLANEOUS
  2578.     1.  To handle multiple POP3 domains, the server makes a reverse lookup
  2579.         of the IP address upon which it receives the connection. Suppose the
  2580.         reverse lookup results in 'xxxx.yyyy.zzzz'. XMail checks if
  2581.         'xxxx.yyyy.zzzz' is handled, then it checks 'yyyy.zzzz', and then
  2582.         'zzzz'. The first resolved (in the given order) is the POP3 domain.
  2583.         To avoid the above behavior, it's sufficient that the POP3 client
  2584.         supply the entire email address as POP3 login username:
  2585.          foo@foodomain.net   ==> foo@foodomain.net
  2586.         and not:
  2587.          foo@foodomain.net   ==> foo
  2588.         This enables XMail to handle multiple domains in cases where more
  2589.         nic-names are mapped over a single IP address.
  2590.         To run finger queries you must specify:
  2591.          foo@foodomain.net@foodomain.net
  2592.         or as general rule:
  2593.          username@pop3domain@hostname
  2594.         You can use the optional configuration variable 'POP3Domain' (see
  2595.         "SERVER.TAB VARIABLES" above) to set the default domain for POP3
  2596.         clients connections. This means that users of 'POP3Domain' can use
  2597.         only the name part of their email address as POP3 login, while users
  2598.         of other hosted domains must use their entire email as POP3 login.
  2599.     2.  Important!
  2600.         *       'REMEMBER TO REMOVE THE EXAMPLE ACCOUNT FROM
  2601.                 CTRLACCOUNTS.TAB FILE!'
  2602.         *       Use ctrl.ipmap.tab to restrict CTRL server access.
  2603.         *       Use a long password (mixed upper/lower case with digits) for
  2604.                 ctrlaccounts.tab.
  2605.     3.  The main cause of bugs with XMail is due a bad line termination of
  2606.         configuration files, so check that these files being correctly line
  2607.         terminated for your OS. Linux uses the standard <CR> while M$ uses
  2608.         <CR><LF>.
  2609.     4.  If you get a bind error in Linux,you must comment pop3, smtp and
  2610.         finger entries in your /etc/inetd.conf.
  2611.     5.  Remember to compile the file CTRL.IPMAP.TAB to restrict the access
  2612.         to the IPs you use to remote administer XMail server.
  2613.     6.  If you have an heavily loaded server remember to setup the best
  2614.         number of XMAIL threads by specifying the '-Qn nthreads' option (you
  2615.         must do some tentatives to find the best value for your needs). Also
  2616.         you can limit the number of SMTP, POP3 and CTRL service threads by
  2617.         specifying the options '-SX maxthreads', '-PX maxthreads' and '-CX
  2618.         maxthreads'.
  2619.     7.  If you have enabled logging, remember to setup the '-Mr hours'
  2620.         option depending on the traffic you get in your server. This avoids
  2621.         XMail having to work with very large log files and can improve
  2622.         server performance.
  2623.     8.  If you are unable to start XMail (even if you followed this
  2624.         document's instructions), check the MailRoot directory with the one
  2625.         listed above. More than one unzipper does not restore empty
  2626.         directories by default.
  2627.     Please report XMail errors and errors in this document. If you
  2628.     successfully build and run XMail please let me know at
  2629.     davidel@xmailserver.org, I don't want money ;)
  2630.     [top]
  2631. KNOWN BUGS
  2632.     Version 0.1 (Alpha-1):
  2633.     0.1-001 Linux (FIXED)
  2634.         SMail threads don't wake up upon a release semaphore by SMTP
  2635.         threads.
  2636.     0.27-001 Windows
  2637.         Using XMail inside a net that use MS Proxy Server 2.0 cause XMail to
  2638.         fail in sending UDP packets for DNS MX queries (due to a bug of
  2639.         WS2_32.DLL linked to MS Proxy 2.0). I don't know if more recent
  2640.         versions of MS Proxy fixes this bug. To makes XMail work in such
  2641.         environment you can use 'DefaultSMTPGateways' option in 'SERVER.TAB'
  2642.         (see "SERVER.TAB VARIABLES" above) to use smart SMTP hosts. Or
  2643.         better still, strip away MS Proxy server and setup a cheap PC
  2644.         running Linux + IP-Masquerading that cost exactly 0.0 $ and works
  2645.         great. Or use 'SmartDNSHost' configuration to redirect recursion
  2646.         queries to a DNS smart host that support TCP and recursion.
  2647.     [top]
  2648. THANKS
  2649.     My mother Adelisa, for giving me the light.
  2650.     My cat Grace, for her patience waiting for food while I'm coding.
  2651.     All of the free source community, for giving me code and knowledge.
  2652.     [top]