-
Notifications
You must be signed in to change notification settings - Fork 15
Email Send Log
Every email FreeITSM tries to send is recorded, whether it succeeded or not. You'll find it under Tickets β Settings β Mailboxes, on the clock icon beside a mailbox, in the Outbound tab.
The developer companion is Email send log β Developer Guide.
FreeITSM has always logged mail arriving: what came in, what became a ticket, what was rejected and why. There was nothing for mail going out.
That left a blind spot. A successful send showed up in the ticket, so you could see it. A failed send showed up nowhere at all, except as a line in a file on the server that nobody reads until they already suspect a problem β and the whole difficulty with a silent send failure is that nothing makes you suspect one.
Issue #67 is what it looks like in practice. A mailbox in app-only mode could not send anything. The workflow failures were at least visible in the workflow run history, but the ticket acknowledgement template was failing on the same call, every single time, and said so only here:
[15-Aug-2026 13:30:51] Template email error (ticket_assigned, ticket 611):
Graph API send failed: /me request is only valid with delegated authentication flow.
Three failures over half an hour, invisible from the UI. If the fault had affected only templates and not workflows, the first sign of it would have been a customer saying they never got a reply.
| Column | What it tells you |
|---|---|
| Date/time | When the attempt was made, in your own timezone |
| To | The recipient, and a link to the ticket if there was one |
| Subject | The subject line, and the error text underneath when it failed |
| Sent by | Which part of FreeITSM asked for the send β the eight routes below |
| Result | Sent, Failed, or Not sent |
Not sent means FreeITSM decided not to send at all, and says why underneath β at present that is an automatic email whose templates are all limited to particular senders, none of which covered this one. It is not a failure and does not count towards the red badge: nothing went wrong, and nothing arrived either, which is exactly the combination that is otherwise impossible to find out about.
A red number on the Outbound tab is the count of failures for that mailbox. It loads as soon as you open the activity view, so you don't have to click into the tab to discover something is wrong.
Use Failures only in the dropdown to strip out the successes, and the search box to find a particular recipient, subject, or error message.
"Sent by" tells you which part of FreeITSM asked for the email. This matters more than it might sound: most sending faults affect every route at once, and knowing that only one route is failing narrows the problem enormously.
What it is: a reply or forward sent by an analyst from the ticket screen. The highest-volume route on most service desks, and the only one a person is watching in real time.
When it fails: the analyst is told immediately, so this is the one route where a failure was already visible. It's logged anyway, because "did that reply actually go?" is a question worth being able to answer a week later, and because a pattern of failures across a day is invisible when each one is only a transient error message on somebody's screen.
What it is: the automatic acknowledgements configured under Tickets β Settings β Templates β new ticket raised, ticket assigned, ticket closed.
When it fails: silently. Nobody is watching, the ticket carries on regardless, and the requester simply never hears anything. This is the route that made issue #67 so hard to spot, and the strongest single argument for this log existing.
What it is: a Send email action in a workflow.
When it fails: the workflow run is marked failed, and the error is visible in the workflow history. So this route had a log already β but only if you knew to look in the Workflows module for what is fundamentally an email problem. It appears here too, alongside every other send, so you can see at a glance whether one route is failing or all of them.
What it is: breach and approaching-breach warnings, sent to whoever the SLA rules escalate to.
When it fails: silently, and expensively. The entire point of an SLA alert is to interrupt somebody before a target is missed. An alert that never arrives is worse than having no alerts at all, because the team has been trained to rely on being told.
Each recipient is logged separately. One bad address in an escalation list shouldn't read as the whole alert having failed, and a whole alert failing shouldn't look like one address being wrong.
What it is: self-service portal emails that aren't attached to a ticket β chiefly account verification, where somebody registering has to confirm their address.
When it fails: the person cannot finish registering and has no way to tell you, because the thing that's broken is the channel they'd use. They just go away.
This route also logs a failure when no mailbox could be found to send from at all, which is recorded with no mailbox against it. See "Sends with no mailbox" below.
What it is: the reset link sent when an analyst uses Forgot password.
When it fails: the analyst is locked out and quite likely believes the fault is their password rather than the email. The screen deliberately gives the same reassuring message whether or not the account exists β that's an anti-enumeration measure, and correct β but it does mean a genuine send failure is indistinguishable from a mistyped username at the point of use. This log is where the difference shows.
What it is: an article sent to somebody from the Knowledge module, optionally with a PDF attached.
When it fails: the sender is told, so it isn't invisible. It's logged because the Knowledge share screen can send through its own SMTP settings rather than a configured mailbox, which makes it a genuinely separate path that can break on its own while everything else is fine.
What it is: the same thing from the Change Management module.
When it fails: as above. It's a separate route from the knowledge share, despite being nearly identical code, so the log can tell you which of the two is broken rather than making you guess.
Some failures happen before FreeITSM has even chosen a mailbox to send from β no mailbox is configured, none is authenticated, or the only one is set up in a way that can't send.
Those are recorded with no mailbox against them, which means they can't appear under any particular mailbox's Outbound tab. That's deliberate rather than a gap: they aren't a fault of any one mailbox, they're a fault of the configuration as a whole.
They're reachable through the API with mailbox_id=0, and it's worth knowing they exist, because "no mailbox could send this" is exactly the failure a mailbox-by-mailbox view would hide.
- Whether the email was delivered. The log records what happened when FreeITSM handed the message to Microsoft, Google or your SMTP server. A message accepted and then bounced, greylisted or filed as spam counts as Sent here, because that is genuinely what FreeITSM knows. Delivery is your mail provider's log, not this one.
- The body of the message. Recipient and subject only. The ticket itself already holds what was said, and duplicating message bodies into a log would put a second copy of potentially sensitive content somewhere nobody expects it.
- Anything older than the log itself. It starts recording from the version that introduced it; it can't tell you about last month.
- Why app-only mailboxes could not send email β the bug that prompted this
- Mailbox authentication β setting up sending, and the troubleshooting table
- Email send log β Developer Guide β the table, the helper, and how to add a route
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)