Gromox is the central groupware server component of grommunio. It is capable of serving as a drop-in replacement for Microsoft Exchange. Connectivity options include RPC/HTTP (Outlook Anywhere), MAPI/HTTP, EWS, IMAP, POP3, an SMTP-speaking LDA, and a PHP module with a MAPI function subset. Components can scale-out over multiple hosts.
Gromox is modular and consists of a set of components and programs to provide its feature set. This repository includes a number of manual pages, for which a rendered version is at docs.grommunio.com.
Instructions for compilation are in doc/install.rst. There is also other, mostly technical, documentation in the doc/ directory.
Gromox relies on other components to provide a sensibly complete mail system,
- Admin API/CLI (Management): grommunio Admin API/CLI
- Admin Web Interface (Management): grommunio Admin Web
- User Web Interface (Web UI): grommunio Web
- Exchange ActiveSync (EAS) (Mobile Devices): grommunio Sync
- CalDAV & CardDAV (Interoperability with Clients): grommunio DAV
- a mail transfer agent like Postfix, Exim, and more
- mail security solutions like rspamd and others (commercial ones included)
The grommunio Appliance ships these essentials and has a ready-to-run installation of Gromox.
Support is available through grommunio GmbH and its partners. See https://grommunio.com/ for details. A community forum is at https://community.grommunio.com/.
The source code repository and technical issue tracker can be found at https://github.com/grommunio/gromox.
For direct contact and supplying information about a security-related responsible disclosure, contact dev@grommunio.com.
See doc/protocols.rst for a discussion.
- https://docs.github.com/en/get-started/quickstart/contributing-to-projects
- Alternatively, upload commits to a git store of your choosing, or export the series as a patchset using git format-patch, then convey the git link/patches through our direct contact address (above).
When in Rome, do as the Romans do.
exch
/:emsmdb/
: Decoder for EMSMDB/OXCROPS calls (good starting point/grepable keyword:rop_ext_pull(EXT_PULL &x, ROP_BUFFER &r)
function) and handler entrypoint for these calls (gsp.:rop_dispatch
)ews/
: Logic for handling EWS requests (gsp.:EWSPlugin::dispatch
)exmdb/
: The Information Store server. Decoder for EXRPC calls is inlib/exmdb_ext.cpp:exmdb_ext_pull_request
; the big caseswitch()
function is autogenerated during make intoinclude/exmdb_dispatch.cpp
; mailbox logic functions begin with the grepable substringBOOL exmdb_server::
.http/
: HTTP server- HTTP request parser (gsp.:
htparse_rdhead
, andhtparse_rdhead_st
near/* met the end of request header */
) - MSRPC parser (gsp.:
pdu_processor_input
)
- HTTP request parser (gsp.:
mh/
: Handler for OXCMAPIHTTP requests. There is little actual mailbox logic, since the code forwards to emsmdb/nsp functions.midb/
: A support server specifically for gromox-imap/gromox-pop3, gsp.mail_engine_commands
. Text-based input protocol.mysql_adaptor/
: User database support functionsnsp/
: Decoder for OXNSPI requests (gsp.:exchange_nsp_ndr_pull
), and logic to handle those (gsp.:exchange_nsp_dispatch
)zcore/
: State keeper for requests from PHP-MAPI. Decoder for ZRPC requests gsp.rpc_parser_dispatch
, and mailbox logic gsp.ec_error_t zs_
)authmgr.cpp
: component for directing authentication between MySQL/LDAPoxdisco.cpp
: Handler for AutoDiscover requests
lib/
: functions shared on a large scalelib/email/
: Parser for e-mail, calendar, contacts (RFC 5322, 5545, 6350)lib/mapi/
: Data structures mostly specific to MAPIoxcical.cpp
: Logic for conversion between parsed iCalendar and MAPI calendaring itemsoxcmail.cpp
: Logic for conversion between parsed e-mail and MAPI messaging itemsoxvcard.cpp
: Logic for conversion between parsed vCards and MAPI contact items
mda/
: Message Delivery Agentexmdb_local/
gsp.exmdb_local_hook
delivery_app/
: Delivery Agentsmtp/
: SMTP protocol handler of the MDA
mra/
: Message Retrieval Agents (IMAP, POP3); these are midb clients (not exrpc clients), gsp.imap_parser_dispatch_cmd2
andpop3_parser_dispatch_cmd2
.