Download Latest Version README.md (16.4 kB)
Email in envelope

Get an email when there's a new version of IndiMail

Home / old-files / indimail-2.0
Name Modified Size InfoDownloads / Week
Parent folder
README 2017-03-20 23.5 kB
CREDITS 2017-03-16 9.0 kB
indimail-2.0.tar.gz 2017-03-16 8.2 MB
RELEASE-Notes-2.0 2017-03-16 13.6 kB
INSTALL-MYSQL-2.0 2017-03-16 6.7 kB
INSTALL-MINI 2017-03-16 5.4 kB
COPYING 2017-03-16 35.1 kB
INSTALL-2.0 2017-03-16 93.8 kB
INSTALL-RPM-2.0 2017-03-16 7.0 kB
README-CLUSTER 2017-03-16 10.3 kB
indimail-2.0-rpmlintrc 2017-03-05 1.0 kB
Totals: 11 Items   8.4 MB 0
INTRODUCTION
------------

IndiMail is a messaging Platform built upon by using/modifying multiple packages like

qmail,
serialmail,
qmailanalog,
dotforward,
fastforward,
mess822,
daemontools,
ucspi-tcp,
logalert,
Courier IMAP/POP3, (you can use any IMAP/POP3 server which supports PAM)
Bogofilter - A Bayesian Spam Filter,
Clam AntiVirus - GPL anti-virus toolkit for UNIX,
Fetchmail,
and other useful utilities (mpack, unpack, altermime, ripmime, fortune, flash).

IndiMail also provides programs to manage virtual domains. IndiMail allows extending a domain
across multiple servers. IndiMail can act as an SMTP router/interceptor. This is a very
powerful feature which allows IndiMail to provide native horizontal scalability. It knows the
location of each and every user and can distribute mails for any user residing on any server
located anywhere on the net. If one uses IndiMail, one can simply add one more server and cater
to more users without changing any configuration, software or hardware on existing servers.
The architecture allows IndiMail to do away with costly NAS storage (i.e you don't require a
common shared storage across servers). This allows you to scale IndiMail easily to serve
millions of users using commodity hardware. You can read the feature list to get an idea of
the changes and new features that have been added over the original packages.

You can see a pictorial representation of the architecture at

http://en.wikipedia.org/wiki/File:Indimail_arch.png

IndiMail allows servers to be distributed anywhere geographically. This is useful especially
if you have users at different parts of the globe. e.g. Your Brazil users can have their
server located in Brazil, Bombay users in Bombay, Delhi users in Delhi. And yet when your
Brazil users comes to Delhi for a visit, he or she can access all emails sitting in Delhi by
accessing the Delhi server. IndiMail provides this distributed feature using proxies for SMTP,
IMAP and POP3 protocols. The proxy servers run using ucspi-tcp and are by default configured
under supervise. You can use any IMAP/POP3 server behind the proxy. You can extend the domain
across multiple servers without using any kind of NAS storage.

The ability of IndiMail to know user's location also allows IndiMail to setup a heterogeneous
messaging environment. If you have IndiMail, you can have a server running MS exchange, few
servers running IBM Lotus Notes, and few servers running IndiMail and all using a single
domain. A utility called 'hostcntrl' allows you to add foreign users to IndiMail's database.
This feature also allows you to migrate your users from a proprietary platform to IndiMail
without causing downtime or disruption to existing users. In fact, this method has been
used very successfully in migrating corporate users out of MS Exchange & IBM Lotus Notes to
IndiMail without the end users realizing it.

To migrate from an existing proprietary mail server like MS Exchange requires 5 steps.

1.You simply set up a new installation with IndiMail and create the existing domain using
  vadddomain.
2.Add the IP address of the Exchange Server in host_table and the SMTP port of the Exchange
  Server in the table smtp_port
3.Add users on the exchange server to a table called hostcntrl (either manually or using the
  utility hostcntrl).
4.Modify your user's mail configuration to use SMTP, IMAP Proxy, POP3 Proxy on the IndiMail
  server (proxypop3, proxyimap)
5.Change the MX to point to the IndiMail server.

IndiMail is highly configurable. No hardcoded directories like /var/qmail/control or
/var/qmail/queue. All directories are configurable at run time. IndiMail has multiple queues
and the queue destination directories are also configurable. You can have one IndiMail
installation cater to multiple instances having different properties / configuration. 
To setup a new IndiMail instance, requires you to just set few environment variables. Unlike
qmail/netqmail, IndiMail doesn't force you to recompile each time you require a new instance.
Multiple queues eliminates what is known as 'the silly qmail syndrome' and gives IndiMail the
capability to perform better than a stock qmail installation. IndiMail's multiple queue gives
allows one to achieve tremendous inject rates using commodity hardware as can be seen here

http://groups.google.co.in/group/indimail/browse_thread/thread/f9e0b6214d88ca6d#

A pictorial representation of IndiMail's Queue Mechanism is shown below

http://upload.wikimedia.org/wikipedia/en/f/f9/Indimail_queue.png

