Some of the features available in this package
1. svctool
A simple tool with command-line options which helps you to configure any configuration item in indimail
(creation of supervise scripts, qmail configuration, installation of all default MySQL tables, creation
of default aliases, users, etc)
2. configurable control files directory (using CONTROLDIR environment variable) (allows one to have multiple
running copies of qmail using a single binary installation)
3. configurable queue directory (using QUEUEDIR environment variable) (allows one to have multiple queues on a host
with a single qmail installation).
qmail-multi (queue load balancer) uses qmail-queue to deposit mails across multiple queues. Each queue has its
own qmail-send process.
You can spread the individual queues across multiple filesystems on different controllers to maximize on IO
throughput.
The number of queues is configurable by three environment variables QUEUE_BASE, QUEUE_COUNT, and QUEUE_START.
A queue in indimail is defined as a collection of multiple queues. Each queue in the collection can have one or
more SMTP listener but a single delivery (qmail-send) processes. It is possible to have the entire queue collection
without a delivery process (e.g. SMTP on port 366 ODMR). The QUEUE_COUNT can be defined based on how powerful your
host is (IO bandwidth, etc).
4. uses getpwnam to use uids/gids, home from /etc/passwd, /etc/group (allows me to transfer the binary to another
machine regardless of the ids in /etc/passwd)
5. Hooks into local and remote deliveries
QMAILLOCAL - Run executable defined by this instead of qmail-local (qmail-local)
QMAILREMOTE - Run executable defined by this instead of qmail-remote (qmail-remote)
Theoretically one can exploit QMAILLOCAL, QMAILREMOTE variables to route mails for a domain across multiple mail
stores.
6. Hook into qmail-remote's routing by using SMTPROUTE environment variable.
Ability to do User Based Routing via SMTPROUTE environment.
This gives the ability to split a domain across multiple hosts without using NFS to mount multiple filesystems
on any host. One can even use a shell script, set the environment variable and deliver mails to users across
multiple hosts. I call this dynamic SMTPROUTE. Additionally qmail-rspawn has the ability to connect to MySQL
and set SMTPROUTES based on values in a MySQL table. The connection to MySQL is kept open. This gives qmail-rspawn
to do high speed user lookups in MySQL and to deliver the mail for a single domain split across multiple mail
stores.
7. Proxy for IMAP and POP3. Allows IMAP/POP3 protocol for users in a domain to be split across multiple hosts. Also
allows seamless integration of proprietary email servers with indimail. The proxy is generic and works with any
IMAP/POP3 server. The proxy comes useful when you want to move out of a headache causing mail server like x-change
and want to retain the same domain on the propreitary server. In conjunction with dynamic SMTPROUTES, you can
migrate all your users to indimail, without any downtime/disruption to email service. The proxy and dynamic
SMTPROUTES allow you to scale your email server horizontally with using NFS across geopraphical locations.
8. ETRN, ATRN, ODMR (RFC 2645) support
9. accesslist - restrictions between mail transactions between email ids (you can decide who can send mails to whom)
10. bodycheck - checks on header/body on incoming emails (for spam, virus security and other needs)
11. hostaccess - provides domain, IP address pair access list control. e.g. you can define from which set of addresses
mail from yahoo.com will be accepted.
12. chkrcptdomains - rcpt check on selective domains
13. envrules - recipient/sender based set or unset environment variables (qmail-smtpd, qmail-inject, qmail-local,
qmail-remote) any variables which controls the behaviour of qmail-smtpd, qmail-inject, qmail-local,
qmail-remote e.g. NODNSCHECKS, DATABYTES, RELAYCLIENT, BADMAILFROM, etc can be defined individually for a
particular recipient or sender rather than only in the run file
14. NULLQUEUE, qmail-nullqueue (blackhole support - like qmail-queue but mails go into a blackhole). I typically uses
this in conjuction with envrules to trash the mail into blackhole without spending any disk IO.
15. qmail-multi - run multiple filters (qmail-smtpd) (something like qmail-qfilter). Also distributes mails across
multiple queues to do a load balancing act. qmail-multi allowed me to process massive rate of incoming mails
at my earlier job with a ISP.
16. envheaders - Any thing defined here e.g. Return-Path, qmail-queue sets Return-Path as an environment variable with
the value found in Return-Path header in the email. This environment variable gets passed across the queue and is
also available to qmail-local, qmail-remote
17. logheaders - Any header defined in this control file, gets written to file descriptor 2 with the value found in the
18. removeheaders - Any header defined here, qmail-queue will remove that header from the email
19. quarantine or QUARANTINE env variable causes qmail-queue to replace the recipient list with the value defined in
the control file or the environment variable. Additionally an environment variable X-Quarantine-ID: is set which
holds the orignal recipient list.
20. Added ability in qmail-queue to do line processing. Line processing allows qmail-queue to do some of the stuff
mentioned above
21. plugins support for QHPSI interface (qmail-queue). qmail-queue will use dlopen to load any shared objected defined
by PLUGINDIR environment. Multiple plugins can be loaded. For details see man qmail-queue
22. Message Submission Port (port 587) RFC 2476
23. Integrated Authenticted SMTP with Indimail (PLAIN, LOGIN, CRAM-MD5, pop-bef-smtp)
24. duplicate eliminator using 822header
25. qmail-remote has configurable TCP timeout table (max_tolerance, min_backoff periods can be configured in
smtproutes)
26. Ability to change concurrency of tcpserver without restarting tcpserver
27. Ability to restrict connections per IP
28. multilog replaced buffer funtions with substdio
29. supervise can run script shutdown if present (when svc -d is issued)
30. rfc3834 compliance for qmail-autoresponder (provide Auto-Submitted, In-Reply-To, References fields (RFC 3834))
31. ability to add stupid disclaimer(s) to messages.
32. InLookup serves as a high performance user lookup daemon for qmail-smtpd (rcpt checks, authenticated SMTP,
RELAY check).
Even the IMAP, POP3 authentication gets served by inlookup. inlookup preforks configurable number of daemons which
opens multiple connections to MySQL and keep the connection open.
This gives inlookup a decent database performance when handling millions of lookups in few hours. Programs like
qmail-smtpd use a fifo to communicate with inlookup
33. CHKRECIPIENT extension which rejects users not found in local MySQL or recipients.cdb database
34. indisrvr
Was written to ease mail server administration across multiple hosts. Allows ones to create, delete, modify users
and run any command as defined in variables.c. indisrvr listens on a AF_INET socket.
35. Identation of djb's code (using indent) so that a mortal like me could understand it :)
36. Works with Upstart - Upstart is an event-based replacement for the init daemon (http://www.upstart.ubuntu.com)
37. Changed buffer libraries in daemontools to substdio.
38. Can work with external virus scanners (QHPSI, or Len Budney's qscanq)
39. Compiles on Mac OS X Version 10.5.4 (have not been able to test yet)
40. qmail-queue custom error patch by Flavio Curti <fcu-software at no-way.org>
41. Domainkey-Signature, DKIM-Signature with ADSP/SSP
42. Greylisting Capability - http://www.gossamer-threads.com/lists/qmail/users/136740?page=last
43. nssd - Name Service Switch daemon which extends systems password database to lookup IndiMail's database for authentication
44. pam-multi - Generic PAM which allows external program using PAM to authenticate against IndiMail's database.
45. Post Execution Handle - Allows extending indimail's functionality by writing simple scripts/programs
46. Updated man pages.