Module EMail Collector

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
EMailCollector
Numero/ID of module 50320
User doc. of module This page
Developer doc. of module Module EMail Collector (developer)

Introduction

This module permits to collect emails from a mailbox using the IMAP protocol and record event or data in your Dolbarr using information found into email.

Installation

This module is included with the Dolibarr distribution, so there is no need to install it.

Setup

To use this module, you must first enable it using an administrator account, via the menu option "Home - Setup - Modules".

Choose the tab where the module is listed. Then click on "Activate".

The module is now activated.

If a cog icon appears Cog circle.svg on module thumb or at end of the line of the module, click on it to access the setup page specific to the module.


If available, it is recommended to enable the option "Use the PHP-IMAP library for IMAP instead of native PHP IMAP. This also allows the use of an OAuth2 connection for IMAP (module OAuth must also be activated)." so when creating an email collector, you will be able to choose between IMAP login with user/pass or with an OAuth2 token.


Create an email collector

Create as many email collectors you need.

Host of email IMAP server: Enter the full name of the IMAP server. Exemple: imap.gmail.com

Port of email IMAP server / Imap encryption: Choose 993 / SSL

Host charset: Choose UTF-8 (works 95% of time). May be US-ASCII with some version/setup of Office365.

Authentication mode

  • If you choose "Password", you must set an IMAP login and password.
  • If you choose "OAuth2", you must set the IMAP login and set the OAuth2 entry to use into the field Oauth service. To create your OAuth2 entry and choose the correct permission for this entry see documentation of Module OAuth

Source directory

  • To collect received email, enter here "INBOX"
  • To collect email sent, enter here "Sent"

Target directory A good practice is to move the collected email into another folder to avoid to have them collected twice. You must create the output target IMAP directory manually before running your email collector.

For example, with Gmail, to create a new IMAP directory:

  • Sign in to your Gmail account.
  • At the top right of the Gmail window, click Settings See all settings.
  • Click Labels.
  • Create Label and check the box "Show in IMAP"

Filters

Choose criteria to define which email is qualified for the collect.

Operations to do

Choose the action to do on collected emails.

Configuring Microsoft 365 / Office 365 (Exchange Online)

This procedure uses IMAP with delegated OAuth 2.0 and initial browser authorization. It is based on Dolibarr 24's native mechanisms; available providers and labels can differ between installed versions. It does not describe app-only authentication using IMAP.AccessAsApp.

Prerequisites

  • An Exchange Online mailbox accessible to the account authorizing the connection.
  • Dolibarr administrator access and a Microsoft Entra / Exchange administrator for the required permissions.
  • A valid HTTPS Dolibarr URL, including any installation subdirectory.
  • From the Dolibarr hosting server: DNS resolution and outbound TCP connections to outlook.office365.com:993 and Microsoft OAuth HTTPS endpoints on port 443. A successful connection from a user's workstation does not verify the server's connectivity.

Dolibarr: collect the information needed for Microsoft registration

  1. Enable the Email Collector module in Setup → Modules/Applications.
  2. Open Setup → OAuth services, or /admin/oauth.php.
  3. Create a dedicated service and, where available, select Microsoft Exchange Online [SMTP/IMAP]. This provider can be used for incoming mail only.
  4. Copy the redirect URL displayed by Dolibarr. For this provider, it ends with /core/modules/oauth/microsoft3_oauthcallback.php. Example: https://erp.example.org/core/modules/oauth/microsoft3_oauthcallback.php.
  5. When using another native or generic provider, use its displayed URL: microsoft, microsoft2 and generic callbacks are different. Do not substitute an arbitrary path.

Microsoft 365 setup

1. Register the application

In the Microsoft Entra admin center, open Identity → App registrations → New registration.

  • Use a clear application name, such as “Dolibarr – IMAP collection”.
  • For an organization's internal installation, select accounts in this organizational directory only.
  • Add a Web platform and enter exactly the redirect URL copied from Dolibarr.
  • Record the Application (client) ID and Directory (tenant) ID.

See app registration and redirect URIs.

2. Application credential

