Project

General

Profile

Plugins Directory » Redmine expert Helpdesk

Author: Dennis Buehring
Website: https://github.com/expertZentrale/redmine_expert_helpdesk
Code repository: https://github.com/expertZentrale/redmine_expert_helpdesk
Registered on: 2026-07-29 (4 days ago)
Current version: 0.1.5
Compatible with: Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x
User ratings:   (0)

Turns Redmine into a full email helpdesk. Mails are fetched from Microsoft 365 mailboxes via the Microsoft Graph API (OAuth 2.0 client credentials, app-only — no IMAP, no shared passwords) and become tickets; replies are matched back to the existing ticket. Agents answer customers straight from the ticket page, and the mail is sent from the project mailbox so it lands in its "Sent Items".

Why this exists

This plugin grew out of the frustration of running a helpdesk on paid plugins where even small fixes and changes never made it into a release. Instead of waiting, we built our own — and we're publishing it so nobody else has to be stuck in that position. It is open source and free to use, fork and adapt.

Full disclosure: this plugin was largely "vibe coded" with Claude Code. That's precisely why it is public — so anyone can read the source, verify it, modify it, and improve it rather than take our word for it. It runs a MiniTest suite in CI against Redmine 5.1, 6.0, 6.1 and 7.0 on a clean database, plus a Docker smoke test that boots it inside the official `redmine` images. Feedback, bug reports and pull requests are very welcome.

What it does not do

As our usecase was purely processing mails from Microsoft O365 there is currently no generic part for other platforms to plug in to... if Google or some other platform is needed this would need a rewrite of some parts.

Core features (always active)

- Email to ticket — mails from O365 mailboxes create tickets; replies are matched via `In-Reply-To` and `[#id]` subject patterns, using Redmine's standard MailHandler including attachments.
- Multiple mailboxes per project — a project is not limited to one address. Run `support@`, `billing@` and `orders@` side by side in the same project, each with its own source and target folder, its own default tracker, priority and status, its own signature and header/footer templates, its own sender filters and its own transport. Tickets stay in one place while customers keep writing to the address they know. The Azure app registration is entered centrally once and shared by all mailboxes.
- Inbound reply matching — replies land on the existing ticket as a journal note instead of opening a duplicate. Matching is delegated to Redmine's own MailHandler and resolves in order: the `In-Reply-To` / `References` headers against the Message-ID of the original notification, then an `[#42]` pattern in the subject, and only if neither matches is a new ticket created. Unknown senders are handled per mailbox via `unknown_user_mode` (`accept`, `create` or `ignore`).
- Outbound replies from the ticket page — agents answer in the normal Redmine note field and tick "send as e-mail to customer". The mail goes out from the project mailbox, so it appears in that mailbox's "Sent Items" and the customer sees a consistent address. Includes To/CC/BCC with contact autocomplete, configurable subject template, header/footer and signature with live preview, attachments, and inline images that arrive as real embedded images (CID) rather than attachments. Optionally sets a target status and assigns the ticket to the sender after a successful send.
- Per-mailbox transport — `graph` (default, sends full MIME so inline images survive Exchange Online's HTML rewriting) or `smtp` via Redmine's own mail settings.
- Full mail archive on the ticket — every processed mail is attached as an `.eml` file ("Original E-Mail"), and reply mails get a download link at the top of their journal entry, so the raw original is always one click away. Outgoing mails are logged with their recipients, shown as badges on the journal header.
- Contacts / customer list — every sender becomes a contact; paginated customer list per project, plus a customer info panel with the customer's earlier tickets on the ticket page.
- Rules engine — automate by subject or sender: set priority, tracker, category, assignee, or ignore the mail entirely.
- Blacklist/whitelist — sender and domain filters per mailbox.
- REST API and cron endpoints for mail fetch and SLA checks, each secured by its own API key.
- Bilingual — English and German UI and documentation.

Optional features — all disabled by default

Every feature below is opt-in. Leave them off and the plugin is a plain email-to-ticket system.

- AI summaries (optional, off by default) — AI-generated ticket summaries via OpenAI-compatible endpoints. Requires your own API key; while disabled, no request is ever made and no external AI service is contacted.
- Knowledge base / RAG (optional, off by default) — suggests solutions from similar resolved tickets using Qdrant or pgvector. Independent of the AI summaries and separately switchable.
- AI usage statistics (optional) — token and cost tracking behind its own global permission, so AI oversight can be handed to a single role. Only relevant if the AI features are enabled.
- Phishing protection (optional, off by default) — URL scanning against PhishTank and/or the Phishing.Database community feed, with local SafeLinks decoding. Both feeds are individually switchable; while disabled, no feed is downloaded and no URL is checked. On a hit, links are either neutralized with a warning banner or the mail is quarantined without creating a ticket — configurable per project.
- SLA management (optional, per project) — reaction and solution targets in business minutes with configurable working days/hours and per-priority overrides, traffic-light display on the ticket, sortable and filterable SLA columns in the issue list, breach notifications, and a statistics tab with charts. Projects that don't enable it never see the tab or the columns.
- Autoresponder (optional) — confirmation mail for new tickets, configurable per mailbox and simply left empty if unwanted.
- Initial outbound mail (optional) — assign a customer contact to any ticket, including manually created ones, and optionally send the first mail from Redmine.

Installation notes

1. Download the latest `redmine_expert_helpdesk-<version>.zip` from the [Releases](https://github.com/expertZentrale/redmine_expert_helpdesk/releases) page and extract it into your Redmine `plugins/` directory (the archive already contains the top-level `redmine_expert_helpdesk/` folder).
2. Run the migrations:
```bash
bundle exec rake redmine:plugins:migrate NAME=redmine_expert_helpdesk RAILS_ENV=production
```
3. Restart Redmine.
4. Enter tenant ID, client ID and client secret of your Azure AD / Entra ID app registration under Administration → Plugins → Redmine expert Helpdesk.
5. Enable the expert Helpdesk module in the project, grant the helpdesk permissions to your roles, and configure the mailboxes under the project's Helpdesk settings tab.

No additional gems are required (Ruby standard library only).
Uninstall with `rake redmine:plugins:migrate NAME=redmine_expert_helpdesk VERSION=0`.

Changelog

0.1.5 (2026-07-29)

Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.