However, IndiMail is a pure messaging solution. It does not provide frills like calendars,
todo lists, address books, meeting requests, etc. Also, since I have absolutely no knowledge
of web, I have not been able to provide a webmail. However, folks are using squirrelmail and
roundcube with IndiMail. For administration, you can use a web administration tool called
iwebadmin. iwebadmin has its own folder under the indimail project at sourceforge.net. It also
has its own folder, at openSUSE build service, for the RPM/Deb for various linux distros.

Few of the tools for administering virtual domains/users will have a lot in similarity to the
vpopmail package from inter7.com. The table structures are the same. Plenty of idea/code
(for managing virtual domains/users) has been borrowed from there (but modified significantly).
IndiMail comes with a power tcl/tk administration client called indium. indium has its own
folder under the indimail project at sourceforge.net. It also has its own folder at openSUSE
build service for the RPM/Deb for various linux distros.

IndiMail is not a package that is very easy to install from source. Installing from source
requires you to download multiple original sources of packages like qmail, ucspi-tcp, etc.
The Installation also involves applying patch to these original packages from the indimail
patches subdirectory. However if you read the file INSTALL and follow it step by step, there
should be no problem installing IndiMail. If you are a newbie, the RPM/Deb provides an easy way
to install the entire package with all features. In case you are a newbie, it will always be
a pleasure to assist you (at no cost or any obligation) with the installation and please feel
free to email me. In my experience, it has taken 2-3 email exchanges for newbies to get going.
You need to read the INSTALL* files for installation. The file Quick-INSTALL is another attempt
to make it easy for a newbie to install IndiMail.

To install IndiMail you can take the help of the following documents

INSTALL-2.1               (Source Installation Instructions)
INSTALL-RPM-2.1           (Install Instructions for RPM)
INSTALL-MYSQL-2.1         (MySQL specific Installation Instructions)
README-CLUSTER              (Steps on installing a clustered setup)
Quick-INSTALL-2.1         (A minimal documentation on Installation/Configuration)
RELEASE-Notes-2.1         (This file)

You could also look at

http://indimail.blogspot.com/2009/11/indimail-installation-steps.html

Once you have installed IndiMail, you will find all man pages in /usr/share/man and
documents in /usr/share/indimail/doc. You can do man indimail to get started
with understanding IndiMail.

DISCLAIMER
----------

There is no warranty implied or otherwise with this package. I believe in OpenSource Philosophy
and this is an attempt to give back to the OpenSource community. I do not desire any monetary
or material benefit out of this. Howerver, I welcome anyone who can provide some assistance for
building few missing features (building web administration frontend, testing and docuemntation).

LICENSING
---------

IndiMail uses GPLv3 License. See file COPYING. The code uses libdomainkeys. Code related to
domainkey is subjected to licensing terms detailed in softwarelicense1-1.html