For the Dolibarr provider using a client secret, open Certificates & secrets → Client secrets → New client secret. Copy its Value, not its secret ID. Record the expiry date and arrange its replacement in Dolibarr. The value cannot be displayed again later. Do not publish it in documentation, logs or email.

See application credentials.

3. Permissions and consent

Configure the delegated permissions required for this flow: IMAP.AccessAsUser.All and offline_access. These are available in the Microsoft Graph delegated permission catalogue. Mail.Read alone does not replace IMAP permission.

Have an administrator grant consent when tenant policy requires it, then verify the status. Merely adding permissions to the app registration does not grant consent. Administrator approval does not replace the subsequent mailbox authorization from Dolibarr.

Collector filters do not restrict the token's mailbox permissions.

See IMAP permission and consent troubleshooting.

4. Enable mailbox IMAP access

In the Exchange admin center, open Recipients → Mailboxes → select the mailbox → Email apps → Manage, then enable IMAP if necessary.

After connecting to Exchange Online PowerShell, an Exchange administrator can also run:

Get-CASMailbox -Identity "collector@example.org" | Select-Object ImapEnabled
Set-CASMailbox -Identity "collector@example.org" -ImapEnabled $true

Security and Conditional Access policies must permit the OAuth flow. Do not disable MFA or tenant-wide protections to work around a refusal.

See protocol management and Set-CASMailbox.

Dolibarr: complete OAuth authorization

Complete the service created earlier:

Field Value
Client ID Microsoft Application ID
Client secret Secret Value
Tenant / directory Microsoft tenant ID
IMAP scope https://outlook.office.com/IMAP.AccessAsUser.All
Token renewal offline_access

For incoming mail only, do not select SMTP.Send or add Graph mail-reading scopes to the IMAP token.

Save, then use the authorization / token-generation action. Sign in with the account for the mailbox to collect, complete MFA, and return to Dolibarr. Check that the token is stored and renewal is available. Consent granted using an administrator account does not mean that a token for the target mailbox exists.

The native Microsoft provider manages the endpoints. When identifying the settings for a configurable provider, these are:

Authorization: https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/authorize
Token: https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token

See IMAP OAuth and the authorization code flow.

Configure the collector

On versions where collector OAuth depends on PHP-IMAP/Webklex, enable the native engine by setting MAIN_IMAP_USE_PHPIMAP to 1 in Setup → Other setup. Check that the required components are available in the distribution; this engine is different from the PHP ext-imap extension.

Setting Value / choice
IMAP server outlook.office365.com
Port 993
Encryption Implicit SSL/TLS; generally labelled “SSL” in Dolibarr
Authentication OAuth token / OAuth2
Login Full mailbox address
OAuth service Service authorized for this mailbox
Mailbox password Not used with OAuth; keep the client secret in the OAuth service
Source folder INBOX, or the folder's exact IMAP name
Initial maximum messages 1, to limit the first test

Collection uses port 993; SMTP port 587 is not used to read mail. See Exchange Online connection settings.

Next, configure filters and operations. For example, combine the expected sender and recipient to select messages from a website form. A business-object creation operation and its permissions are separate from IMAP access.

With Multicompany, configure the collector, OAuth service and operations in the intended entity, then check their permissions and availability. Successful Microsoft authentication does not validate business-object creation.

Testing, scheduling and maintenance

  1. Keep the collector inactive while configuring it. Check connectivity and folders first.
  2. Test message selection with a small limit and read the report.
  3. Standard test mode avoids IMAP message moves and rolls back the intended SQL writes. External effects triggered by extensions, such as outgoing emails, may not be reversible: review operations before testing.
  4. Perform a controlled real collection, verify the created objects and message handling, then enable the collector.
  5. Enable the corresponding native job in Scheduled jobs and verify that the server actually invokes the Dolibarr scheduler. Monitor the last result and errors.

Plan client-secret replacement, monitor failures, and authorize again if the refresh token is revoked. Manually pasting a temporary access token is not a permanent configuration. See refresh tokens.

Troubleshooting

