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_stnear/* 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_hookdelivery_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_cmd2andpop3_parser_dispatch_cmd2.