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
  • The error seems rather straightforward - looks to me like a permissions issue, are you using a different tenant in preprod? Check credentials with your o365 admin and make sure you have access to the mail apis.

  • Hi Team,  we recently upgraded the plugin to 4.0.3 version. it is working fine in QA. But in Preprod, same version is giving below error.

    Any idea, what could be the issue?

    Error code: ErrorAccessDeniedError message: Access to OData is disabled. GET graph.microsoft.com/.../deleteditems SdkVersion : graph-java/v5.41.0403 : Forbidden[...][Some information was truncated for brevity, enable debug logging for more details]

  • v4.0.4 Release Notes
    • Updated woodstock and netty-transport libraries
  • Hello Naveen,

    Open process model and replace smart service with the smart service which is present in smart service list. 

    Or just create your own PM from scratch. 

    Sample application Process model has old smart service version.

    Thanks,

    Bhushan

  • Hi Team,

    Getting below error, i have provided the read write access as well in the Azure AD also.

    Please help at the earliest as this has reached a very critical state now. 

    Error code: OrganizationFromTenantGuidNotFound
    Error message: The tenant for tenant guid '64f30c9d-d8d6-4c97-7072-8734fe2b5dd4' does not exist.

    GET graph.microsoft.com/.../deleteditems
    SdkVersion : graph-java/v5.41.0


    401 : Unauthorized
    [...]

    [Some information was truncated for brevity, enable debug logging for more details]

  • Hi Bhushan,

    We are getting the same error "This version of the mailpoller cannot work with the latest MS Graph APIs, use the latest smartservice" We have done all the changes below, please let us know if there is anything else we need to do.

    1. Setting up a tenant with the Tenant name as “xxx.onmicrosoft.com
    2. Do not rely on the Test connection button when setting up a third-party credential.
    3. Database scripts are also old, 3 columns are missing [DOC_ID_NO_ATT], [BODY_SWAPPED_IMAGES], [MESSAGE_GRAPH_ID]. Just add while creating a table and it will work smoothly.

    Regards

    Naveen

  • Hi Team,

    Is there a way to configure a foldername to poll mails from instead of the default inbox.
    If not, is there a plan to come up with this feature in upcoming versions.

    Kind Regards,
    Richa 

  • Hello, 

    This is a great plugin, just a quick update on my experience while setting up this plugin on-prem setup to avoid confusion and to guide upcoming plugin users.

    1. Setting up a tenant with the Tenant name as “pr**********er.com.au.onmicrosoft.com
    2. Do not rely on the Test connection button when setting up a third-party credential.
    3. Sample application is developed with an old version of the Smart service, so it will not work as it is, you need to create your own process model Or replace the old smart service with a new smart service with your values.
    4. Database scripts are also old, 3 columns are missing [DOC_ID_NO_ATT], [BODY_SWAPPED_IMAGES], [MESSAGE_GRAPH_ID]. Just add while creating a table and it will work smoothly.

    Thanks and appreciate the Appian team’s hard work on this plugin.

    Regards,

    Bhushan

  • My issue is resolved we found that 3 columns was missing and we added that.

  • Thanks Raymond, Connection issue is resolved now.

    Now, I am getting wile write response back to database. 

    Invalid column name 'DOC_ID_NO_ATT' but I don't have column with this name.

    2023-02-21 04:54:56,274 [Appian Work Item - 11 - WorkID 5 - execution02 - process 2097154 - model 6 : UnattendedJavaActivityRequest] ERROR com.appiancs.msgraphmail.MSGraphDBHandler - Error writing mail to database
    com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'DOC_ID_NO_ATT'.

    Below is script of tables :

    create table "APP_MAIL_POLLER_DOC" (
    "APP_MAIL_POLLER_DOC_ID" number(10,0) not null,
    "APP_MAIL_POLLER_ID" number(10,0),
    "ELT" number(10,0),
    "DOC_IDX" number(10,0),
    "SYS_DATE" timestamp,
    primary key ("APP_MAIL_POLLER_DOC_ID")
    );

    create table "APP_MAIL_POLLER" (
    "APP_MAIL_POLLER_ID" number(10,0) not null,
    "FROM_EMAIL" varchar2(2000 char),
    "FROM_NAME" varchar2(2000 char),
    "SUBJECT" varchar2(700 char),
    "TO_EMAILS" varchar2(2000 char),
    "TO_NAMES" varchar2(2000 char),
    "CC_EMAILS" varchar2(2000 char),
    "CC_NAMES" varchar2(2000 char),
    "BCC_EMAILS" varchar2(2000 char),
    "BCC_NAMES" varchar2(2000 char),
    "IN_REPLY_TO" varchar2(2000 char),
    "MESSAGE_ID" varchar2(500 char),
    "STATUS" varchar2(255 char),
    "BODY_TEXT" CLOB,
    "BODY_HTML" CLOB,
    "DOC_ID" number(10,0),
    "RECEIVED_DATE" timestamp,
    "SYS_DATE" timestamp,
    "IMPORTANCE" varchar2(32 char),
    primary key ("APP_MAIL_POLLER_ID")
    );