Symptom Check
Administrator approval required, including AADSTS90094 Correct application and tenant, actual delegated permissions requested, and consent
Redirect URI error Exact HTTPS URL, installation subdirectory and selected provider's callback
Token accepted but IMAP authentication fails Authorized account, collector login, Exchange IMAP scope and enabled protocol
Timeout / inaccessible port 993 Hosting server DNS and outbound firewall, including hosting-provider restrictions
No messages selected Folder, sender, recipient, other filters and collection limit
Messages read but no object created Operations, rights, entity and business-module compatibility
Collection stops after previously working Expired client secret, revoked token or changed sign-in policy

Shared mailboxes: this guide targets a user mailbox. Shared mailbox access uses an authorized delegated user with the required mailbox permissions; check support in the installed Dolibarr version. Do not assume interactive sign-in directly as the shared mailbox.

Outgoing mail: SMTP is configured separately. Add SMTP.Send and configure SMTP AUTH only when sending is required.

Dolibarr references and verification scope

Prepared on 10 November 2026, without screenshots. Based on source inspection and Microsoft documentation; this is not acceptance testing of every version or tenant.

Usage

Let the job scheduler (Module Scheduled jobs) being executed automatically to run the Email collectore and see your data being recorded into Dolibarr.

To avoid to wait the batch, you can force to execute the email collector manually from the Email collector record with the button "Run now". When making test, a good practice is to set the maximum number of email collected to a low value.

A test mode is available (button Test). This mode does not cause any modification of your mailbox (just reading) nor modification in Dolibarr. On the other hand, it allows you to see the different stages of the selection of qualified email, the filter and the processing of the actions that would be applied if we were not in test mode. This is an important feature to fine-tune the configuration of the collector.

Trouble shooting

If you got the error "connection setup failed - authenticate" with Google OAuth and your OAuth token + refresh works, check the Login (email) in your Emailcollector setup.

Example of use case: Using Emailcollector for a support center

You have a support center with n employees. The email of your support center is support@mycompany.com (an independant email or a mailing-list that dispatch any input email to the n employees).

You must:

  • Declare/Allow the email support@mycompany.com as a possible sender email for each employee (Example on Gmail: click on the menu wheel "Parameters", See All parameters, tab "Accounts and import", in section "Send email as", click on "Add another email", enter the email support@mycompany.com but uncheck the checkbox "alias", then click on link received by email to validate the new sender profile, go back in section "Send email as" and check the option "Reply from the same address the message was sent to").

So it will be possible for every employee to send/answer emails as the sender support@mycompany.com. So if the customer answer email of any employee, the answer will be sent to support@mycompany.com (so the n employees will also receive it).

  • Once this is done, if the email support@mycompany.com is a Mailing-List, it is recommended to create another email account, for exemple *followsupport@mycompany.com* and include it as another member of the mailing list support@mycompany.com. So followsupport@mycompany.com will receive any emails and answers inside the Inbox.
  • Enable the Module EMail Collector and the Module Ticket.
  • In the setup of the ticket module, set the field "Force an email as CC recipient to all messages send from ticket page" to support@mycompany.com, so any email send from a ticket in Dolibarr backoffice will aslo be sent to support@mycompany.com.
  • In the setup of the ticket module, create one EmailCollector entry with credentials (IMAP login or OAuth) of the "followsupport" user as the user to connect to IMAP, and "Inbox" as the input directory. You can set the output directoy as "Processed emails" (you must create the directory or label before the first run). As the inbox is dedicated to followsupport@mycompany.com email, no need to set filters.

Imagine that the received emails are formated by a web form and has this content:

Organization: A customer or name
Email: acustomeremail@example.com

Set the action to "Load the thirdparty by searching name/alias/email/id (load only)" with parameters

name=EXTRACT:BODY:Organization:\s*([\w\-\s]+)$
email=EXTRACT:BODY:Email:\s*([\w\.\-]+@[a-zA-Z\.\-]+)

If the received email has no known format, you can't reuse content to guess the company name. So only the sender email will be used.

Then set a second action that is "Create or complete a ticket" (no parameters).

