Team Communication, Built In

Chat & Mail

Every organization ends up juggling a chat app, a mail client, and whatever system runs the actual website or shop — three tools, three logins, and constant tab-switching just to get an answer to a colleague or a customer.

The pain it solves: Staff shouldn't have to leave the workspace they manage content, orders, and events in just to ask a coworker a quick question or check the inbox.

How it helps:

  • Built-in team chat — one-to-one and group conversations live directly inside Backstage, with unread counts, conversation history, and file attachments, so staff never need a separate chat tool for day-to-day coordination.
  • Group conversations with real management — group chats can be renamed, and members can be added, removed, or leave on their own, just like any modern chat app.
  • Connect your own mailbox — staff can link their existing email account (via IMAP/SMTP) and read, organize, and reply to email without ever opening a separate mail client.
  • Familiar mailbox experience — folders with unread/total counts, message lists, full message bodies, attachments, and the ability to mark messages read/unread or delete them, all inside the same workspace.
  • Per-tenant configuration — each organization configures its own mailbox connection, so mail stays scoped to the right tenant and credentials never cross organizational boundaries.

The happy workday: A quick question to a colleague and a reply to a customer email both happen without ever leaving the page you're already working in.

Why This Matters for Your Organization

Reducing the number of tools staff must juggle isn't just convenience — it's fewer logins to manage, fewer places for a message to get lost, and less time spent context-switching. Chat and mail becoming part of the same workspace as content, CRM, and orders means every conversation happens right next to the data it's about.


Technical Details

Chat is implemented by ChatItemService (ExireNexus.Services/Services/ChatService.cs, plus partials ChatService.Groups.cs and ChatService.Messages.cs), backed by the Chat, ChatUser, and MessageItem models (ExireNexus.Shared/Models).

Key implementation points:

  • GetOrCreateOneToOneChatAsync and CreateGroupChatAsync handle chat creation/lookup, while SendMessageAsync, MarkMessagesAsReadAsync, and GetTotalUnreadCountAsync drive the day-to-day messaging experience.
  • Group management — RenameChatAsync, AddMemberAsync, RemoveMemberAsync, LeaveChatAsync — is enforced through the requesting user's membership, keeping group changes scoped to actual participants.
  • GetConversationsAsync and GetChatDetailsAsync return DTOs (ConversationSummaryDto, ChatDetailsDto, MessageDto) tailored to the Backstage UI (ExireNexus.Backstage/Components/VisitorArea/Chat/ConversationList.razor, ConversationView.razor), keeping the service's persistence models separate from what's sent to the client.
  • Message attachments are handled through the existing IFileService, reusing the platform's shared file-upload pipeline rather than a chat-specific one.
  • Real-time updates flow through IChatEventNotifier, decoupling the service layer from the specific transport (e.g., SignalR) used to push new messages to connected clients.

Mail is implemented by ImapMailService (ExireNexus.Services/Services/ImapMailService.cs), using MailKit/MimeKit for IMAP (reading) and SMTP (sending), with MailConfigProvider (ExireNexus.Services/Services/MailConfigProvider.cs) resolving each tenant's effective mailbox settings.

Key implementation points:

  • IsConfiguredAsync lets the UI (ExireNexus.Backstage/Components/Editors/Mail/Mail.razor) detect whether a tenant has connected a mailbox before attempting to load folders or messages.
  • GetFoldersAsync and GetMessagesAsync return lightweight summaries (MailboxFolder, MailMessageSummary in ExireNexus.Shared/Models/Email/MailInboxModels.cs) for fast list rendering, while GetMessageAsync loads the full body and attachment metadata only when a message is opened.
  • Attachments are fetched on demand via GetAttachmentAsync rather than downloaded up front, avoiding unnecessary bandwidth for messages with large attachments the user never opens.
  • SendAsync sends via SMTP and appends a copy to the Sent folder, matching the behavior users expect from a standard mail client.
  • Every operation opens a short-lived IMAP/SMTP connection using settings from IMailConfigProvider, so credentials are always resolved per-tenant rather than cached globally — configuration lives in MailSettings.razor (ExireNexus.Backstage/Components/Editors/Settings).


Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.