!!! Work in progress !!!
A starting point to build a Start and Intermediate Inbound Email Watch Connector. Monitor inbox folders for incoming emails and start process instances or throw intermediate events. Feedback and PRs are welcome! In the Connector you'll need to provide the username and password of the email account. For gmail you'll need to create an app password. You'll need to provide the IMAP protocol host URL, port, and connection timeout. You'll also need to provide the folder to monitor (typically "INBOX") and the long polling interval in seconds. Upon connector startup it will check for unread emails and start instances or publish messages. It will then use IMAP's IDLE protocol to wait for new emails to avoid needless polling. Despite standards that say IDLE can be active for up to 30 minutes, most vendors will close connections after a few minutes so be sure to keep the long polling interval to under five minutes in most cases.
There are four outputs and can be accessed from the event
object:
event.from
,
event.replyTo
,
event.subject
,
event.body
For intermediate catch events you need to set a correlation key in the process using a variable and send the correlation key in the payload as part of the incoming message
You can package the Connector by running the following command:
mvn clean package
This will create the following artifacts:
provided
and will be brought along by the respective Connector Runtime executing the Connector.You can use the maven-shade-plugin
defined in the Maven configuration to relocate common dependencies
that are used in other Connectors and the Connector Runtime.
This helps to avoid classpath conflicts when the Connector is executed.
Use the relocations
configuration in the Maven Shade plugin to define the dependencies that should be shaded.
The Maven Shade documentation
provides more details on relocations.
This Connector can be configured with the following properties:
Name | Description | Example |
---|---|---|
Username | Username to authenticate with email server | username@camunda.com |
Password | Password to authenticate with email server | notapassword |
IMAP protocol host URL | URL to IMAP protocol email server | imap.gmail.com |
Port | Port the email server is using | 993 |
Connection timeout | Connection timeout in milliseconds | 5000 |
Folder | Email folder to monitor, typically 'INBOX' | INBOX |
Polling interval | Long polling interval, in seconds | 120 |
Correlation key (process) - for intermediate catch event | Process variable to correlate incoming message | processCorrelationKey |
Correlation key (payload) - for intermediate catch event | Correlation key in incoming message | event.messageCorrelationKey |
Activation condition - for intermediate catch event | Condition under which the Connector triggers | event.aVariable = 'ok' |
This Connector produces the following output:
{
"event": {
"from": [ {
"address": "someaddress@somedomain.com",
"personal": "somebody",
"group": false,
"type":"rfc822"
} ],
"replyTo": [ {
"address": "someaddress@somedomain.com",
"personal":"somebody",
"group":false,
"type":"rfc822"
} ],
"subject":"Some subject",
"body":["Body of email"]
}
}
Run unit tests
mvn clean verify
Use the Camunda Connector Runtime to run your function as a local Java application.
In your IDE you can also simply navigate to the LocalContainerRuntime
class in test scope and run it via your IDE.
If necessary, you can adjust application.properties
in test scope.
The element templates can be found in the element-templates directory.