So each time an email is received to support@mycompany.com, or an answer is done, the user follow@mycompany.com receive the email and the collector will use it, trying to guess if it is a input or output email and will record a help desk ticket or complete a ticket..

Example of use case: Create an opportunity for a team of sales

You have a sale team with n employees. The email of your team is sales@mycompany.com (an independant email or a mailing-list that dispatched any input email to the n employees).

You must:

  • Declare the email sales@mycompany.com as a possible sender email for each employee (but uncheck the checkbox "alias" if using Gmail). So it will be possible for every employee to send/answer emails as the sender sales@mycompany.com. So if the customer answer email of any employee, the answer will be sent to sales@mycompany.com (so the n employee will also receive it).
  • Once this is done, if the email sales@mycompany.com is a Mailing-List, it is recommended to create another email account, for exemple *followsales@mycompany.com* and include it as another member of the mailing list sales@mycompany.com. So followsales@mycompany.com will receive any emails and answers inside its Inbox.
  • Enable the Module EMail Collector and the Module Projects with option "Allow opportunity management" to On.
  • Create one EmailCollector entry with credentials (IMAP login or OAuth) of the sales mailbox. You can set the output directoy as "Processed emails" (you must create the directory or label before the first run). As the Inbox is dedicated to followsales@mycompany.com email, no need to set filters.

Imagine that the received emails are formated by a web form and has this content:

Organization: A customer or name
Email: acustomeremail@example.com

Set the action to "Load the thirdparty by searching name/alias/email/id (create if not found)" with parameters

name=EXTRACT:BODY:Organization:\s*([\w\-\s]+)$
email=EXTRACT:BODY:Email:\s*([\w\.\-]+@[a-zA-Z\.\-]+)

If the received email has no know format, you can't reuse content of email to guess the company name. So only the sender email will be used.

Then set a second action that is "Create an opportunity" (no parameters).

So each time an email is received to sales@mycompany.com, or an answer is done, the user followsales@mycompany.com receive the email and the collector will use it to find existing thirdparty or will create it if not found, then will create the Project/opportunity attached to it.

Boundary Value Analysis

Use Cases

The following use cases were tested for some version of Dolibarr and mail providers:

Use Case GMail + Dolibarr 20 Errors / Problems
Collect received mails to create a ticket (created from scratch by someone) OK
Answer the ticket email received by email, this answer appears into the "Email sent", the collector collect the email sent and link it to the ticket. OK
Send email from a Dolibarr ticket. The email must appears into "Email Sent" of the mailer, but the email collector must not collect it from the "Email sent" because it will be a double: When the email is generated and sent from Dolibarr (so saved into Dolibarr), and the SMTP platform also save the email into the "Emails sent", the collector we must not re-import it. ???
Collect and link email to the ticket for email received from the customer answer of our answer (sent from ticket interface). OK
Collect and link email to the ticket for email received from the customer answer of our answer (sent from the emailer) OK
Collect and link email to the ticket for email sent from the emailer on a mail that was an answer of a ticket. OK

Filters

Depending on your mailbox service, some filters may works or not. This is a summary of tests done with different email services. When your mail hoster does not support the filter, Dolibarr may use the PHP to have filter working despite of this. But this is not always implemented.

Filters/Technology used to filter Office365 GMail Dolibarr+PHP Errors / Problems
From OK NA
To OK NA
Cc KO ? Search string not understood - Unknown search criterion: CC
Bcc KO ? Search string not understood - Unknown search criterion: BCC
ReplyTo NA Filter support with Dolibarr 20+
Subject OK NA
Body OK NA
Already read OK NA
Unread OK NA
Unanswered OK NA
Answered OK NA
Size (Smaller than) KO NA Search string not understood - Unknown search criterion: SMALLER
Size (Larger than) KO NA Search string not understood - Unknown search criterion: LARGER
Message from a conversation initiated by a first email sent from Dolibarr NA OK
Message from a conversation initiated by a first email NOT sent from Dolibarr NA OK
Message sent from Dolibarr NA OK
Message NOT sent from Dolibarr NA OK Message not processed but not an error
Is not answer (initial email) NA OK
Is an answer of an initial email NA OK