BRIEF FEATURE LIST
------------------

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). The configurable queue is possible with a single
    installation of qmail and does not require you to have multiple qmail installations to
    achieve this.
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 proprietary 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 geographical 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 conjunction 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 email.
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 authenticated SMTP with Indimail (PLAIN, LOGIN, CRAM-MD5, CRAM-SHA1,
    CRAM-RIPEMD, DIGEST-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 functions 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/AF_INET6 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. Using pam-multi and nssd, you can use any IMAP server like dovecot,
    etc with IndiMail.
45. Post execution Handle - Allows extending indimail's functionality by writing simple scripts
46. sslerator - TLS/SSL protocol wrapper for non-tls aware applications.
47. QMTP support in qmail-remote. QMTP support for mail transfers between IndiMail clusters.
48. Configured QMQP support
49. IPV6 Support
50. Multiple checkpassword modules sys-checkpwd, ldap-checkpwd, pam-checkpwd, vchkpass
    and systpass
51. iwebadmin - Web frontend for IndiMail User administration
52. badhost, badip control files for spam control
53. mailarchive control file (SOX, HIPAA compliance)
54. Notify recipients when message size exceeds databyte limits
55. Ability to run programs on successful or failed remote deliveries
56. Ability to distribute QMQP traffic across servers.
57. Abuse Report Format Generator using qarf
58. Auto provision users in proxyimap/proxypop3
59. DNSBL Support (DNS Blacklist) Author "Fabio Busatto" <fabio.busatto@sikurezza.org>
60. SURBL Support (SURBL Blacklist). URL parsing code borrowed from surbl.c
    Pieter Droogendijk <pieter@binky.org.uk> http://binky.org.uk
61. Message Disposition Notification using qnotify
62. Return Receipt Responder - rrt
63. Enforce STARTTLS before AUTH using FORCE_TLS environment variable
64. Updated man pages.
65. Jens Wehrenbrecht's IPv4 CIDR extension
66. Li Minh Bui's IPv6 support for compact IPv6 addresses and CIDR notation support
67. SRS support
68. domain based delivery rate control using drate
69. domain based queue using domainqueue control file
70. Ability to drop bounces
71. Ability to discard emails if filter exits 2
72. goodrcpt, goodrcptpatterns
73. udplogger service for logging messages through UDP
74. docker (www.docker.com) images for indimail (cprogrammer/indimail,
    cprogrammer/indimail-mta)
75. tcpserver plugin feature - dynamically load shared objects given on
    command line. Load shared objects defined by env variables PLUGIN0,
    PLUGIN1, ...
    tcpserver plugin allows you to load qmail-smtpd, rblsmtpd once in memory
76. FHS compliance
77. Ed Neville - allow multiple Delivered-To in qmail-local using control file maxdeliveredto
78. Ed Neville - configure TLS method in control/tlsclientmethod (qmail-smtpd),
    control/tlsservermethod (qmail-remote)
79. roundcube support for password, autoresponder through roundcube plugin
    iwebadmin

You can take a detailed look at the feature list at

http://en.wikipedia.org/wiki/User:Mbhangui/IndiMail

Mailing list
------------

There are four Mailing Lists for IndiMail

   1. indimail-support  - You can subscribe for Support at https://lists.sourceforge.net/lists/listinfo/indimail-support
                          You can mail indimail-support@lists.sourceforge.net for support
                          Old discussions can be seen at
                          https://sourceforge.net/mailarchive/forum.php?forum_name=indimail-support
   2. indimail-devel    - You can subscribe at https://lists.sourceforge.net/lists/listinfo/indimail-devel
                          You can mail indimail-devel@lists.sourceforge.net for development activities
                          Old discussions can be seen at
                          https://sourceforge.net/mailarchive/forum.php?forum_name=indimail-devel
   3. indimail-announce - This is only meant for announcement of New Releases or patches. You
                          can subscribe at http://groups.google.com/group/indimail
   4. Archive at Google - http://groups.google.com/group/indimail
                          This groups acts as a remote archive for indimail-support and indimail-devel.

There is also a Project Tracker for IndiMail (Bugs, Feature Requests, Patches, Support Requests) at
http://sourceforge.net/tracker/?group_id=230686

You can also get titbits about IndiMail at

Tips&Tricks - http://indimail.blogspot.com         (WEB)
            - http://feeds.feedburner.com/indimail (RSS)
twitter     - http://twitter.com/indimail
facebook    - http://www.facebook.com/pages/indimail/88063516703?_fb_noscript=1
              (You can become a facebook fan of IndiMail at the above link)
sourceforge - https://sourceforge.net/apps/laconica/indimail/

IndiMail has two yum / rpm repositories for most of the Linux Distros at

Stable Releases
---------------

http://download.opensuse.org/repositories/home:/indimail/


Experimental Releases
---------------------
IndiMail has yum repositories for the latest features being added. You will find
the bleeding edge rpms at

http://download.opensuse.org/repositories/home:/mbhangui/

The corresponding install instructions for the two repositories are
https://software.opensuse.org/download.html?project=home%3Aindimail&package=indimail
&
https://software.opensuse.org/download.html?project=home%3Ambhangui&package=indimail

Currently, the list of supported distributions for IndiMail is

    * SUSE
          o openSUSE_Leap_42.2
          o openSUSE 13.2
          o openSUSE 13.1
          o SUSE Linux Enterprise 12 SP2
          o SUSE Linux Enterprise 12 SP1
          o SUSE Linux Enterprise 12

    * Red Hat
          o Fedora 25
          o Fedora 24
          o Red Hat Enterprise Linux 7
          o Red Hat Enterprise Linux 6
          o CentOS 7
          o CentOS 6

    * Debian
          o Debian 8.0
          o Debian 7.0
          o Ubuntu 16.10
          o Ubuntu 16.04


Enterprise Support
------------------

If you are a commercial distributor (such as OEMs, ISVs and VARs) or plan to have greater
than 10,000 users on a server, you need an IndiMail Commercial License. The cost of license
is $1 per user per annum. The license enables you to ask for bug fixes,
installation/configuraton help 24 X 5 throughout the validity period of the license. I am
willing to work with you for a customized support package.

You can request for a commercial license by writing to

"License Support" license-support@indimail.org

If you are a student or belong to a charitable organization/trust or a NGO or have an OSS
project requiring more than 10,000 users, you can obtain a IndiMail Commercial
License, free of cost, by writing to the above email address.

To enable IndiMail function for more than 10,000 users, you need to install the
indimail-enterprise package from

http://download.opensuse.org/repositories/home:/indimail:/ilmgrd/

Developing IndiMail is my hobby. To continue working on IndiMail, I need people/organization
who like the project to support me, by buying software support from me. If you can afford to
pay, I would urge you to ask for features and pay for it. The source code of IndiMail is
always available for download free of cost.

Docker Repository
-----------------
The docker repository for IndiMail and indimail-mta is at
https://hub.docker.com/u/cprogrammer

indimail-mta - docker pull cprogrammer/indimail-mta
indimail     - docker pull cprogrammer/indimail


GIT Repository
--------------
IndiMail has a git repository at http://indimail.git.sourceforge.net/


-- Manvendra Bhangui <manvendra@indimail.org>
Source: README, updated 2017-03-20