Usage & Enterprise Capabilities
OpenEMM is the open-source offshoot of the commercial E-Marketing Manager (EMM) developed by AGNITAS. Built specifically for high-volume, enterprise-grade email marketing, OpenEMM focuses heavily on sophisticated profile targeting, complex event-driven automation pipelines, and deep system integrations via its Web Services framework.
Unlike lightweight newsletter organizers, OpenEMM is fundamentally a Java Enterprise application running atop Apache Tomcat and a relational database. It utilizes a highly specialized, proprietary C-based MTA (Mail Transfer Agent) send-engine extension called Sendmail (or modern Postfix integrations) designed to blast through massive queues by talking directly to the email protocol layer, bypassing typical database limitations during dispatch.
For production use, OpenEMM is chosen when data privacy is paramount (e.g., German/EU GDPR compliance) and when basic "blast and track" functionality is insufficient—specifically when organizations need logic like: "If a user clicks link X, wait 3 days, check CRM status via API, and then send follow-up Y if conditions are met."
Key Benefits
Enterprise Automation: Build multi-stage, branching email campaigns triggered by user behavior (clickstreams) or temporal data (birthdays, subscription renewals).
Target Audience Management: Build complex dynamic segments based on deep subscriber profile data stored in the OpenEMM database.
Dynamic Content Formatting: Alter the layout and copy of individual emails on-the-fly based on the recipient's demographic profile using the built-in scripting engine.
Deep Integration: OpenEMM assumes it is part of a larger ecosystem; it offers robust APIs to sync contact logic with external platforms like Salesforce or SAP.
Production Architecture Overview
Deploying OpenEMM is significantly more complex than a standard LAMP stack, requiring a specific architectural footprint:
Java Runtime Environment (JRE): The foundation for the Tomcat Application Server.
Apache Tomcat: Hosts the OpenEMM administrative Web GUI and the backend REST/SOAP API services.
Relational Database (MySQL/MariaDB): Stores subscriber databases, operational metadata, and analytics.
Python: Required for executing OpenEMM’s myriad internal backend automation scripts (e.g., parsing bounces, generating statistics).
Postfix / Sendmail (MTA): An active dependency. OpenEMM does not natively speak SMTP to external relays like SendGrid; rather, it injects mail directly into a local Postfix/Sendmail queue, which then routes or relays the mail reliably to the internet.
Implementation Blueprint
Implementation Blueprint
Prerequisites & Dependencies
Installing OpenEMM bare-metal requires strict OS configurations. (Ubuntu 22.04 LTS is used as an example).
sudo apt update && sudo apt upgrade -y
# Install Core Dependencies
sudo apt install mariadb-server python3 postfix postfix-pcre wget tar unzip net-tools -y
sudo apt install default-jre -yInstall Apache Tomcat 9:
sudo apt-get install tomcat9 tomcat9-admin -yDatabase Installation
Create the OpenEMM database context.
sudo mysql -u root
CREATE DATABASE openemm DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'openemm'@'localhost' IDENTIFIED BY 'highly_secure_db_password';
GRANT ALL PRIVILEGES ON openemm.* TO 'openemm'@'localhost';
FLUSH PRIVILEGES;
EXIT;Configuring the Local MTA (Postfix)
OpenEMM relies on Postfix to process its massive outbound queues and ingest inbound bounces.
You must configure your domain (e.g., em.mycompany.com).
Edit /etc/postfix/main.cf to optimize for OpenEMM's spool directories and set up an external SMTP relay if you aren't sending direct-to-MX.
# Add to /etc/postfix/main.cf
myhostname = em.mycompany.com
mydomain = mycompany.com
# If using an external relay like Amazon SES to ensure deliverability
relayhost = [email-smtp.us-east-1.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yesConfigure the SES credentials, map them, and reload Postfix:
echo "[email-smtp.us-east-1.amazonaws.com]:587 ses_user:ses_password" | sudo tee /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo systemctl restart postfixApplication Installation
Currently, OpenEMM deployment is most efficiently managed via their official installation scripts or Docker orchestration, as manual bare-metal configurations are highly error-prone due to numerous directory permission requirements.
The OpenEMM Installer App: Agnitas provides a Python-based OpenEMM Installer Application (OIA).
# Create the OpenEMM system user
sudo adduser --disabled-password --gecos "" openemm
# Download and run the setup
su - openemm
wget -O OIA.tar.gz "https://github.com/agnitas-org/openemm/releases/latest/download/OIA.tar.gz"
tar -xzf OIA.tar.gz
cd OIA
python3 oia.pyThe `oia.py` script presents a terminal GUI. Follow the prompts to point it at your MySQL database, Tomcat installation directories, and Postfix configurations. The script will automatically fetch the correct `.war` files, update schemas, and adjust kernel parameters.
Starting the System
Once installed via OIA, OpenEMM provides a centralized command script to manage its background Python daemons and the Tomcat frontend.
# As the openemm user
/home/openemm/bin/openemm.sh startThis script spins up a dozen distinct micro-processes: the bounce-filter daemon, the mail-builder, the send-engine, and triggers the Tomcat application context.
Securing Access
OpenEMM normally runs on Tomcat's default port 8080. For production, place Nginx in front as a reverse proxy.
server {
listen 80;
server_name em.mycompany.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}Enable SSL via Certbot.
Advanced Usage: Event-Triggered Automation
OpenEMM's true power is action-based campaigns.
Navigate to campaigns in the GUI.
Define a Target Audience based on a query: e.g., "Users who clicked Link ID 42 in Campaign A".
Define an Action: Create a new automated mailing step.
Set the Time-delayed Trigger: Schedule the mailing to send specifically 48 hours after the behavior was recorded.
Activate the mailing. The backend Python scripts will continuously evaluate the database condition and dispatch mail individually as users meet the precise criteria.