### Install openCRX Server using IzPack Installer
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Details the steps for installing the openCRX Server using the IzPack installer, suitable for evaluation and testing. It lists prerequisites (JDK 21, Apache Ant) and provides commands for running the installer and starting/stopping the server on Linux and Windows.
```bash
# Prerequisites: JDK 21, Apache Ant
# Download and run installer
java -jar opencrxServer-6.0.0-installer.jre-21.jar
# Start openCRX Server (Linux)
cd ./opencrxServer/apache-tomee-plus-10.0.0/bin
./opencrx.sh run
# Start openCRX Server (Windows)
cd .\opencrxServer\apache-tomee-plus-10.0.0\bin
opencrx.bat run
# Access openCRX
# URL: http://localhost:8080/opencrx-core-CRX/
# Stop openCRX Server (Linux)
./opencrx.sh stop
```
--------------------------------
### Server Installation
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Install openCRX Server using the IzPack installer for evaluation and testing environments. This section details prerequisites and commands to start/stop the server.
```APIDOC
## Server Installation
Install openCRX Server using the IzPack installer for evaluation and testing environments.
### Prerequisites: JDK 21, Apache Ant
### Download and run installer
```bash
java -jar opencrxServer-6.0.0-installer.jre-21.jar
```
### Start openCRX Server (Linux)
```bash
cd ./opencrxServer/apache-tomee-plus-10.0.0/bin
./opencrx.sh run
```
### Start openCRX Server (Windows)
```bash
cd .\opencrxServer\apache-tomee-plus-10.0.0\bin
opencrx.bat run
```
### Access openCRX
- **URL**: http://localhost:8080/opencrx-core-CRX/
### Stop openCRX Server (Linux)
```bash
./opencrx.sh stop
```
```
--------------------------------
### Account Queries
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/Rest.md
Examples of how to query accounts using the REST API, demonstrating filtering, sorting, and pagination.
```APIDOC
## Account Queries
### Description
Examples of how to query accounts using the REST API, demonstrating filtering, sorting, and pagination.
### Endpoint
`/org.opencrx.kernel.account1/provider/{providerName}/segment/{segmentName}/account`
### Query Examples
1. **Basic Account Retrieval:**
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account
```
2. **Filtered and Sorted Account Retrieval:**
Retrieve contacts modified between two dates, sorted by first name.
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=modifiedAt().between(:datetime:20080101T000000.000Z,:datetime:20101001T000000.000Z);orderByFirstName().ascending()
```
3. **Query with `greaterThan` condition:**
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().greaterThan(:integer:-1);orderByFirstName().ascending()
```
4. **Query with `lessThan` condition:**
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().lessThan(0);orderByFirstName().ascending()
```
5. **Query with `lessThan` condition (different value):**
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().lessThan(3);orderByFirstName().ascending()
```
6. **Query with `like` condition:**
Find accounts where the full name matches a pattern.
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFullName().like(%22.*Test.*%22);orderByFirstName().ascending()
```
7. **Query with `equalTo` condition and sorting:**
Find contacts with a specific first name and sort by last name.
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFirstName().equalTo(%22Guest%22);orderByLastName().ascending()
```
8. **Query with `equalTo` condition:**
Find contacts with a specific first name.
```
http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFirstName().equalTo(%22Guest%22)
```
```
--------------------------------
### Configure Workflow Controller Auto-startup (XML)
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/AutomatedWorkflows.md
This snippet shows how to configure the Workflow Controller to start automatically when the application server starts. It involves modifying the web.xml file and setting the 'load-on-startup' parameter to control the servlet initialization order.
```xml
WorkflowController
org.opencrx.kernel.workflow.servlet.WorkflowControllerServlet
...
10
```
--------------------------------
### Connect LDAP Clients to openCRX for Directory Lookups
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Provides instructions and examples for connecting LDAP clients to openCRX for address book lookups and contact searches. It outlines connection parameters and demonstrates an example search using `ldapsearch`.
```bash
# LDAP connection parameters
# Host: localhost (or openCRX server hostname)
# Port: 1389 (default, or 1689 for SSL)
# BaseDN: ou=filter/,ou=Persons
# BindDN: @
# Example LDAP search using ldapsearch
ldapsearch -x -H ldap://localhost:1389 \
-b "ou=filter/All Accounts,ou=Persons" \
-D "guest@Standard" \
-w "opencrx" \
"(cn=*Smith*)"
# Thunderbird LDAP configuration
# Name: openCRX-Standard
# Hostname: localhost
# Base DN: ou=filter/All Accounts,ou=Persons
# Port: 1389
# Bind DN: guest@Standard
```
--------------------------------
### Example Regex for DbCopy String Search and Replace
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/DatabaseManagement.md
This snippet demonstrates how to use regular expression patterns in the openCRX DbCopy wizard for searching and replacing string values within database tables during data migration. It shows an example of replacing 'TEST' with 'MYCOMPANY'.
```regex
'TEST'
'MYCOMPANY'
```
--------------------------------
### Native Java Client Setup
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
This section describes how to create a native Java client that connects directly to the openCRX database for enhanced performance. It involves embedding the openCRX instance within your Java application.
```APIDOC
## Native Java Client Setup
### Description
Create a native Java client with direct database access for maximum performance. This approach embeds openCRX in-process.
### Method
N/A (Java Code Example)
### Endpoint
N/A (Direct Database Access)
### Parameters
N/A
### Request Example
```java
// SampleNativeClient.java
package org.opencrx.application.client;
import javax.jdo.*;
import org.opencrx.kernel.account1.jmi1.*;
import org.opencrx.kernel.generic.SecurityKeys;
public class SampleNativeClient {
private static final String PROVIDER_NAME = "CRX";
private static final String SEGMENT_NAME = "Standard";
public static void main(String[] args) {
try {
// Setup openMDX lightweight container (skip in J2EE environment)
org.openmdx.kernel.lightweight.naming.NonManagedInitialContextFactoryBuilder.install();
// Initialize persistence manager factory
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(
"EntityManagerFactory",
SampleNativeClient.class.getClassLoader()
);
// Get persistence manager with admin credentials
PersistenceManager pm = pmf.getPersistenceManager(
SecurityKeys.ADMIN_PRINCIPAL + SecurityKeys.ID_SEPARATOR + SEGMENT_NAME,
null
);
// Get account segment
org.opencrx.kernel.account1.jmi1.Segment accountSegment =
(org.opencrx.kernel.account1.jmi1.Segment) pm.getObjectById(
new org.openmdx.base.naming.Path(
"xri://@openmdx*org.opencrx.kernel.account1/provider/"
+ PROVIDER_NAME + "/segment/" + SEGMENT_NAME
)
);
// Query and display contacts
ContactQuery query = (ContactQuery) pm.newQuery(Contact.class);
query.orderByFullName().ascending();
for (Account account : accountSegment.getAccount(query)) {
if (account instanceof Contact) {
System.out.println("Found: " + ((Contact) account).getFullName());
}
}
pm.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
### Response
N/A (Java Code Execution)
```
--------------------------------
### Database Configuration
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Configure database connections for different database management systems using `tomee.xml` resource definitions. Examples for HSQLDB, PostgreSQL, MySQL, Oracle, and SQL Server are provided.
```APIDOC
## Database Configuration
Configure database connections for different database management systems.
### tomee.xml database connector configuration
#### HSQLDB (default)
```xml
JdbcDriver org.hsqldb.jdbcDriver
JdbcUrl jdbc:hsqldb:hsql://127.0.0.1:9001/CRX
UserName sa
Password manager99
JtaManaged true
```
#### PostgreSQL
```xml
JdbcDriver org.postgresql.Driver
JdbcUrl jdbc:postgresql://localhost/CRX
UserName crx
Password crxpassword
JtaManaged true
```
#### MySQL
```xml
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/CRX?sessionVariables=sql_mode=ANSI
UserName crx
Password crxpassword
JtaManaged true
```
#### Oracle
```xml
JdbcDriver oracle.jdbc.driver.OracleDriver
JdbcUrl jdbc:oracle:thin:@localhost:1521:XE
UserName CRX
Password crxpassword
JtaManaged true
```
#### SQL Server
```xml
JdbcDriver com.microsoft.sqlserver.jdbc.SQLServerDriver
JdbcUrl jdbc:sqlserver://localhost:1433;databaseName=CRX;selectMethod=cursor
UserName crx
Password crxpassword
JtaManaged true
```
```
--------------------------------
### Begin Unit of Work (REST API)
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/Rest.md
Starts a new Unit of Work (UOW) by retrieving the persistence manager and initiating a transaction. The client must retain the transaction ID for commit and rollback operations. This operation requires the 'org.openmdx.kernel.UnitOfWork' type in the request body.
```HTTP
http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/transaction
```
```HTTP Method
POST
```
```XML Request Body
```
```XML Response Body
```
--------------------------------
### Deactivate a Root Object in web.xml (XML)
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/Miscellaneous.md
This example shows how to deactivate a root object by commenting out its init-param in web.xml. After deactivation, renumber subsequent root objects to maintain consecutive numbering starting from 0.
```xml
...
rootObject[6]
xri:@openmdx:org.opencrx.kernel.document1/provider/CRX/segment/${SEGMENT}
...
```
--------------------------------
### Import Mail Server Certificate (keytool)
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/EMailServices.md
Command to import the mail server's public key into the JRE's cacerts file to enable TLS/SSL connections. Replace 'mailserver.cer' with the actual certificate file.
```bash
keytool -keystore cacerts -import -storepass changeit -file mailserver.cer
```
--------------------------------
### SSL Certificate Generation and Conversion (Bash)
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Demonstrates bash commands for creating SSL certificates using OpenSSL, converting them to PEM format, and notes on importing them into a Java keystore.
```bash
# Create SSL certificates with OpenSSL
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365
# Convert to PEM format
openssl rsa -in server.key -out server-key.pem -outform PEM
openssl x509 -in server.crt -out server-cert.pem -outform PEM
# Import to Java keystore using Portecle or KeyTool IUI
# SSL ports: LDAP 1689, IMAP 1443
```
--------------------------------
### Start Grinder TCPProxy for Debugging
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/Rest.md
Starts the Grinder TCPProxy tool to act as a proxy between a native openCRX client and the server. This allows inspection of REST interactions, which is useful for debugging complex requests. The proxy listens on a local port and forwards traffic to the specified remote host and port.
```Shell
java -cp lib/grinder.jar net.grinder.TCPProxy -console -responsefilter NONE -localhost 127.0.0.1 -localport 7180 -remotehost http://127.0.0.1 -remoteport 8080
```
--------------------------------
### Start Virtual Connection (REST API)
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/Rest.md
Initiates a virtual connection to the REST servlet, enabling non auto-commit mode for Unit of Work (UOW) handling. This attaches a persistence manager to the servlet session for subsequent transaction operations. The UserName parameter must match the authenticated user.
```HTTP
http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/connection?UserName=guest
```
```HTTP Method
POST
```
```XML Request Body
```
--------------------------------
### Building from Source
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Build openCRX from source using Gradle. This section provides commands for cloning the repository, checking out a release version, and building the project.
```APIDOC
## Building from Source
Build openCRX from source using Gradle.
### Clone repository
```bash
git clone https://github.com/opencrx/opencrx.git opencrx
cd opencrx
```
### Checkout release version
```bash
git checkout opencrx-v6.0.0
```
### Build
```bash
./gradlew clean
./gradlew assemble
```
### Generate Eclipse project files
```bash
./gradlew eclipse
```
```
--------------------------------
### Build openCRX Polymer Client using Ant
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/PolymerClient.md
This command sequence builds the 'MyContact' Polymer application. It navigates to the application's directory, updates its dependencies using Bower, and then executes the Ant build script to assemble the application into a WAR file.
```bash
cd ./opencrx4-custom/sample/src/war/opencrx-sample-mycontact.war
bower update
cd ../../..
ant assemble
```
--------------------------------
### Example Regex for DbCopy Table Inclusion/Exclusion
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/DatabaseManagement.md
This snippet provides examples of regular expression patterns used in the openCRX DbCopy wizard for specifying which tables to include or exclude during data migration. The pattern '.*' is used to copy all tables, while specific table names can be excluded.
```regex
'.*'
'_OOCKE1_AUDITENTRY_'
```
--------------------------------
### Build APK using Ant in Shell
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/RemoteAndroidClient.md
This shell command demonstrates how to build the openCRX Android client APK using the Ant build tool. It requires navigating to the project directory and setting the ANDROID_HOME environment variable.
```bash
cd ./opencrx4-custom/sample/src/apk/opencrx-sample-android
ant release
```
--------------------------------
### Query Accounts and Log Exceptions in Java
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/RemoteAndroidClient.md
This Java code snippet demonstrates how to query accounts from an openCRX server using a PersistenceManager. It includes logic to create a segment if it doesn't exist and handles potential exceptions during the process. It also defines a helper method for logging exceptions with detailed stack traces.
```java
.getPersistenceManagerFactory(entityManagerConfiguration);
final PersistenceManager pm = pmf.getPersistenceManager(login,
password);
PersistenceHelper.currentUnitOfWork(pm).begin();
org.opencrx.sample.client1.jmi1.Segment segment;
try {
segment = (org.opencrx.sample.client1.jmi1.Segment) pm
.getObjectById(new Path("xri://@openmdx*org.opencrx.sample.client1/provider/CRX/segment/Standard"));
} catch (Exception e) {
final Provider provider = (Provider) pm
.getObjectById(new Path("xri://@openmdx*org.opencrx.sample.client1/provider/CRX"));
segment = pm.newInstance(org.opencrx.sample.client1.jmi1.Segment.class);
provider.addSegment("Standard",
segment);
Log.i(TAG,
"Segment created");
}
final List> members = new ArrayList>();
if (this.queryName != null) {
members.add(Datatypes.member(QueryAccountParams.Member.name,
this.queryName));
}
if (this.queryCity != null) {
members.add(Datatypes.member(QueryAccountParams.Member.postalCity,
this.queryCity));
}
final QueryAccountParams params = Structures.create(QueryAccountParams.class,
members);
final QueryAccountResult result = segment.queryAccounts(params);
PersistenceHelper.currentUnitOfWork(pm).commit();
List accounts = result.getAccounts();
for (AccountT account : accounts) {
accountItems.add(new AccountItem(account.getFullName(), account.getPostalCity()));
}
pm.close();
} catch (Throwable e) {
log(TAG,
e);
}
Log.d(TAG,
"found " + accountItems.size() + " accounts");
return accountItems;
}
public static void log(
String tag,
Throwable e) {
Log.e(TAG,
"Exception " + (e.getMessage() != null ? e.getMessage() : "NULL"),
e);
final CharArrayWriter w = new CharArrayWriter();
PrintWriter pw = new PrintWriter(w);
e.printStackTrace(pw);
final String msg = w.toString();
final int length = msg.length();
for (int i = 0; i < length; i += 1024) {
if (i + 1024 < length)
Log.w(tag,
msg.substring(i,
i + 1024));
else
Log.w(tag,
msg.substring(i,
length));
}
}
public static final class AccountItem {
protected AccountItem(
String fullName,
String city) {
super();
this.fullName = fullName;
this.city = city;
}
private final String fullName;
private final String city;
@Override
public String toString() {
if (city != null) {
return fullName + ", " + city;
} else {
return fullName;
}
}
public String getFullName() {
return fullName;
}
public String getCity() {
return city;
}
}
}
```
--------------------------------
### Configure Nullmailer Remote Relay
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/EMailServices.md
Example configuration for nullmailer to use a smart MTA as a relay. This involves editing the /etc/nullmailer/remotes file with your mail server details, port, and authentication credentials.
```bash
smtp.domain.org smtp --port=25 --starttls --insecure --user=... --pass=...
```
--------------------------------
### User Management - Bulk Import Formats
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Defines the file formats for importing subjects, principals, and users in bulk. It specifies the required fields and their order for each entity type, along with example data.
```bash
# File format for Subjects and Principals (import as admin-Root)
# Subject;;
# Principal;;;;
# Example: subjects-principals.txt
Subject;joe;Doe, Joe
Subject;mark;Ferguson, Mark
Subject;peter;Lagerfeld, Peter
Principal;joe;Doe, Joe;joe;Users,Administrators
Principal;mark;Ferguson, Mark;mark;Users
Principal;peter;Lagerfeld, Peter;peter;Users
# File format for Users (import as admin-Standard)
# User;;;;;[;[;[;]]]
# Example: users.txt
User;joe;JD;Doe, Joe;Users;secretPass123;MGMT,SALES;joe@company.com;America/New_York
User;mark;Fergi;Ferguson, Mark;-;markPass456;MGMT;mark@company.com;Europe/London
User;peter;-;Lagerfeld, Peter;-;peterPass789;SALES;peter@company.com;Europe/Zurich
# Note: "-" means use default value (e.g., primary group defaults to .Group)
```
--------------------------------
### Compile SampleRemoteClient.java using Java
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/RemoteJavaClient.md
This command compiles the SampleRemoteClient.java file. It specifies the output directory for compiled classes (-d bin) and sets the classpath to include the 'bin' directory and all JAR files in the 'lib' directory. This is necessary to resolve dependencies for compilation.
```bash
javac -d bin -cp "bin:lib/*" src/main/java/org/opencrx/kernel/client/SampleRemoteClient.java
```
--------------------------------
### LDAP Directory Integration
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Connect LDAP clients to openCRX for address book lookups and contact searches. This section outlines connection parameters and provides an example using `ldapsearch` and Thunderbird configuration.
```APIDOC
## LDAP Directory Integration
Connect LDAP clients to openCRX for address book lookups and contact searches.
### LDAP connection parameters
- **Host**: localhost (or openCRX server hostname)
- **Port**: 1389 (default, or 1689 for SSL)
- **BaseDN**: ou=filter/,ou=Persons
- **BindDN**: @
### Example LDAP search using ldapsearch
```bash
ldapsearch -x -H ldap://localhost:1389 \
-b "ou=filter/All Accounts,ou=Persons" \
-D "guest@Standard" \
-w "opencrx" \
"(cn=*Smith*)"
```
### Thunderbird LDAP configuration
- **Name**: openCRX-Standard
- **Hostname**: localhost
- **Base DN**: ou=filter/All Accounts,ou=Persons
- **Port**: 1389
- **Bind DN**: guest@Standard
```
--------------------------------
### Configure Database Connector for Apache TomEE
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/DatabaseManagement.md
This snippet shows how to configure the database connector in the `tomee.xml` file for Apache TomEE. It includes examples for HSQLDB, PostgreSQL, MySQL, DB/2, Oracle, and SQL Server. Ensure the JdbcDriver and JdbcUrl are set according to your database.
```xml
JdbcDriver org.hsqldb.jdbcDriver
JdbcUrl jdbc:hsqldb:hsql://127.0.0.1:9001/CRX
UserName sa
Password manager99
JtaManaged true
```
```xml
JdbcDriver org.postgresql.Driver
JdbcUrl jdbc:postgresql://localhost/CRX
```
```xml
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/CRX?sessionVariables=sql_mode=ANSI
```
```xml
JdbcDriver com.ibm.db2.jcc.DB2Driver
JdbcUrl jdbc:db2://localhost:50000/CRX
```
```xml
JdbcDriver oracle.jdbc.driver.OracleDriver
JdbcUrl jdbc:oracle:thin:@localhost:1521:XE
UserName CRX
```
```xml
JdbcDriver com.microsoft.sqlserver.jdbc.SQLServerDriver
JdbcUrl jdbc:sqlserver://localhost:1433;databaseName=CRX;selectMethod=cursor
```
--------------------------------
### POST /opencrx-rest-CRX/org:openmdx:kernel/connection
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Sdk/Rest.md
Starts a virtual connection to the REST servlet, putting it in non-auto-commit mode and attaching a persistence manager for subsequent UOW operations. The UserName parameter must match the authenticated user.
```APIDOC
## POST /opencrx-rest-CRX/org:openmdx:kernel/connection
### Description
Starts a virtual connection to the REST servlet, enabling non-auto-commit mode and associating a persistence manager with the servlet session for Unit of Work (UOW) management. This is a prerequisite for manual UOW control.
### Method
POST
### Endpoint
`http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/connection?UserName=`
### Parameters
#### Query Parameters
- **UserName** (string) - Optional - The name of the authenticated user. Required in versions prior to openCRX 2.9.1+.
#### Request Body
- **org.openmdx.base.Void** - N/A - An empty XML element representing the void type.
### Request Example
```xml
```
### Response
#### Success Response (200)
(No specific response body is documented for this operation, indicating success by the absence of errors.)
#### Response Example
```xml
```
```
--------------------------------
### Configure IMAPServlet init-param for SSL in web.xml
Source: https://github.com/opencrx/opencrx-documentation/blob/master/Admin/GroupwareServices.md
Configures the IMAPServlet within the web.xml file to enable SSL support by specifying the keystore file, type, and passwords. These parameters are crucial for the server to establish secure IMAP connections.
```xml
sslKeystoreFile
/var/ssl/keystore.jks
sslKeystoreType
JKS
sslKeystorePass
changeit
sslKeyPass
changeit
```
--------------------------------
### IMAP Email Integration
Source: https://context7.com/opencrx/opencrx-documentation/llms.txt
Access openCRX email activities through standard IMAP clients. Activity groups map to IMAP folders. This section provides connection parameters and an example configuration for mail clients.
```APIDOC
## IMAP Email Integration
Access openCRX email activities through standard IMAP clients. Activity groups map to IMAP folders.
### IMAP connection parameters
- **Host**: localhost (or openCRX server hostname)
- **Port**: 1143 (default, or 1443 for SSL)
- **Username**: @
- **Password**: openCRX password
### Example configuration for mail client:
- **Server**: localhost
- **Port**: 1143
- **Username**: guest@Standard
- **Password**: opencrx
- **Security**: None (or SSL on port 1443)
### SQL to check for duplicate email addresses (run against openCRX database)
```sql
SELECT email_address, count(*)
FROM OOCKE1_ADDRESS
GROUP BY email_address HAVING count(*) > 1
```
```