MSGraph Email Poller

Overview

Need to poll emails from your Exchange server? This smart service can be used in a poller process and extract the data from the Microsoft Exchange server. Messages are stored in the Appian Document System, as well as the attachments. Meta data is stored in a database table for further processing.

This plug-in provides an alternative to sending emails to an Appian process model when inbound email integration is requested. Instead of the email being forwarded to Appian, this plug-in reads the emails directly from the Exchange mailbox using the MS Graph API as described below:

  • Reads the mailbox using the MS Graph API
  • Convert the email to an EML file stored as an Appian document; Item attachments (calendar invites, messages) are kept in the eml file, File attachments removed from it and stored separately in the document management system.
  • Store all email file attachments as separate Appian documents
  • Store all email metadata (subject, author, recipients, etc...) into a set of tables in the database

Key Features & Functionality

All information how to deploy, configure and use the smart service is in the 'MS Graph Mail Poller.pdf' document in the downloaded zip. Extract the files in the ZIP and follow the instructions in the document.

Anonymous
Parents
  • Is there any possibility of making optional input parameters for the database tables or Data Store Entity that the plugin will write to, similar to how we can input the specific folder to upload the attachments to? We want to use this for a number of separate apps in our environment, and having it always write emails to the same table means we'll have to do some pretty complicated row-level security to make sure users of each app can only see the emails fetched by that app. 

    It also seems like it's downloading all the inline files, even embedded images from email signatures, instead of just the attachments - a single email with one .pdf attachment ends up creating about 14 files, almost all of which are .png's. Not sure if this is intended behavior. Is there maybe an option we could switch off so we only get the actual attached files?

    Thanks so much!

  • This is not planned. The idea is that the mail poller will deliver the mails into a staging table, from where you process them for your own needs. If you want to distribute it across multiple tables, you have to design for this yourself in the process after running the mailpoller (e.g. using a stored proc). The Mailpoller should not be run in parallel, so you should create a central process for the collection of mails and if required, distribute it to different tables after processing some specific mailbox.

    All attachments that are recognized by MSGraph as oDataType fileAttachment will be saved as an attachment.

Comment
  • This is not planned. The idea is that the mail poller will deliver the mails into a staging table, from where you process them for your own needs. If you want to distribute it across multiple tables, you have to design for this yourself in the process after running the mailpoller (e.g. using a stored proc). The Mailpoller should not be run in parallel, so you should create a central process for the collection of mails and if required, distribute it to different tables after processing some specific mailbox.

    All attachments that are recognized by MSGraph as oDataType fileAttachment will be saved as an attachment.

Children
  • I would then suggest to do postprocessing immediately after you have pulled the mails from the mailbox, i.e. in the same process.

  • The difficulty we're running into with implementing post-processing from the staging table is that we have several different apps polling completely different mailboxes, but the messages all end up in the same staging table in the db without a way for any post-processor to look at the table and identify the messages that are relevant to it. The source mailbox could actually be any address contained in the To, CC, or BCC fields, but to process a row in the staging table correctly, we need to know which mailbox the message was actually polled from.

    Maybe a possible alternative would be if the mail poller could simply write the source mailbox as another column in the db staging table, since that would allow post-processing to easily identify the messages that are relevant for its purposes and ignore the others?

    Thanks again.