Tips & Tricks - Mail connection with IMAP

General

This workshop demonstrates how emails can be read from an inbox and processed via IMAP. This is done by creating a process with an IMAP event source an IMAP event handler. The email is written to a data group via a Groovy script action.

Please note that emails in HTML can lead to security flaws (by allowing JavaScript to be infiltrated, for example).

Example application

Download the example application here. Import the downloaded file "advanced-techniques-mail-connection-with-imap.zip" and select the application and the process it contains. Then switch to the Processes module, open the process "Tips & Tricks - Mail connection with IMAP" and activate it. The following functionalities are covered by the application:

  • Identify the sender

  • Identify the recipient (including CC)

  • Identify the arrival time

  • Identify the subject

  • Convert email's content from HTML to plaint text

  • Convert email's content from plaint text to HTML

  • Present the email in HTML

  • Present the email in plaint text

  • Identify attachments

  • Identify / Separate inline attachments

  • Add the email to an Intrexx data group

  • Add the attachments to an Intrexx data group

The email's format (HTML / Plain text) can be modified on the "Settings" page in the application.

IMAP event source

With the IMAP event source, a connection to the email server is established in the process. In the properties dialog, the connection parameters can be defined on the Email server tab. Click here for more information about the folder path.

If the server uses SSL, a corresponding certificate needs to be added to the Intrexx certificate store.

On the Options tab, you can define how often you would like to make a request to the email server and which emails should be retrieved.

When retrieving emails, Intrexx can only see which emails are on the server and whether they are unread or read. So if you want to process unread emails (e.g. to read and save them to a data group), it is recommended to mark the processed mails as "read" afterwards, otherwise they will be retrieved again. To do this, set the "Perform final actions on the email server" and "Mark as read" settings on the "Options" tab.

Groovy action

Depending on the application case, you need to decide how to process an email. The "SimpleMailParser" in Groovy simplifies the email processing.

import de.uplanet.lucy.server.mail.SimpleMailParser

def msg = g_event.message
def path = g_dirWorkflowTmp.toPath()
def smp = SimpleMailParser.newInstance()
def pm = smp.parseMessage(msg, path)

First of all, the code imports the class, creates a new instance and parses the email. The "pm" object provides us with a variety of methods to, for example, get the mail's subject, content (as HTML or plain text), sender or attachments. Some examples:

def strFrom = pm.sender.address //Ermitteln des Absenders
def strTo = TextUtil.listToString(pm.recipients*.address) //Ermitteln der Empfänger
def strCC = TextUtil.listToString(pm.recipientsCc*.address) //Ermitteln der Empfänger in CC
def attachments = pm.getAttachments() //Ermitteln der Anhänge
def strHTMLContent = pm.getRawHTMLContent() //Ermitteln des Inhalts als HTML
def strPlainTextContent = pm.getPlainTextContent() //Ermitteln des Inhalts als Plain Text

Subsequently, we can add the information and attachments from the email to Intrexx data groups using INSERT statements.