Index About us
Index Setup & configLogs & bandwidth usage SPAMDownloadDevelopers  

The Moxy Mail Proxy

Moxy is a mail proxy that acts as a mail server for multiple domains. Mail received for each domain is transparently proxied to different hosts and/or ports.

With Moxy:

  • User mail servers can transparently receive mail on non standard ports (ie ports other than 25)
  • Users who's MX record points to the Moxy host retain complete control over their mail server configuration and may continue to use the MTA of their choosing (Sendmail, Postfix, Qmail etc.).
  • The Moxy host can easily log mail bandwidth usage on a per destination or per email address basis. Using Moxy allows you to keep track of bandwidth used in a manner that is independent of MTA and without having to parse eccentric log files. Moxy includes tools like moxystats and moxylogalyze that give you a real time and complete view of mail bandwidth usage.
  • A mail server can change IP instantly, without needing to update the DNS MX record.
  • Mail for a given domain can be directed to multiple servers simultaneously.
  • Users get anonymity: The location of destination mail servers remain unknown to senders, all they see is the host running Moxy.
  • Moxy can be run on an existing mail server and proxy connections for other domains without disrupting the current setup.

For many, there's a problem with the way email is routed through the internet. If you are to receive mail, you are expected to a have a mail server listening at a single (usually static) IP, on port 25. This will (one day) be fixed by the use of DNS SERV records but in the meantime Moxy solves the problem and a few others.

Moxy has been released by Pat Deegan and under the terms and conditions of the GNU GPL.


The requirements for running Moxy are minimal, basically all you need is a box with a Unix type TCP/IP stack (sockets and all that) and GDBM support.

To be really usefull, Moxy needs to be run on a machine that can receive connections on the standard mail port (25).

Finally, you need a few friends or clients with domains to proxy mail for. Just set their MX record (in the DNS) to point to the IP of the server you're running Moxy on and configure Moxy to proxy mail for these domains.

How it works

Mail to Moxy host (MX for domains) is transparently proxied to other hosts/ports:

In the example above, the Moxy host acts as the MX record for the Bigorg, DynIP and Wall domains. When mail arrives, Moxy looks up the destination and determines the hosts and ports to proxy the mail to. Moxy then opens a connection to the destination(s), identifies the sender, requests to deliver mail to the recipient(s) and sends the destinations' response back to the sender. Mail data is then proxied from sender to destination. Control over the validity of email addresses etc remains in the hands of Bigorg, DynIP and Wall exclusively.

In the example, mail to users @Bigorg is sent to 2 different hosts. Any number of host/port combinations may be assigned as the destination for a given domain. Mail to users @Wall is proxied to the Mail3500 machine on port 3500 thereby traversing the firewall (with the sysadmin's approval of course).

Technical Summary

The developer section contains the juicy details but here is a brief summary. Moxy runs as a daemon listening for connections, usually on port 25 (configurable). The daemon forks a process for incomming connections, which handles the entire transaction with the sender.

Domain to host:port translations are accomplished using a child of the DomainDB class (a specific instance class derived from the DomainDB). This allows all sorts of databases to be used, for now lookups are implemented for flat file or gdbm DBs but it should be a simple matter to implement the lookups from a relational DB (MySQL, PostgreSQL), an LDAP directory or pretty much anything else.

Moxy minimizes the number of connections required to transmit mail. If an MTA connects and declares its desire to send mail to and and if both these domains resolve to the same destination, the connection will be 'reused' and the message only sent once.

A similar scheme is used for logging as for domain lookups. Log objects derived from the Log class currently implemented include instances for logging to a text file, logging through syslog and logging to a gdbm db. Again, it should be a simple affair to create a new subclass to implement logging elsewhere (to a MySQL table, for instance).

Please see the developer section for more info and pretty pictures.


Using Moxy involves little more than editing the config file and launching the program. For details, please see the page on configuration.

© 2001-2002 Psychogenic inc.
SourceForge Logo