Mail Log (EN)
Logs every email your Joomla website sends — with trigger, recipient and delivery status · Version 1.5.0 · Stand 27.10.2026
- Mail Log at a glance
- Requirements and installation
- Free version and Pro version
- Download key and updates
- Quick start: the dashboard
- The log list
- Looking at an entry
- Resending a mail
- Body storage, encryption and sensitive content
- Attachments
- Log rules and display rules
- Notifications when delivery fails
- Configuration reference
- Maintenance: scheduled tasks
- Permissions, export and privacy
- Common questions and troubleshooting
- Domain health
- Queue: retrying failed sends (Pro)
- GDPR information and erasure (Pro)
- The periodic report (Pro)
- Backup send route (Pro)
- Second alert channel (Pro)
- Send routes (Pro)
- Return channel: what comes back when a mail does not arrive (Pro)
- Suppression list (Pro)
- DMARC: who sends in your name (Pro)
- DKIM signing (Pro)
- Changelog
Mail Log at a glance
Mail Log records every email your Joomla website sends through the Joomla mailer. For each message you see who triggered it, whom it went to, whether delivery succeeded and — depending on the settings — the full content. Failed deliveries are recorded just like successful ones. That gives you a complete record of what your website actually sent.
Mail Log is a pure administrator extension for Joomla 6 and produces no output in the frontend whatsoever.
The screenshots in this manual were taken on a German Joomla installation. The extension follows the language of your installation, so the labels appear in English on an English backend.
What you use Mail Log for
- Troubleshooting delivery. You see immediately which mails failed, with the exact error message from the mail server.
- Proof and audit. Was the order confirmation, the registration mail, the notification really sent? The log answers that with timestamp, recipient and content.
- Resending. A lost mail can be delivered again with one click — to the original addresses or to a different one.
- An overview of the volume. The dashboard shows volume, peak times and error rates at a glance.
Privacy is built in, not bolted on
A mail log inevitably stores potentially sensitive content. Mail Log is therefore frugal with the data out of the box:
- Sensitive mails are recognised. Messages with subject lines such as "reset password", "token" or "2FA" are classified as sensitive automatically and stored with metadata only by default — the reset link does not end up in the log.
- Encryption without a key in the database. If you choose encrypted storage, the key is derived from the Joomla secret and is not held in the database. A stolen database alone does not reveal the content.
- Attachments outside the web root. Captured attachments are copied to a protected directory that cannot be reached directly over the web.
- Separate permissions for reading. Whoever may see the list may not automatically read the message texts — that is a permission of its own.
- Strictly local. No external services are contacted. No data leaves your website.
What Mail Log consists of
The package installs three extensions that belong together:
- The component
com_maillog— the backend interface with dashboard, list and detail view. - The system plugin
plg_system_maillog— it intercepts the mail sending and writes the log entries. Without this plugin nothing is recorded. - The task plugin
plg_task_maillog— the maintenance tasks for the Joomla task scheduler (cleanup, statistics, migration).
How to read on
If you are starting out, this order works best:
- Requirements and installation
- Download key and updates
- Quick start: the dashboard
- The log list
- Looking at an entry
- Body storage, encryption and sensitive content
Applies to version 1.5.0.
Requirements and installation
Mail Log is installed as one package that deploys the component and both plugins together. This page lists the requirements and describes what is active after the installation.
Requirements
| Joomla | 6.0 or newer |
| PHP | 8.3 or newer |
| Database | MySQL 8.0.13+ or MariaDB 10.4+ |
| PHP extension | sodium (for the optional encryption; present by default in PHP 8.3) |
Installation
- Download the package
pkg_maillog-<version>.zip. - In the backend, open System → Install → Extensions and drag the ZIP file into the Upload Package File area.
- After the upload, Mail Log is installed. You find it in the menu under Components → Mail Log.
There is a single ZIP file to install — the package contains the component and both plugins. Do not install the individual parts separately.
What is active after the installation
So that Mail Log records from the start, the installation enables the system plugin automatically. From that moment on every mail sent is captured — you do not have to switch anything else on.
The task plugin is enabled as well but does nothing on its own. Its maintenance tasks only run once you set them up in the Joomla task scheduler (see the chapter Maintenance: scheduled tasks).
A first check
To verify that everything works, send a test email via System → Global Configuration → Server → Send Test Mail. Then open Components → Mail Log: the test message should appear as the most recent entry in the list.
What is created in the database
The installation creates four tables (entries, recipients, daily statistics and a small table for throttling notifications). Uninstalling removes these tables and their data again. Captured attachment files in the protected directory are kept, however, so that uninstalling by accident destroys no evidence — delete that folder by hand if you need to.
Applies to version 1.5.0.
Free version and Pro version
Mail Log comes in two versions: the Free version and the Pro version. Both are built from the same source and are updated the same way — they differ only in which features are unlocked.
The split follows one sentence: What was sent? is answered by the Free version. Does it arrive? is answered by the Pro version.
What each version does
| Feature | Free version | Pro version |
|---|---|---|
| Logging of every sent e-mail, including a complete outage of the outgoing mail server | yes | yes |
| Dashboard, log list, detail view, Message-ID | yes | yes |
| Resending, CSV export, raw message download | yes | yes |
| Encryption, masking, retention rules, log and display rules | yes | yes |
| Notification when delivery fails | yes | yes |
| Domain health: status panel on the dashboard | yes | yes |
| Automatic retrying of failed sends | — | yes |
| Backup send route: a second way out when the first one fails | — | yes |
| Rule-based send routes: particular messages over a different server | — | yes |
| Periodic report by e-mail | — | yes |
| Second alert channel over a web address | — | yes |
| Domain health: what to do about each finding | — | yes |
| Domain health: several domains | — | yes |
| Domain health: alert when a check starts failing | — | yes |
| Return channel: fetch and sort bounce reports | — | yes |
| Suppression list: dead addresses are no longer written to | — | yes |
| Undeliverable rate on the dashboard, badge in the log list | — | yes |
| DMARC evaluation: who sends in your name, and whether it gets through | — | yes |
| DMARC: judge the sources, trend, share on the dashboard and in the report | — | yes |
| Take DKIM selectors from the reports and check them too | — | yes |
| DKIM signing: sign outgoing mail with a key of your own | — | yes |
| GDPR information and erasure through Joomla's privacy administration | — | yes |
The Free version is not cut down by the existence of the Pro version. Everything you use in the Free version today stays exactly as it is — the Pro version only adds.
How to tell which version you have
Open Mail Log → Queue. If you see a list, you have the Pro version. If you see a short explanation of what the queue does instead, the Free version is installed.
Moving from the Free version to the Pro version
- Download the Pro version from your customer account on graup-it.de.
- In Joomla, upload the package file under System → Install extensions.
- That is all. Joomla recognises the existing installation and updates it — your logs, settings and permissions are kept in full.
The update source is switched over automatically, so from then on you receive updates of the Pro version. Your download key stays the same.
Back to the Free version
The way back works the same: install the Free version over the Pro version and it becomes the Free version again. Your log entries are kept in full.
What happens to the features of the Pro version:
- Messages waiting in the queue are not deleted. They stay where they are and simply stop being worked through. Install the Pro version again later and they carry on; otherwise the retention period clears them out eventually.
- Your settings are kept, including those of the Pro version. You still see the fields concerned in the options, but you can no longer change them. That is deliberate: a field you can operate that then does nothing is worse than a locked one. Move back to the full version and everything stands as you set it up.
- The queue rule set is hidden, not deleted. It is the one setting that cannot be locked technically, so in the Free version it disappears altogether. It is still stored.
- Bounces and the suppression list stay stored. The mailbox is no longer fetched and the two screens show an explanation instead of the lists; the data sits there unchanged and is available again after moving back.
- DMARC reports and your verdicts about the sources stay too. Only no new ones are added.
- DKIM signing stops. Outgoing mail is no longer signed from then on - the key stays where it is, and the published DNS record does no harm. After moving back, signing resumes without anything further to do.
One exception: the privacy plugin stays installed and active. When you move down, Joomla does not remove parts that no longer belong to the new package. GDPR information and erasure requests therefore keep covering the mail log.
That is left as it is on purpose: a privacy feature that switches itself off quietly leaves a gap nobody notices — and that gap is exactly what it was built against. If you do want it gone, uninstall the Privacy – Mail Log plugin by hand in the extension manager.
Download key and updates
Mail Log receives updates through the official Joomla update mechanism. To allow your website to fetch them, enter your personal download key once.
Entering the download key
- Create your download key in your customer account on graup-it.de (menu item Download IDs). One key applies per website and covers all extensions obtained through it.
- In the backend, open System → Update → Update Sites.
- Open the entry Mail Log Update Site and enter the key into the field Download Key.
- Save.
Make sure to paste the key without leading or trailing spaces. A space copied along with it makes the update fail with an error message ("URL rejected" or "Package download failed").
Installing updates
- Open System → Update → Extensions.
- If a new version is available, Mail Log appears in the list. Select it and click Update.
- Joomla downloads the package using your download key, verifies the checksum and installs the new version.
If Joomla finds no update although a new version exists, click Check for Updates first to refresh the cache.
The manual route
You can also install any version by hand: download the ZIP and install it via System → Install → Extensions, just like the first installation. An update through the package overwrites the existing installation and keeps your settings and log data.
Applies to version 1.5.0.
Two versions, two update sources
Mail Log comes as a Free version and as a Pro version. Both need a download key, but they take their updates from different sources. Joomla switches this over by itself as soon as you move from one to the other — there is nothing to enter and nothing to change by hand.
Your key stays the same either way. Which version you are running, and how to switch, is covered under Free version and Pro version.
Quick start: the dashboard
Mail Log works immediately after the installation. This page shows how to produce the first entry and how to read the dashboard properly.
Producing the first entry
Send any email through your website — easiest is the built-in test email under System → Global Configuration → Server → Send Test Mail. Then open Components → Mail Log. The message appears as the most recent entry.
Reading the dashboard
At the top there are four key figures:
| Tile | Meaning |
|---|---|
| Emails in total | All logged mails, broken down into sent and failed. |
| Today | Mails of the current day with error rate. |
| Last 7 days | Weekly figure with error rate. |
| Last 30 days | Monthly figure with error rate. |
Below them follow:
- The activity chart — sent and failed mails per day over the last 30 days, stacked. Above the chart the peak hour of the period is shown.
- The domain health strip — above the chart. In a single line it tells you whether SPF, DKIM, DMARC and MX of your sender domain are in order; the chapter Domain health explains what it can say.
- The queue strip — Pro version only, and only while automatic retry is switched on or something is still waiting. It says how many messages are waiting for another attempt, when the next one is due, and how many were given up — one click shows exactly those. Given-up messages never arrived; they turn the strip red until you requeue or cancel them.
- The return channel strip — Pro version only, and only once the mailbox is being fetched. It gives the undeliverable rate for the period, broken down by kind, and the number of suppressed addresses; the chapter Return channel explains the figures.
- The DMARC strip — Pro version only, and only while the evaluation is switched on. It says how much of your own sending passed, and how many sending servers are still unjudged; the chapter DMARC explains both.
- Latest emails — the most recent messages with status, subject and sender. One click opens the detail view.
- Latest errors — the most recent failed deliveries, so that you see problems immediately.
If the chart does not render (with JavaScript switched off, for instance), Mail Log shows the same figures as a table automatically. No information is lost.
Where to go from here
Mail Log has three working screens: Dashboard, Logs and Queue. Each of them carries the way to the other two at the top left — you do not need the Joomla menu on the left, which is often collapsed anyway.
Alongside them are the screens that belong to one subject: Domain health, Bounces and Suppression list. They are offered where they are needed — on the dashboard and next to each other. The Joomla menu on the left always reaches them.
On the right of the toolbar, every screen of the extension carries the Options button, provided you may change the settings. Adjusting a threshold while standing on the suppression list needs no navigating back.
Logs takes you to the complete list. There you filter and search all entries — that is described in the chapter The log list.
Applies to version 1.5.0.
The log list
The log list shows all logged mails. You reach it through the menu item Mail Log in the sidebar or via Open logs on the dashboard.
The columns
| Column | Content |
|---|---|
| Status | Sent, failed or skipped. For errors a tooltip shows the error message. |
| Time | Time of sending. |
| Sender | The sender address. |
| Recipient | The first recipient; further ones are shown as "+n". |
| Subject | The subject line. Icons indicate attachments and resent mails. |
| Source | The extension that triggered the sending, where recognised (com_users, for example). |
| Actions | View the entry and — with the corresponding permission — resend it. |
A yellow demo marker identifies test entries you created yourself (see below).
In the Pro version a second badge appears below the status when a bounce came back for that message — Permanently undeliverable or Complaint, for instance. It sits next to the send status, not in its place: "Sent" is still correct, because the message did leave the mail server. What happened afterwards is a second fact. The chapter Return channel explains it.
Searching and filtering
Via Filter options you open the filter bar:
| Search | Searches subject, sender, recipient, source and the reference ID. |
| Status | Sent only, failed only or all. |
| Period | Quick selection (today, 7/30/90 days) or your own from/to date. |
| Sender contains / recipient contains | Free-text partial matches on the addresses. |
| Source extension | Restrict to one triggering extension. |
| Context | Frontend, backend, CLI or API — depending on where the mail originated. |
| Bounce | Only messages that received a bounce report (Pro version). |
The column headers status, time, sender, subject and source are sortable. The page size is set at the foot of the list.
Several entries at once
Use the checkboxes to mark several entries and then apply a toolbar action — Resend or Delete (each requiring the matching permission). Both actions ask for confirmation first.
Exporting
Demo data for trying things out
With the permission manage demo data you create realistic-looking test entries through the toolbar, to try out the list, the dashboard and the detail view. All demo entries carry the demo marker and can be removed again with one click.
Applies to version 1.5.0.
Looking at an entry
Clicking an entry — on the time, the subject or the view button — opens the detail view with everything recorded about that mail.
The metadata
The left column sums up what is known about the mail:
- status, time and a unique reference ID
- sender as well as to, CC, BCC and reply-to
- source (triggering extension) and context (frontend/backend/CLI/API)
- the IP address and the logged-in user, where available
- for errors, the full error message from the mail server
- a notice if the text was stored truncated
The content tabs
| Tab | Content |
|---|---|
| HTML | The HTML text, shown in an isolated preview (more on this below). |
| Text | The plain text version of the message. |
| Headers | The custom headers of the message. |
| Raw MIME | The exact RFC822 message, if storing it is enabled. |
| Attachments (n) | The captured attachments with name, type and size, ready to download. |
The HTML text is displayed in an isolated frame (sandbox): scripts in the mail HTML
are not executed, and the content cannot influence the backend. That way you can look at foreign
messages safely.
When there is no text
Depending on the settings, the body is deliberately not stored or stored only in part. In those cases a notice explains why:
- "The body is stored encrypted and was decrypted for display." — you see the plain text; in the database it is encrypted.
- "For this entry only metadata is stored." — typical for sensitive mails such as password resets.
- "For this entry only the first 4 KB of the body are stored." — the default stores a short excerpt; the size shown corresponds to the configured excerpt size.
Reading the bodies requires the permission view mail content. Without it you see the metadata but not the text.
Downloading
With the permission download attachments and .eml you download the raw message as an .eml file through the toolbar (to open it in a mail client) as well as individual attachments from the tab of the same name.
The sending chain
If a mail was resent, Mail Log links the new entry to the original one. The detail view shows this chain, so you can trace which sending came from which.
Applies to version 1.5.0.
Resending a mail
Mail Log can deliver a logged message again. That is useful when a mail got lost, ended up in spam or went to the wrong address. Resending uses the stored content and goes through the normal Joomla mailer — a new log entry is created.
How to resend
- From the list: the Resend button in the action column, or mark several entries and use the toolbar action Resend.
- From the detail view: the section Resend with the button Resend this email.
To a different address
In the detail view you can enter an alternative recipient address. If it is set, the mail goes to that one address only; the original recipients are ignored. If the field stays empty, subject, text and attachments go to the original recipients.
Resending requires the permission resend mails. Every resend creates a log entry of its own that refers back to the original.
When resending is not possible
So that nothing unexpected happens, Mail Log refuses to resend in some cases with a clear message:
- Only metadata stored. If the mail was classified as sensitive (a password reset, say) and stored with metadata only, its text is not available and cannot be sent again.
- Text cannot be reconstructed. If the body is encrypted and the key is not available, or if it was stored truncated, Mail Log says so instead of sending an empty mail.
Protection against misuse
Two limits prevent accidental mass sending and misuse:
- Between two resends of the same mail there is a waiting time of 30 seconds.
- A single mail can be resent at most 20 times.
Both values are deliberately fixed, so that a compromised account cannot misuse Mail Log as a spam cannon.
Applies to version 1.5.0.
Body storage, encryption and sensitive content
How much of the message text Mail Log stores is up to you. This page explains the storage modes, the encryption and the special treatment of sensitive mails. All settings are found in the options under the tabs body storage, raw MIME and sensitive content.
Changes to the storage mode only affect new entries. Mails already stored stay as they are.
The storage modes for the body
| Mode | What is stored |
|---|---|
| Metadata + first N KB (default) | Only the first kilobytes of the text. Enough for an impression without storing long messages in full. You set the size with body size to keep (KB) (default 4 KB). |
| Full body | The complete text in plain. |
| Full, encrypted | The complete text, encrypted in the database (see below). |
| Full, deleted automatically after N days | The complete text, but the maintenance task removes it again after the configured period and keeps the metadata only. |
| Metadata only | No text at all — only sender, recipient, subject, status and time. |
In addition, maximum body size (KB) limits every text as a global safety ceiling; larger bodies are truncated and marked as truncated in the detail view.
Raw MIME
Independently of the body mode, the Content tab, section Complete message, lets you store the exact RFC822 message as it was sent. That allows clean .eml downloads for an audit. Because the raw MIME contains the complete plain text, this option is switched off out of the box. It can be encrypted as well.
Encryption
Mail Log protects encrypted bodies and MIME messages with a modern method (AES-256-GCM or XChaCha20-Poly1305). What matters is where the key comes from:
The key is derived from the Joomla secret (in your
configuration.php) and is not held in the database. An attacker who
captures only the database therefore cannot decrypt the content.
The flip side: if you change the Joomla secret, previously encrypted entries can no longer be read. The secret is part of the core of your Joomla installation that needs protecting anyway — treat it accordingly.
The field encryption key in the options is, as of this version, purely a status display. You do not have to enter or generate anything. If it shows a "legacy key", it comes from an earlier version; the maintenance task migrate legacy-encrypted bodies converts such entries to the new method and removes the legacy key afterwards by itself.
Sensitive mails
Some mails should never end up in the log in plain text — password resets, confirmation links, one-time codes. Mail Log recognises them by the subject line and treats them separately.
The Content tab, section Sensitive content, holds two pattern lists for this (one regular expression per line) and one policy:
| Subject patterns | If the subject matches one of the patterns, the mail counts as sensitive. Out of the box there are patterns for password, passwort, reset, token, 2fa, verify and verifizier. |
| Handling of sensitive mails | Metadata only (default, no body, no attachments), log normally or do not log at all. |
| Body masking patterns | Additional patterns whose matches are replaced by *** in the stored text — token=… or key=…, for example. |
With the default settings a password reset link therefore does not end up in the log, without you having to set anything up.
Applies to version 1.5.0.
Attachments
On request Mail Log keeps the attachments of sent mails, so that you can later trace exactly what was sent. The settings for this are in the options, tab Content, section Attachments.
How attachments are captured
If capture attachments is active, Mail Log copies every attachment into a protected directory while sending and records it in the log entry. In the detail view the attachments appear in the tab attachments with name, type and size and can be downloaded individually (the permission download attachments and .eml being required).
Where attachments live — outside the web root
Out of the box, attachments are stored outside the publicly reachable area (in
the Joomla log directory under com_maillog/attachments). They are therefore not
retrievable directly through a URL, but only through the component with a permission check.
With storage path you can set a location of your own. If the field stays empty, the safe
default path applies. For additional protection Mail Log places lock files (.htaccess,
web.config) in the attachment directory.
Coming from a very early version? Earlier builds stored attachments inside the web root. After the update Mail Log still points at the old location so that nothing is lost. The maintenance task move attachment files moves the files to the safe default location once and clears the old reference afterwards.
Limits and storage budget
| Option | Default | Meaning |
|---|---|---|
| Capture attachments | Yes | Copy attachments to disk while sending. |
| Storage path | empty (= safe default) | Where the attachments are kept. |
| Max. per file (MB) | 10 | Larger attachments are skipped; their metadata (name, type, size) still stays in the log. |
| Total storage budget (MB) | 500 | Once the budget is used up, new attachments are no longer copied until the next cleanup. |
Cleaning up
How long attachment files are kept is controlled by attachment retention (days) in the tab Logging, section Retention (default 30 days). The maintenance task clean up attachment files removes older files and those whose log entry has already been deleted. How to set up this task is described in the chapter Maintenance: scheduled tasks.
Safety of file names
Mail Log sanitises every attachment file name before storing it and defuses potentially executable
extensions (.php, for instance) by appending .bin. Together with the
storage location outside the web root, this rules out an attachment being executed on the server.
Applies to version 1.5.0.
Log rules and display rules
Mail Log has two kinds of rules that are easy to confuse but do very different things. Both are found in the options.
Log rules decide which mails are stored at all.
Display rules only decide which stored mails appear in the list.
Log rules: what is never stored in the first place
Log rules take effect before anything is written to the database. That keeps uninteresting bulk mail out of the log — noisy notifications from a particular service, for instance. What a log rule excludes never becomes an entry.
Two settings determine the behaviour:
| Mode | Exclude matches — matching mails are NOT logged. Include matches only — ONLY matching mails are logged, everything else is discarded. |
| Match | Whether a mail has to satisfy all rules (AND) or any of them (OR). |
Display rules: what is hidden in the list
Display rules take effect after storing. Matching entries are merely hidden in the list and on the dashboard — nothing is deleted. Change the rule and the entries reappear. Useful for tidying up an overloaded view without losing data.
How a rule is put together
Both rule types are built from the same parts. Every rule checks a field with an operator against a value:
| Field | Subject, body, recipient or sender. |
| Operator | contains, does not contain, equals, does not equal, starts with, ends with — for display rules additionally is empty / is not empty. |
| Value | The text to compare against. |
Examples
- Do not log cron job mails: log rule, mode exclude matches, field
sender, operator contains, value
cron@. - Log order mails only: log rule, mode include matches only, field
subject, operator contains, value
order. - Hide internal test mails: display rule, field recipient, operator
ends with, value
@internal.example.
The mode include matches only for log rules is sharp: everything that does not match is not logged. Use it deliberately and check afterwards that the mails you want still reach the log.
Applies to version 1.5.0.
Notifications when delivery fails
Mail Log can warn you actively when a delivery fails — so you learn about a mail problem without having to keep looking into the log. The settings are in the options in the tab notifications.
This is part of the Free version. The e-mail alert and the Joomla private message exist in both versions — they were part of Mail Log from the start and stay that way. What the Pro version adds in the same tab are two things: the extra route through a webhook (see Alert channel) and the periodic report.
Enabling and choosing recipients
| Option | Default | Meaning |
|---|---|---|
| Enable notifications | No | Main switch. Off by default. |
| Notify super admins | Yes | Send to all super users who have enabled receive system emails in their profile. |
| Additional recipients | empty | Further addresses, one per line or separated by commas. |
| Also as a Joomla private message | No | Additionally files the alert as an internal message (com_messages) for every super user. |
Not too many messages: the throttle
So that a run of failures (a mail server that has gone down, say) does not flood you with hundreds of warnings, Mail Log combines alerts.
With throttle window (minutes) (default 30) you set the minimum gap between two alerts. Further errors within that window are counted but trigger no further message. So you get a warning, not an avalanche.
No loop
The warning mail itself is not treated as a new error when it is sent — Mail Log deliberately prevents one notification from triggering another. That way no alert loop can arise.
Recommendation
On production sites it is worth switching notifications on and keeping at least the super admins as recipients. That way you notice a delivery outage within minutes instead of at the next customer complaint.
Applies to version 1.5.0.
Configuration reference
All settings are reached through the Options button at the top right of every Mail Log view. This page lists every option with its default. Some areas are described in more detail in chapters of their own; here you find the complete overview.
The defaults are deliberately frugal with data and suitable for most websites. Especially in the areas body storage and sensitive content, change only what you have understood.
Where to find what
The options screen has seven tabs. The areas described on this page are sections inside those tabs — so you will not find them in the tab bar at the top, but below it.
| Tab | Sections inside |
|---|---|
| Logging | Basic settings, Log rules, Retention |
| Content | Message body, Complete message, Attachments, Sensitive content |
| Presentation | Display rules, Dashboard |
| Delivery | Queue, Backup route, Send routes Pro version |
| Alerts | Notifications, Report |
| Domain health | — |
| Permissions | — |
Basic settings
| Option | Default | Meaning |
|---|---|---|
| Enable logging | Yes | Main switch. Off = no new entries; existing ones stay accessible. |
| Log failed mails | Yes | Also record mails the mailer reports as not sent. |
| Log contexts | Frontend, backend, CLI, API | Where logging happens. The four areas can be chosen independently. |
| Detect source extension | Yes | Determines the triggering extension (best effort). Switching it off saves a minimal amount of work per mail. |
Body storage
| Option | Default | Meaning |
|---|---|---|
| Storage mode | Metadata + first N KB | How much text is kept (see the chapter Body storage, encryption and sensitive content). Affects new entries only. |
| Body retention (days) | 30 | Only with "full, deleted automatically": after this period the task removes the text. |
| Body size to keep (KB) | 4 | Only with "metadata + first N KB": how many kilobytes from the start are stored. |
| Maximum body size (KB) | 1024 | Global ceiling. Larger bodies are truncated and marked. |
| Encryption key | — | Purely a status display. The key is derived from the Joomla secret; there is nothing to enter. |
Raw MIME
| Store raw MIME | No | Keep the exact RFC822 message (for clean .eml downloads). Off out of the box for privacy reasons. |
| Encrypt raw MIME | No | Apply the same encryption as for bodies to the MIME message. |
Attachments
| Capture attachments | Yes | Copy every attachment to disk while sending. |
| Storage path | empty (= safe default outside the web root) | Where the attachments are kept. |
| Max. per file (MB) | 10 | Larger attachments are skipped; the metadata remains. |
| Total storage budget (MB) | 500 | When exceeded, new attachments are skipped until the next cleanup. |
Sensitive content
| Handling of sensitive mails | Metadata only | How mails matching the subject patterns are treated: metadata only, normally, or not logged at all. |
| Subject patterns | /password/i, /passwort/i, /reset/i, /token/i, /2fa/i, /verify/i, /verifizier/i | One regular expression per line. If the subject matches, the mail counts as sensitive. |
| Body masking patterns | /token=…/, /key=…/ | Matches are replaced by *** in the stored body. |
Retention
| Entry retention (days) | 180 | Older entries are removed by the task "clean up logs". 0 = no age-based cleanup. |
| Maximum number of entries | 0 (off) | FIFO ceiling: the oldest entries are removed as soon as the limit is exceeded. |
| Attachment retention (days) | 30 | Older attachment files are removed by the attachment cleanup task. |
Display rules
| Match | All (AND) | Whether a row has to satisfy all or any of the rules to be hidden. |
| Rules | empty | Hide matching entries from the list and the statistics without deleting them. See the chapter Log rules and display rules. |
Log rules
| Match | Any (OR) | Whether a mail has to match all or any of the rules. |
| Mode | Exclude matches | Exclude matches, or include matches only. |
| Rules | empty | Decide before storing which mails are logged at all. |
Notifications
| Enable notifications | No | Warn when a delivery fails. |
| Notify super admins | Yes | To super users with system emails enabled. |
| Additional recipients | empty | Further addresses. |
| Throttle window (minutes) | 30 | Minimum gap between two alerts. |
| Also as a Joomla private message | No | File the alert internally (com_messages) as well. |
Dashboard
| Statistics mode | Live | Live calculates from the entries on every view. Task uses pre-aggregated daily figures maintained by the statistics task — faster with very many entries. |
| Default period | Last 30 days | Preset period of the chart. |
| Show latest mails | 10 | How many entries the dashboard lists show. |
Permissions
The standard Joomla tab. Which action needs which permission is described in the chapter Permissions, export and privacy.
Applies to version 1.5.0.
Maintenance: scheduled tasks
Mail Log comes with maintenance tasks that run through the Joomla task scheduler. They keep the database lean, maintain the statistics and carry out one-off conversions. None of these tasks runs by itself — you set them up in the task scheduler.
Setting up a task
- Open System → Manage → Scheduled Tasks and click New.
- In the selection dialogue, choose one of the Mail Log task types (see the table).
- Give it a name, set the interval under execution rules (daily, for example) and save.
- Enable the task. For scheduled tasks to actually run, the Joomla scheduler has to be triggered — by a website visit (the default) or by a real cron job.
The task types
| Task | Purpose |
|---|---|
| Clean up old log entries | Deletes entries older than the configured retention and enforces the maximum number of entries (FIFO). Batched, so that even large tables are processed gently. |
| Clean up attachment files | Removes orphaned attachment files (whose entry was deleted) and files older than the attachment retention. |
| Update daily statistics | Maintains the pre-aggregated daily figures for the dashboard. Only needed if you have set the statistics mode to task. |
| Clean up old mail bodies | Resets the text of old entries and keeps only the metadata. Only effective with the storage mode "full, deleted automatically after N days". |
| Migrate legacy-encrypted bodies | A one-off conversion: re-encrypts entries from an earlier version to the current method and removes the old key once nothing depends on it any more. Run it until no legacy entries are reported. |
| Move attachment files | A one-off conversion: moves attachments from an old storage location (inside the web root) to the safe default location. Run it until no files are left. |
Recommendation for regular operation
For most websites two daily tasks are enough:
- Clean up old log entries — keeps the table within bounds.
- Clean up attachment files — only needed if you capture attachments.
The two migration tasks (migrate legacy-encrypted bodies, move attachment files) are only needed if you updated from a very early version. Once the migration is done you can disable or delete them. Update daily statistics and clean up old mail bodies only make sense with the matching settings.
All cleanup tasks work in blocks and with clear upper limits, so that they do not overload the server even with very large data sets.
Applies to version 1.5.0.
Permissions, export and privacy
Mail Log stores potentially sensitive communication data. This page sums up who may do what, what is exported and which data is stored at all.
Permissions
You assign the permissions as with every Joomla component under Options → Permissions per user group. Mail Log deliberately separates viewing from reading the content:
| Permission | Allows |
|---|---|
| View Mail Log | Open the dashboard and the list — the metadata, but not necessarily the message texts. |
| View mail content | Read the full bodies (HTML, text, MIME). Granted separately because bodies can contain sensitive data. |
| Download attachments and .eml | Download attached files and the raw message. |
| Resend mails | Deliver logged mails again. |
| Delete entries | Remove log entries. |
| Manage demo data | Create and delete test entries. |
Every action checks its permission server-side — it is not just the interface hiding buttons. So an action cannot be forced through a direct call either. An editor with "view Mail Log" but without "view mail content" sees the list but no texts.
Recommendation: grant view mail content and download attachments and .eml sparingly — ideally only to the people who actually investigate delivery problems.
Export
Free-text fields are prepared in the CSV so that spreadsheet programs do not interpret them as a formula by accident. The export can therefore be opened safely in Excel or LibreOffice.
Which data is stored
Per mail, Mail Log stores sender and recipients, subject, time and status, the context as well as — where available — the IP address and the user ID of whoever triggered it. How much of the text is kept is up to you through the storage mode; out of the box that is a short excerpt only, and sensitive mails are stored with metadata only.
Privacy notes for operation
- Limit retention. Set an entry retention (default 180 days) and set up the cleanup task, so that old data does not lie around indefinitely.
- Store frugally. For most purposes the default "metadata + excerpt" is enough. Full or raw storage only if you really need it.
- Encrypt if you keep full bodies. Encrypted storage keeps the key outside the database.
- Keep permissions narrow. Separate reading the content from merely viewing the list.
- Access and erasure requests. For data subject requests, filter the list by the address and export or delete selectively.
All data stays on your server — Mail Log contacts no external services.
Applies to version 1.5.0.
Common questions and troubleshooting
Answers to common questions and the quickest routes to fixing things.
No mails are logged at all
- Check whether the system plugin
plg_system_maillogis enabled (System → Plugins). Without this plugin nothing is captured. - Is enable logging set to yes in the options?
- Is the context selected in which the mail originates? A mail from a cron run is only captured if CLI is enabled.
- Do log rules exclude the mail? Check the mode include matches only in particular.
If hooking into the mailer ever fails (after a major Joomla update, say), Mail Log reports that in the backend with a warning and writes it to the Joomla log — so you notice it instead of quietly getting no more entries.
I see the list but no message texts
To read the bodies you need the permission view mail content — it is deliberately separate from merely viewing. Have it assigned to your group under Options → Permissions.
An entry shows "metadata only" instead of text
That is usually intentional: the mail was classified as sensitive (a password reset, for example) and therefore stored without a body. Alternatively the default mode stores only a short excerpt. You control both in the options under body storage and sensitive content — changes affect new entries.
"Resend" is not possible
If the mail was stored with metadata only or truncated, the full text is missing and the mail cannot be reconstructed. For encrypted bodies the Joomla secret must be unchanged. If the message was about a waiting time: there are 30 seconds between two sendings of the same mail, and at most 20 repetitions are possible.
The update is not found or fails
- Click Check for Updates first to refresh the cache.
- Is the download key entered at the update site — and without spaces at the beginning or end? A space copied along with it leads to "Package download failed".
- If need be, download the new version manually and install it via System → Install.
Encrypted entries have suddenly become unreadable
The key is derived from the Joomla secret (in configuration.php). If that was changed,
previously encrypted bodies can no longer be decrypted. The secret should only be changed
deliberately and with care.
The database is growing a lot
Set up the task clean up old log entries and set an entry retention (default 180 days) or a maximum number of entries. Also store only as much body as you really need — the default "metadata + excerpt" is frugal already.
Where are the attachments?
Out of the box outside the publicly reachable area, in the Joomla log directory under
com_maillog/attachments. They are reachable only through the component with a permission
check, not by a direct URL.
What happens when uninstalling?
The four database tables with all log data are removed. Attachment files already captured stay in the protected directory, so that uninstalling by accident destroys no evidence — delete that folder by hand if you need to.
Applies to version 1.5.0.
Domain health
Whether your e-mail arrives is often decided not in Joomla but in the DNS of your domain. If the usual records are missing there, large providers treat your messages as suspicious — they land in the spam folder or are rejected outright, and nobody tells you.
Mail Log checks those records for you and shows the result as a status strip on the dashboard. That strip answers one question — is something broken right now? — and for that it names the check and what it says, nothing more. Everything else lives on its own Domain health screen, which you reach from the strip, from the button at the top of the dashboard, or through Components → Mail Log → Domain health.
The domain health screen
The screen has two areas, and they are visibly separated:
- What was found for your domain — at the top. The overall result, when it was last checked, and one card per check. This is where something may need doing.
- Background reading — below, on a grey ground. What the four terms mean, each with a link to the relevant standard, who creates the records, and how to go about it. There is nothing to set here.
What the cards at the top hold is where the two versions differ:
| On the screen | Free version | Pro version |
|---|---|---|
| Which check, and whether it is fine | yes | yes |
| An explanation of what SPF, DKIM, DMARC and MX are | yes | yes |
| What is actually in DNS — the record itself, the closing rule, the policy, the key length, the MX servers | — | yes |
| The finding in plain words | — | yes |
| What to do about it — in plain words: which record goes where and what belongs in it. The parts only your provider knows, you fill in yourself | — | yes |
| Where such a record goes and which three fields to fill in | — | yes |
So the Free version tells you that something is wrong and where. What to enter is what the Pro version adds.
What is checked
- SPF — states which servers may send in your name. Checked: that there is exactly one record, that it ends in a rule that actually rejects anything, and that it stays within the permitted number of lookups. That last one is the quiet failure: a record that is too elaborate looks right, but large providers abandon the evaluation before finishing it.
- DKIM — the digital signature on your messages. Checked: that a key exists for the selector you named, that it has not been revoked, and that it is long enough.
- DMARC — tells recipients what to do with forged messages. Checked: that a record exists, which policy it sets, and whether it collects reports.
- MX — whether your domain can receive replies at all.
Setting it up
The check is on by default and runs once the first time you open the dashboard. So you see a result straight away, without setting anything up. Two steps are still worth taking:
- Pro version: if you use the DMARC evaluation, this step is usually unnecessary — the reports name the selectors actually used for signing, and Mail Log checks them on its own. See the chapter DMARC.
- Enter your DKIM selectors — in the Options, tab Domain health, one per line. Without them DKIM cannot be checked; selectors cannot be guessed. Your mail provider knows them; they are often called default, mail or s1.
- In the Scheduler, create the task Mail Log: check domain health. Once a day is enough. Without it you are left with that single result from the first visit.
The domain checked is the sender address from the Joomla configuration. To check a different domain, enter it in the same tab.
The four things it can say
| Shown as | Meaning |
|---|---|
| Fine | The record is present and coherent. |
| Not set up | There is no such record at all. Something has to be created — with the provider your domain sits with. |
| Broken | The record is there but wrong. Something that already exists has to be corrected. Both are red, because both affect your delivery today — the difference is whether you create something or change something. |
| Please check | It works but is not ideal — or something is missing without that necessarily being wrong. The mailbox (MX) is the typical case: a send-only domain without an MX record is allowed, but it cannot receive replies. |
| Unknown | The question could not be answered — for instance because your server does not allow DNS lookups, or the name service did not respond. |
Unknown is not a failure. Mail Log deliberately tells "the record is missing" apart from "I could not look". Before reporting anything as broken it checks that your domain is reachable over DNS at all. If it is not, the last known result stays, rather than showing a red light that means nothing.
Who sets these records up?
Neither Joomla nor Mail Log. The four entries live in your domain's DNS — that is, wherever you rent the domain. Usually that is your host, but it can be a different provider, for instance when the domain is registered somewhere other than the site runs.
How you get there differs from provider to provider. With some you create the records yourself in the customer area (often under DNS, DNS management or Name servers), others offer ready-made switches for SPF and DKIM, and with others again only the support desk can do it. If you get stuck: write to your provider's support and tell them which record you need. It is an everyday request, and most of them do it the same day.
The same note, together with the links to the standards, is on the Domain health screen itself, in the lower Background reading area.
Privacy
Every check runs as a DNS lookup from your own server. No data is sent to checking services, reputation providers or any other third party, and no access key is needed.
Some providers switch DNS lookups off on shared servers. In that case Mail Log honestly reports Unknown rather than guessing. The task logs will tell you whether that is the reason.
In the Pro version
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
The Free version tells you that something is wrong. The Pro version adds:
- What to do about it. Under every finding that is not fine, the Pro version
shows what to enter and where. That is the part a status light alone does not answer — knowing
that your SPF record lacks a closing rule only helps if it also says that
~allor-allbelongs at the end. - An alert as soon as a check turns from Fine to Broken or Not set up — so you find out without looking every day.
- Checking further domains, not only the sender domain from the Joomla configuration.
Queue: retrying failed sends (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
When sending an e-mail fails, the Free version leaves it there until somebody re-sends it by hand. The Pro version does that for you: it puts the message in a queue and tries again by itself.
How often and how quickly
The wait doubles with every attempt. At the default of 15 minutes that is 15 minutes, 30 minutes, 1 hour and 2 hours — four attempts spread over three and a half hours. That covers the vast majority of outages without pressing a server that is already struggling.
Not every failure is worth repeating
Mail Log tells apart what the mail server reported:
| Kind of failure | What happens |
|---|---|
| Server unreachable, timeout, temporary rejection | Retried. |
| Authentication rejected | Retried, and the failure is noted in the task log — a wrong password does not fix itself. |
| Address does not exist, message rejected for good | Not retried. The message is marked as given up. |
That is not a detail: an address that does not exist will not start existing. Writing to it four times anyway only costs time and, over the long run, damages your domain's standing with recipients.
Switching it on
- In the Options, open the Queue tab and switch on Retry automatically.
- In the Scheduler, create the task Mail Log: work through the queue. Every 5 to 15 minutes is a sensible interval.
Without the task nothing happens. The queue fills up but is never worked through. If you see waiting messages and nothing moves, that is almost always the reason.
The screen
Under Mail Log → Queue you see what is pending: status, subject, how many attempts have been made, when the next one is due, and what the mail server last reported. The subject links to the original log entry.
| Status | Meaning |
|---|---|
| Waiting | The next attempt is still to come. |
| Sending | A run is working on it right now. |
| Delivered | A retry succeeded. |
| Given up | All attempts are used up, or the failure was permanent. |
| Cancelled | Stopped by hand. |
Queue again gives a message that was given up another chance — for instance after you have fixed the cause. Cancel stops a waiting message without deleting it.
Retrying only certain messages
With no rules, every failed message is queued. With rules you narrow that down — say order confirmations but not contact form forwards. The rules work like the log and display rules: pick a field, enter a text, and decide whether one or all of the rules must match.
Limits
- A message is re-sent at most 20 times in total — counted across every route, including the button in the detail view. After that Mail Log refuses further attempts. This limit is what stops a permanently undeliverable recipient from being written to for ever.
- If the original log entry has been deleted — by the cleanup task, for instance — the message can no longer be rebuilt. The job is then given up.
- Only what was logged can be retried. If logging of the message body is switched off, or the mail was classified as sensitive, the content is not available.
GDPR information and erasure (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
A mail log is a collection of personal data: addresses, subject lines, often content too. When somebody asks under Article 15 of the GDPR what you hold about them, or demands erasure under Article 17, the log is part of the answer — and it is the part people routinely forget.
The Pro version closes that gap, and it does so where you already work: in Joomla's own privacy administration.
Why there is no screen of its own
Joomla already has the workflow: under Users → Privacy you file a request, the person confirms it, and every extension contributes its share. Mail Log hooks into that. A second, separate screen would mean you had to remember that Mail Log is not covered by the process you already use — and the one you forget is the one that makes the answer incomplete.
How to do it
- Under Users → Privacy → Requests, create a request: enter the e-mail address and choose Export or Remove as the type.
- Have the request confirmed, or mark it as confirmed.
- Run Export data or Remove data. Mail Log contributes its share automatically.
The address comes from the request, not from a user account. That matters here: the people a website writes to are mostly not registered users — contact form senders, customers, recipients of a notification. For exactly those people, a lookup keyed on a user account would find nothing.
What the export contains
For every message the address appears in: time, subject, delivery status and any error message, the role the address had (sender, To, Cc, Bcc), what triggered the message, the number of recipients and attachments, and the Message-ID.
The message body — and why it is not always included
If the person asking was the only recipient, the body is included. If there were further recipients, it is withheld, and the export says so.
That is not convenience: a message to three people is personal data of all three. Handing it to one of them at the press of a button would be a data protection breach — caused by a data protection feature. You can always release the text by hand after reviewing it.
What removal does
It deletes the affected log entries, and their attachments from disk with them. It does not anonymise them.
That is deliberate. Blanking the address while the subject line still reads "Your order, Mr Schmidt" looks like erasure and is not. Do expect the record of messages to third parties to go too, if the person asking was on the same message.
Limits worth knowing
- The search covers the address fields, not message bodies. A body may be encrypted, truncated or not stored at all — a text search would find some occurrences and miss others, and a search that is right sometimes is worse than one whose limits are written down.
- Removal is final. There is no recycle bin.
- Retention obligations come first. If a message is covered by a statutory retention period, removing it is your decision, not the software's.
The periodic report (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
The dashboard answers the question "is mail still working?" — but only when somebody looks. The report turns that round: it arrives on its own, at a fixed interval, by e-mail.
What is in it
- How many messages went out, how many were delivered and how many failed — each compared with the period before. "48 messages" says nothing; "48 messages, 6 failed, twice as many as last week" says everything.
- Which extensions sent the most, and where something went wrong.
- The most frequent messages from the mail servers.
- The domain health findings — but only those that are not fine.
- How much is waiting in the queue and how much was given up.
The subject line already carries the verdict: whether everything is fine, how many messages could not be delivered, or that your sender domain needs a look. A subject line that always reads the same does not get opened.
Switching it on
- In the Options, open the Report tab and switch on Send the report.
- Choose the period: 24 hours, 7 days or 30 days.
- Enter the recipients, one address per line. Left empty, reports go to the same addresses as the failure alerts.
- In the Scheduler, create the task Mail Log: send report.
Interval and period have to match. A 7-day report running daily repeats almost the same figures every day; a 24-hour report running weekly misses six days. Set the task's execution rule to the same interval as the period you chose.
Quiet periods
If nothing was sent and nothing is wrong, no report is sent by default. An all-clear that looks the same every week stops being read after the third one — and so does the fourth, which had something to say.
If you want the sign of life anyway, switch on Send even when nothing happened. A failing DNS record triggers a report even in a quiet period, by the way — that is precisely when it is news.
What the report does not contain
No message bodies, no recipient addresses, no attachments. The report is plain text and holds nothing but figures, extension names and server messages.
That is deliberate: it is the only thing this extension sends out of its own accord. A report that needed guarding as carefully as the log it summarises would have missed its point.
Backup send route (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
The queue catches failed sends and tries again later. For an order confirmation, that is the right answer. For a password reset e-mail it is far too late: anyone still waiting after fifteen minutes has long since called support.
The backup route is the answer to that. When a send fails, the same message goes out over a second outgoing mail server straight away — in the same page request, with no waiting period.
Setting it up
- In Options, open the Backup route tab and switch on Use a backup route.
- Choose the kind: a second outgoing mail server, or the server's own PHP function.
- For a second server, enter server, port, encryption and — where needed — user name and password.
- If the second provider insists on a sender address registered with them, enter it under Different sender address. Otherwise leave the field empty.
The password is stored encrypted and never shown again. Leave the field empty when you save the next time and the stored password stays as it is; to change it, enter a new one.
Testing the connection
Below the credentials sits the Test the connection button. It checks the values currently in the form — so you do not have to save first in order to find out that something is wrong.
- It checks reachability, encryption and, when a user name is set, the login.
- No test mail is sent. Out of a half-configured route it might well reach a real person.
- Leave the password box empty to use the stored password. Joomla never renders a stored password back into the form, so empty is the normal case when you only corrected the server.
- When the test fails, the mail server's own answer is shown underneath — something like 535 Authentication failed. That is usually the most useful part.
Which second route to pick
A second outgoing mail server is the better choice. It should be with a different provider than the first — two accounts with the same provider go down together, and that is exactly what the backup route is meant to protect against.
The server's own PHP function needs no credentials and is therefore set up in a minute. It does get through less often, though: many recipients treat mail sent directly by a web server as unwanted. Better than nothing as a last resort, not something to rely on permanently.
When the backup route does not try
Only for failures another server could fix as well — the outgoing server cannot be reached, the connection drops, the server is overloaded, the sign-in is refused.
For permanent rejections it stays out of it: an address that does not exist does not exist on the second route either, and a rejected message is rejected there too. Two rejections instead of one only damage the reputation of your sender domain.
A backup route with a user name but no readable password is not used. That is the case when the password was never entered, or when the security key of your Joomla installation changed after it was saved. Enter the password again in that case.
What the log shows afterwards
Two entries: the failed attempt over the normal route, and the successful one over the backup route. That is deliberate. A single entry saying "delivered" would hide the fact that the first route went down — and that is precisely the information you run this extension for.
When such pairs start piling up, check the first outgoing server. The backup route is a safeguard, not a repair.
Working together with the queue
The backup route comes first. If the message goes out over it, it has been delivered and is not queued as well. If it fails too, the queue takes over as usual and tries again later — over the normal route.
Together, the two are the complete safeguard: the backup route for what has to go out now, the queue for everything that can wait.
Second alert channel (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
Mail Log reports a failed send by e-mail. That is a circle: the one message that matters has to go out over the very route that is not working.
The second alert channel gets around it. The message leaves your site over an ordinary web address and arrives where you are looking anyway: a chat room, an alerting service, or a small script of your own. None of them care whether your mail server is up.
Setting it up
- In Options, open the Alerts tab.
- Switch on Use a second alert channel.
- Enter the address your service gives you. Only
httpandhttps; anything else is refused. - Choose the format — see below. When in doubt, use Generic.
The e-mail notification is untouched by this. You can run both side by side, or leave the e-mail recipients empty and rely on the second channel alone.
Which format
- Generic (JSON) sends the details as separate fields: sender, subject, time, error message. That is the right choice for an alerting service, a script of your own, or a flow in Microsoft Power Automate — and therefore also the way to Microsoft Teams.
- Slack, Mattermost, Rocket.Chat sends a single block of text, the way those services expect it. You get the address there under "Incoming Webhook".
What is transmitted
Exactly what the alert e-mail contains: the name of the site, the subject of the failed message, the sender, the recipient addresses, the time, the mail server's message and the reference of the log entry. Nothing more.
The recipient addresses leave your site in the process. If your chat service is hosted by someone else, those addresses travel there. That is a decision for you to make — check that it fits your record of processing activities. The message body is never transmitted.
When the channel does not answer
Nothing further happens. If the address cannot be reached, answers too slowly or refuses, that one alert is lost and the event goes into the Joomla log. The page request carries on as normal — after five seconds at most, there is no more waiting.
That is deliberate: the channel speaks up at a moment when something is broken already. It must not turn that into a second fault.
How often it reports
The second channel keeps to the same throttle as the e-mail: within the window you set there is one message, further failures are counted but not reported one by one. A mail server that is down gets you one notification, not four hundred.
Send routes (Pro)
Pro version. This feature is part of the Pro version of Mail Log. What the Free version does is covered under Free version and Pro version.
Read this before you switch anything on. Mail Log watches your mail and does not interfere. The queue and the backup route only act once a delivery has already failed. Send routes are the one exception: here Mail Log changes a send that would otherwise have run perfectly normally.
That is deliberate, and it is off by default. If you switch it on, it is on you that the accounts you enter actually work — a route set up wrongly costs you the delivery of exactly the messages you assigned to it.
Every rule row has its own Test the connection button. It works exactly like the one described in the Backup send route chapter: it checks that row's values, no test mail is sent, and an empty password box means "unchanged".
What it is for
An order confirmation and a newsletter have nothing in common but the technology. Send both over the same outgoing server and they share its reputation: complaints about the newsletter hit the password reset, and sooner or later that lands in the spam folder.
Send routes keep them apart. You define a rule — "everything to @bigcustomer.com", say, or "subject contains Newsletter" — together with the server those messages should take. Everything else keeps to the usual way.
Setting it up
- In Options, open the Send routes tab and switch on Use send routes.
- Add a row: field (subject, sender or recipient), comparison and value — the same vocabulary as the log rules.
- In the same row, enter the outgoing mail server, plus port, encryption and, where needed, credentials.
- If the provider insists on a sender address registered with them, enter it under Different sender address.
Which rule applies
The first one that matches — top to bottom. The search stops there. So order your rows from the specific to the general: the exception at the top, the broad rule below it.
If no rule matches, the message goes the ordinary way. The same holds for rows without a server and for accounts whose password can no longer be read — after the security key of your Joomla installation was changed, for instance. A rule failing costs you the special treatment, never the delivery.
What a route does not change
Nothing about the message itself: not the subject, not the content, not a single recipient. Only server, port, encryption, credentials and — if you enter one — the envelope sender address are changed. A rule therefore cannot affect what the reader receives.
Working with the other features
- The log records every message as usual. There is one entry, not two.
- The backup route applies here too: if a message fails on its route, the backup route is tried. Rules are not applied again — otherwise the second attempt would land on the same server as the first.
- The queue then retries as usual.
Return channel: what comes back when a mail does not arrive (Pro)
Pro version. This feature belongs to the Pro version of Mail Log. What the free version can do is described under Free version and Pro version.
An e-mail your mail server has accepted is not yet delivered. The recipient's server only checks afterwards whether the address exists at all and whether it wants the message. If it refuses, it sends a report back — to the mailbox of your sender address. As a rule, nobody reads it there.
That mailbox is what the Pro version fetches. It sorts what it finds, matches every report to the message it belongs to and draws conclusions from it — see the chapter Suppression list.
What Mail Log tells apart
| Kind | What is behind it | Consequence |
|---|---|---|
| Permanently undeliverable | The address does not exist, the mailbox was deleted. Status codes of the form 5.x.x. | The address is suppressed immediately. |
| Temporary | Mailbox full, server briefly unreachable, greylisting. Codes of the form 4.x.x. | Counted. Suppressed only once a threshold is reached. |
| Complaint | Someone marked your mail as spam and their provider reports it back. | The address is suppressed immediately. |
| Automatic reply | Out-of-office notice or similar. Not an error, just information. | None. |
| Not classified | A report that could not be identified with confidence. | None. It stays in the list so that somebody can look at it. |
The last row is deliberate. A report Mail Log does not understand is not proof of anything — deriving a suppression from it would shut out genuine recipients as soon as some unrelated mail lands in the box.
Setting up the mailbox
Open Options → Return channel → Mailbox.
| Collect from mailbox | The main switch. Off by default. |
| Access method | POP3 collects the messages, IMAP leaves them in place and remembers what it has already examined. When in doubt, POP3. |
| Server and Port | Your provider's incoming mail server. 995 for POP3 and 993 for IMAP are usual, both fully encrypted. |
| Encryption | Throughout (TLS) wherever the provider offers it. Without encryption your credentials travel the network in the clear. |
| Credentials | By default Same as for sending: Mail Log logs in with the same details Joomla sends with (System → Global Configuration → Server → Mail). Then there is only one password to maintain — see below. For a separate mailbox choose Separate ones for this mailbox; only then do the next two fields appear. |
| User name and Password | Only with separate credentials. Usually the full address of the mailbox. The password is stored encrypted and never shown again; leave the box empty and the stored password stays as it is. |
| Folder | IMAP only. INBOX is the inbox. Write
subfolders the way the server names them, not the way your mail program shows
them: depending on the server the delimiter is a dot or a slash, subfolders of the inbox
often start with INBOX., and upper and lower case matter (except for
INBOX). What your mail program calls Archive/DMARC may be
INBOX.Archive.DMARC on the server. Accented letters can be entered as they
are. When in doubt, use Test the connection: if the folder does not exist, the
test lists the ones that do. |
| After collecting | What happens to a processed report: delete, keep or move to a folder. Only IMAP mailboxes can move. The Target folder has to exist in the mailbox already and is written like the Folder field. |
| Maximum per run | How many messages one run collects. A mailbox with thousands of old reports would otherwise run into the time limit and start from the beginning next time. |
| Collection interval | How often collection happens. Mail Log creates the matching task in the task scheduler when you save — see below. |
| State | Not a field but a statement: whether collection is really running, when it last ran and when it is due again. |
Why the credentials are not entered twice. Whoever sends through a provider usually collects there too: the same account, the same password, only a different server and a different protocol. Typed in a second time it is mostly a source of error — at the next password change you update one place and forget the other, and collection fails silently.
So by default Mail Log uses the sending credentials and stores no second password at all.
Server, port and encryption remain separate fields, because those genuinely
differ: smtp.example.net:587 for sending, pop.example.net:995 for
collecting. Guessing them would be convenient and wrong.
If your site does not send over SMTP but through PHP mail or Sendmail, there is nothing to take over. The connection test says so and points to the separate fields.
Under Evaluation there is also Store the full report. With it switched on, Mail Log keeps the incoming report as it arrived — useful when a report was not recognised properly. A bounce report carries the original message with it, so it is encrypted exactly like the raw copy of an outgoing message as soon as you switch on encryption in the Complete message section.
How does the remote server know where to reply?
From the message itself — not from the visible From, but from the
envelope sender. Every e-mail carries two sender addresses: the one in the
letterhead, which you and your recipients see, and the one on the envelope, which is negotiated
between the mail servers only. Bounce reports always go to the envelope sender. In the report
that comes back it appears as Return-Path.
Joomla sets both to the same address: the sender e-mail from System → Global Configuration → Server → Mail. Nothing has to be configured for the reports to arrive — they land in the mailbox of your sender address. That is the mailbox you enter above.
One exception worth knowing: many mail providers replace the envelope sender with the account your site authenticates as when sending. The reports then arrive there and not at your sender address.
How to find out for certain: have your site send you a mail and look at the
Return-Path header in the copy you receive — the mailbox of that address
is the right one.
Why Mail Log does not suggest a separate bounce mailbox. A mailbox used only
for reports would be nicer: Mail Log could tidy up in it without ever touching your customers'
mail. That would require the envelope sender to differ from the visible From — and
Joomla has no setting for it. Simply changing the sender address to bounce@… would
be the wrong way round: that address would then appear on every mail your site sends, and
anyone replying would be writing to the bin.
If your provider replaces the envelope sender anyway (see above), you already have the separate mailbox — it is the one belonging to the sending account.
Checking that the credentials are right
Below the fields there is Test the connection. The button tries the values currently in the form — saved or not. It checks the connection, the encryption, the login and, with IMAP, the folder — and the target folder too when After collecting is set to Move to a folder. It also reports how many messages are in the mailbox: a zero where there should be hundreds usually means the wrong mailbox is configured.
If either folder does not exist on the server, the test says so and lists the folders that do, together with the server's delimiter — for example Delimiter “.” — Folders: INBOX, INBOX.Archive.DMARC, INBOX.Sent …. Take the right name from there. With a great many folders the first 60 are shown and the rest as a number.
Nothing is fetched, read or deleted during the test.
How often collection happens
Collection only happens when a scheduled task triggers it — Joomla fetches nothing by itself. Mail Log takes care of that: as soon as you switch collection on and save, it creates the task Mail Log: collect delivery reports in the task scheduler, with the interval you chose under Collection interval. Change the interval and the task follows on the next save. Switch collection off and the task is disabled — it is never deleted, your settings stay.
The State box below tells you where you stand at any time. It distinguishes the four cases that otherwise all look the same — namely, like nothing:
| There is no task yet | It is created on the next save. |
| The task is switched off | It is switched on again on the next save. |
| The task scheduler does not run | No scheduled task has ever run on this site. This is the one obstacle Mail Log cannot clear by itself — see below. |
| Everything is in place | With interval, last run and next run. |
The task scheduler has to run. Joomla does not execute scheduled tasks on its own — it needs either a cron call on the server or the Lazy Scheduler setting, which lets tasks run along with site visits. If the task is there and still nothing happens, this is almost always why. How execution is set up can be seen under System → Scheduled Tasks.
- Collect now — runs the collection at once, without waiting for the next interval. What runs is the same task that would run at night; what was read and processed is then in the task's log. For the first run after setting things up this is the shortest way. The same button sits at the top of the Bounces and DMARC screens and in the DMARC reports section of the options; on the screens the view reloads after the collection, so you see the result straight away.
- Open the task in the task scheduler — where the log, the counters and the execution rules live. The link only appears if you are allowed to use the task scheduler.
You keep the last word. The task Mail Log creates carries a note saying that Mail Log maintains it. Remove that note and the task is yours: Mail Log then changes neither its interval nor its state and only reports on it. That way you can, for instance, enter a cron expression the drop-down does not offer.
The Bounces screen
Under Mail Log → Bounces you see what came back: time, kind, recipient, status code, the remote server's reason in its own words and the matched message. Below the recipient stands the refusing server, where it was named; a red Suppressed shows that the address is already on the suppression list.
You can filter by kind, period and free text; the search covers recipient, subject, reason, status code and message ID.
- Suppress recipient — puts the addresses of the selected rows on the suppression list by hand. Useful for the cases Mail Log does not suppress on its own: a stubborn temporary refusal, say, or a report that could not be classified.
- Delete — removes bounces from the list. Nothing can be edited here: what the remote server answered is a record, not a form.
Export CSV in the toolbar downloads every bounce the current filter shows — not just the current page. Per row: time (UTC), kind, recipient, status code, reason, refusing server, subject, message ID, the matched log entry and whether the address is suppressed. The read permission is enough for this.
How a report is matched to its message
Mail Log tries two ways, in this order:
- By message ID. Proper bounce reports include the header of the original message, and that carries its Message-ID. Mail Log has recorded that identifier since version 1.1.0 — this is an equality, not a guess.
- By recipient and time window. If the remote server does not include the identifier, Mail Log looks for the most recent message to the same address within the configured window (Options → Return channel → Evaluation, seven days by default).
The second way can get it wrong — which is why it is the second, and why a report would rather stay unmatched: it then appears in the list marked Not matched. That is more honest than a wrong match nobody will ever notice. A larger window raises the hit rate and the number of wrong matches alike.
Reports that are not matched still count. They arise, for example, when the original log entry has since been removed by the retention policy, or when the message went out before Mail Log was installed.
In the log and on the dashboard
- In the log list every message that received a bounce carries an extra badge — next to the send status, not in its place. "Sent" is still correct: the message did leave your mail server. The Bounce filter narrows the list to those messages.
- On the dashboard there is a strip with the undeliverable rate for the configured period, broken down by kind, plus the number of suppressed addresses. It is measured against the number of messages sent; automatic replies and unclassified reports do not count. The strip only appears once fetching is switched on — before that a zero would not be information but a claim.
As a rule of thumb: below one per cent is unremarkable, above two per cent you should look at your recipient list. What matters more than the rate, though, is its make-up — a handful of complaints weighs more than a lot of full mailboxes.
What happens to mail that is not a bounce report
Nothing. It is read, not recognised and left in place — not deleted, not moved, not marked as read, not even when “After collecting” is set to Delete. The task log counts it separately, for instance “12 read, 3 processed, 9 left alone”.
But it is only looked at once. Mail Log remembers which messages it has
already examined and skips them on the next run without even fetching them. It uses the
protocol's permanent identifiers for that (UIDL with POP3, the UID with IMAP) —
nothing about the message itself is changed.
Whether a message is marked as read makes no difference. If the mailbox is also open in a mail program, a bounce or DMARC report is often marked as read there before the fetch runs. With IMAP, Mail Log therefore examines everything unread plus everything from the last 30 days, read or not; POP3 has no read flag, so only the memory counts there anyway.
One exception is not remembered: a report whose attachment could not be unpacked in this run. It stays in place and the next run tries again. The log counts such messages separately (“… to retry”) and gives the reason below.
Why this matters. Without that memory every run would read the same foreign mail again and use up the maximum per run. In a mailbox that also holds ordinary mail this would eventually mean: every run collects a hundred foreign messages and never reaches the reports behind them — with no error and a green state.
The list is kept in step rather than piling up: whatever is no longer in the mailbox is forgotten on the next run. Change the mailbox and it starts over.
If your server cannot do UIDL — rare, as the command is optional in the standard
— collection works as before and looks at every message on every run. A mailbox used only for
reports is the better choice then.
Limits
- Mail that is not a bounce report is left untouched — even with the “delete” setting. It is not deleted, not moved and not marked as read. Mail Log only touches what it recognised as a bounce report and processed.
- Not every server reports back. Some receiving systems accept messages and discard them silently. No return channel helps against that, only sound domain health.
- Complaints only reach those who are registered. The feedback loops of the large providers require the sender to sign up. Without that you see undeliverable mail but no spam markings.
- Fetching needs outgoing connections to your incoming mail server. Where the host blocks them, the task reports a connection error.
The same mailbox carries something else
This mailbox receives more than bounce messages: the daily DMARC reports arrive here too — if you point them here. Mail Log sorts out which is which while collecting; anything that is neither is left untouched. How to switch the reports on and what they say is explained in the chapter DMARC.
Suppression list (Pro)
Pro version. This feature belongs to the Pro version of Mail Log. What the free version can do is described under Free version and Pro version.
The suppression list holds the addresses that should no longer be written to. It grows out of the reports Mail Log fetches — see the chapter Return channel.
Why it exists
Keep writing to addresses that demonstrably do not exist and you damage your own standing with the receiving server. Large providers read a high undeliverable rate as the mark of a sender who does not maintain their list — and then downgrade the mail to your valid recipients too. It ends up in the spam folder, or is refused outright.
The suppression list is therefore not a convenience but deliverability protection: it protects the mail to everybody else.
When an address gets on it
| Reason | When |
|---|---|
| Permanently undeliverable | Immediately, the first time. An address that does not exist will not start to. |
| Complaint | Immediately. Someone who marked your mail as spam does not want it — a second attempt makes things worse, not better. |
| Unreachable too often | Only once a threshold is reached. A full mailbox is often empty again the next day. |
| Added by hand | When you do it — via the form at the top or straight from a bounce report. |
You set the threshold under Options → Return channel → Evaluation: Suppress after … temporary failures and the period for that. Only what falls inside that window is counted — an address that was unreachable three times two years ago is not a case today.
A further event does not overwrite the reason. An address suppressed because of a complaint stays suppressed for that reason, even if a temporary failure comes in afterwards. The events counter still goes up.
What a suppression does
Mail Log refuses to resend to a suppressed address — both through the button in the detail view and through the queue. The error message names the address concerned, so that you know which one to release if you want to. To and Cc are checked; a blind copy is not something the recipient sees anyway.
A suppression does not stop Joomla's own sending. If somebody registers again with a suppressed address, or a newsletter tool adds it back, the mail goes out — Mail Log records it but does not hold it back. The send path belongs to Joomla, and an extension that quietly inserts itself into it would be the wrong place for this.
The suppression list is therefore a statement about which addresses are dead. What follows from it is your decision — usually: remove the address in the source it came from.
Adding and releasing by hand
Under Mail Log → Suppression list:
- Add — address into the form at the top, optionally with a note (such as "customer asked to be removed"), then Suppress. Upper and lower case do not matter; the address is stored in lower case.
- Release — select rows, then Release. Mail is written to the address again from then on. The bounces that led to the suppression are kept; if a new permanent failure comes in, the address is back on the list.
You can filter by reason and free text (address and note). The events column counts how often the address has come up — a high number on a temporary suppression is a hint that the mailbox was not just briefly full.
Export CSV in the toolbar downloads the list as the filter shows it: address, reason, events, first and last event (UTC) and note — for instance to reconcile the suppressed addresses with a newsletter tool.
Who may do this
Adding and releasing depend on the Manage the suppression list permission (Options → Permissions). Whoever holds it decides who this site still writes to — grant it sparingly. Viewing and exporting the list only need the ordinary read permission; deleting bounces depends on the log's delete permission.
When switching back to the free version
The suppression list stays stored and is merely no longer shown or maintained. Install the Pro version again later and it is there unchanged.
DMARC: who sends in your name (Pro)
Pro version. This feature belongs to the Pro version of Mail Log. What the Free version does is described under Free version and Pro version.
Every day the large e-mail providers send reports about who has been sending in your name and whether that mail could identify itself as yours. These DMARC reports arrive as compressed XML in a mailbox — which is why in practice nobody ever reads them. Mail Log collects them, unpacks them and answers one question from them: is this still our sending?
What a report answers — and what it does not
A report says: “During the day, 42 messages came from this IP address carrying your domain in the sender. 40 of them could identify themselves, 2 could not.” It does not say whether the mail was read, and it names no recipients and no subjects — an aggregate report contains figures, not messages.
“Identify itself” means: the message either carried a valid DKIM signature of your domain or came from a server your SPF record allows. One of the two is enough. That is why a forwarded message is not a problem: forwarding breaks SPF and leaves the signature intact.
Setting it up: three steps
- Set up the return channel. The reports arrive in the same mailbox as the bounce messages. How to enter it is described in the chapter Return channel. Without the mailbox collection nothing arrives.
- Publish the report address in DNS. Your DMARC record has a part for this:
rua=mailto:…. Here you decide where the reports go — unlike the bounce messages, whose address is dictated by the sending path. Enter the address of the mailbox Mail Log collects from. Domain health shows you the finished record. - Switch the evaluation on. Options → Return channel → DMARC reports → Evaluate reports.
Patience for the first one. Providers send once a day and report on the previous day. After publishing the DNS record it therefore takes up to two days for the first report to arrive — and only if mail was sent from your domain during that time.
The DMARC screen
The screen reads from top to bottom as one answer in three stages. At the very top it says when the mailbox was last collected and when that happens next. Collect now picks up new reports straight away, without waiting for the next scheduled run; the page then reloads. The same button is on the Bounces screen and in the options: both read the same mailbox in one run.
The figures
| Figure | What it says |
|---|---|
| Passing - your own sending | The share of your own messages that could identify themselves. This is the one number to keep an eye on. Servers you have marked as foreign do not count — a forger should not drag your share down. |
| Sorted out - your own sending | What the receiver put in the spam folder or rejected of your own mail. This should be zero. |
| Foreign servers | How many messages came from servers you have marked as foreign, and how many of them the receiver sorted out. If that is most of them, your policy is working. |
| Sending servers | How many different servers sent in your name during the period, how many of them are still unjudged, and how many messages the reports describe in total. |
If your policy is still set to none, the screen says so in a notice of its own: the
receivers then only report and sort nothing out. Once your own sending passes reliably,
quarantine is the next step — Domain health shows the finished record.
Over time shows your own sending per day: green for what passed, red for what did not, with volume and share next to it.
Who sends in your name
The second list is the actual work. It shows every server that sent mail carrying your domain, with volume, passing share and — where it can be resolved — its name. Mail Log recognises well known sending services and labels them. The Proof column shows a tick or a cross for DKIM and SPF: passed or not.
Every row gets a verdict from you. How to tell: only a server that is listed in your SPF record or signs with your DKIM key can pass — and only you decide both. If its mail passes completely, it is almost certainly yours. If it fails, the name helps: does it belong to your host, your mail provider or a service you use (newsletter, shop, CRM)? Then it is your sending. If you do not know it, it is foreign.
The Assessment column does the reading for you: for every server it says what the proof suggests, and the obvious button is filled in. The decision stays with you.
| Verdict | What it does |
|---|---|
| That is us | The server counts as your sending and therefore towards the share. If its mail does not pass completely, a notice appears at the top, and the assessment names the missing record — SPF, DKIM or both. |
| Foreign | The server no longer counts towards your share but under Foreign servers. That its mail fails is then a good sign: DMARC recognises the forgery. If it passes anyway, the screen reports it — your SPF record or your key admits this server, and the record is too broad. |
| Withdraw | Open again. Open servers count as your sending until you say otherwise — a failing one should stand out, not disappear. |
The verdict is yours and it stays, even once the reports the address came from have long fallen to the retention period.
One of your own services with a red share is the most common find. It almost never means an attack; it means a missing record: the newsletter service is not in your SPF record, or its DKIM key is not published. Mark it with That is us; the assessment then says what is missing, and Domain health shows the finished record to copy.
Servers as CSV in the toolbar downloads this list — every server in the chosen
period, not just the first fifty the screen shows. Per row: address, reverse name, recognised
service, volume, passed, share in per cent, passed via DKIM and via SPF, verdict (own,
foreign, open), assessment and last seen (UTC). One row per server, not
per report line: the same source appears again in every daily report.
The reports
Last comes the list of reports that came in: period, reporter, domain, volume, share and the published policy — point at it to read what it does. XML downloads the original document — for the case where a number looks odd and somebody wants to see what the provider actually wrote.
What else Mail Log does with the reports
- Takes over selectors. A report names the DKIM selector your sending path signs with. Mail Log remembers the ones that demonstrably work and checks them in domain health on its own — you do not have to enter them.
- In the periodic report. The share and the number of unjudged sources appear in the weekly or monthly report, if you have switched it on.
- On the dashboard. A strip with the share and the open sources.
- The dashboard and the report calculate the share exactly like the screen: over your own sending only, without the servers marked as foreign.
Retention
Two periods, because these are two different things: the evaluated figures stay for a year by default — that makes the question “was it like this last summer?” answerable. The original document stays for three months; it is rarely needed and only for a short while. After that the report stays in the list, only without its attachment. The clean-up is done by the maintenance routine Clean up old log entries, which runs anyway.
When nothing arrives
The screen tells you why — it distinguishes four cases: the evaluation is off, the mailbox
collection is off, there is no scheduled task, or the site's task scheduler never runs at all. If
no notice is shown and the screen is still empty, check the rua= part of your DMARC
record: does it really point at the mailbox Mail Log collects from?
Reports for other domains. Mail Log stores every report it finds and names the domain it is about in the list. If a domain appears there that is not yours, somebody has entered your address as their report address — annoying, but harmless. The domain filter hides them.
DKIM signing (Pro)
Pro version. This feature belongs to the Pro version of Mail Log. What the Free version does is described under Free version and Pro version.
A DKIM signature is a seal on your outgoing mail: it lets the receiver check that the message really comes from your domain and was not altered on the way. Mail Log can apply that seal — for installations whose sending path does not do it itself.
First check whether you need this. Most mail providers and all sending services already sign. Look at Domain health: if a DKIM record is found there, somebody is signing — then leave this feature off. Signing twice is allowed, but it gains nothing and makes the next key change error-prone.
The order is the actual feature
Four steps, and they belong in exactly this order:
- Generate the key. Options → Delivery → DKIM signing. Mail Log generates an RSA key pair (2048 bits) and stores the private part encrypted, as a file below the log directory — never in the database. More on that under Where the key lives.
- Publish the DNS record. Below it, what has to be entered appears: a name
like
maillog._domainkey.your-domain.comand a long value starting withv=DKIM1; k=rsa; p=…. Type: TXT. You enter that at your domain provider, or forward it to their support. - Have it verified. The button Check publication looks the record up and compares it with the stored key. Only when it says “matches” is everything ready. After publishing, this can take up to a day.
- Switch it on. Only now set Sign outgoing messages to Yes.
Why not switch it on right away? A signature whose key cannot be found in DNS is worse than none at all: the receiver then sees a failed check instead of no check — and a failed check is exactly the marker spam filters use to recognise forgeries.
The two fields above
| Field | What belongs there |
|---|---|
| Domain | Leave it empty. Mail Log then takes the domain of the sender address from the Joomla configuration — and that is exactly what the receiver compares against. Entering a different domain produces a valid signature that still does not count for DMARC. |
| Selector | The name the public key is published under in DNS. maillog is the default
and does not disturb an existing selector of your provider — several selectors may stand
side by side. |
Where the key lives
As a file below your Joomla installation's log directory
(…/com_maillog/dkim/), readable only by the web server user and
encrypted — with the same method as your stored credentials, derived from the
secret in your Joomla configuration.
Why encrypted, when the file is protected anyway? Joomla's default log
directory is administrator/logs — right inside the web directory. Mail Log puts
blocking files there, but those only work on Apache; on an nginx server they do nothing. While
checking this version, the key really was retrievable that way on the test instance. Encrypted,
it still is — but the content is worthless: without your configuration.php, which
no web server hands out, it cannot be deciphered.
If your host allows a log directory outside the web directory, that is still the better setting (System → Global Configuration → Server → Path to Log Folder).
If your Joomla secret is renewed, the DKIM key can no longer be deciphered. Mail Log then stops signing — silently, and without disturbing the sending. Generate a new key in that case and publish the new DNS record.
When moving to another server the file does not travel automatically if you only transfer the database and the web directory. Either generate a new key in the new place and publish the new record — or copy the file along.
Generating a new key
How you can tell it works
- Domain health finds the selector and reports the key length.
- In the DMARC reports the share of messages that identified themselves via DKIM rises — visible in the Proof column of the source list.
- The source of a received message carries a
DKIM-Signature:header with your domain.
What happens if something is missing? If the key, the domain or the selector is missing, Mail Log does not sign — silently, and the mail goes out as before. A logger must not prevent sending, and that holds for the one feature that reaches into the sending path too.
Changelog
This changelog lists every released version of Mail Log, the most recent first.
This page is generated automatically from the product's changelog file when a release is made. Changes made by hand are lost at the next synchronisation.
Version 1.5.0 – 27 October 2026
Added
- Pro version: If “Test the connection” cannot find the IMAP folder you entered, it now lists the folders that exist on the server. The target folder for moving is checked as well.
Changed
- Pro version: The options and the manual now explain how to write subfolders for the return channel, for example INBOX.Archive.DMARC.
Fixed
- Pro version: Folders with accented letters in their name can now be used for the return channel.
Version 1.4.1 – 23 October 2026
Fixed
- Pro version: DMARC reports from WEB.DE, GMX and other providers are now recognised instead of ending up among the bounces as auto-replies.
Notes
- Misfiled reports are removed from the bounces during the update. If the mailbox is set to “leave”, the next fetch moves them into the DMARC evaluation.
Version 1.4.0 – 4 October 2026
Added
- Pro version: You can now collect bounces and DMARC reports right on their screens with “Collect now”, without a detour through the options.
- Pro version: The DMARC evaluation says for every sending server what the proof suggests and is easier to read: ticks and crosses for the proof, a notice while the policy is “none”.
- Pro version: Bounces, the suppression list and the sending servers of the DMARC evaluation can now be downloaded as CSV – everything the filter shows.
- Pro version: The dashboard now shows the queue too: how many messages are waiting for another attempt and how many were given up.
Changed
- Pro version: Servers you mark as foreign no longer count towards your DMARC rate. One of your own servers that does not pass shows up as a task.
Fixed
- Pro version: The scheduled fetch now reliably picks up DMARC reports – including ones already marked as read in a mail program, and zip attachments on any server.
Notes
- Pro version: The DMARC rate may differ after the update: it now covers your own sending only.
Version 1.3.0 – 24 September 2026
Added
- Pro version: Mail Log collects the daily DMARC reports from your mailbox and shows who sends in your name and whether that mail could identify itself as yours.
- Pro version: Outgoing messages can be signed with a DKIM key of your own: generate the key, publish the DNS record, have it verified, switch it on.
Fixed
Notes
- Pro version: For reports to arrive, the rua=mailto: entry in your DMARC record has to point at the return channel mailbox. Domain health shows the matching suggestion.
Version 1.2.0 – 21 September 2026
Added
- Pro version: Mail Log now fetches the mailbox of your sender address and sorts what comes back: two new screens, a badge in the log list and the undeliverable rate on the dashboard.
- Pro version: Dead addresses and complaints suppress automatically, which protects the rest of your mail. Messages in the mailbox that are not reports are left untouched.
- Pro version: Wherever a domain health record can be worked out, the finished value is shown with a copy button; what only your provider knows is marked as a gap.
Fixed
- Small things: the “Options” button is now on every screen, the product name and version at the foot of every screen, and Domain health shows its result when opened first.
- An SPF record that points elsewhere with redirect= now counts as fine. Until now it was reported as incomplete — and the advice would have switched the redirect off.
Notes
- Pro version: The return channel is switched off by default. Enter server and port, test, save — Mail Log handles credentials, task and interval, and “Collect now” starts it at once.
Version 1.1.1 – 20 September 2026
Fixed
- The "Check now" button on the Domain health screen works again. Until now it broke off with a message about security tokens.
- So does the "Download EML" button in the toolbar of a log entry.
- After adding a DKIM selector you now see only the current finding. Until now the old "no selector named" message stayed next to it.
Version 1.1.0 – 20 September 2026
Added
- Mail Log now comes in two versions: the free one and the Pro version. The Free version does everything you know today.
- Every entry now shows the Message-ID the mail left the mail server under. You can search for it too.
- Pro version: GDPR information and erasure requests now cover the mail log too — through Joomla's own privacy administration.
- Pro version: On request a periodic summary arrives by e-mail: how much went out, what failed, and whether anything changed about your sender domain.
- Pro version: If a send fails, the message goes out over a second account straight away — and if that does not work either, it is retried automatically later.
- The dashboard now shows a traffic light for SPF, DKIM, DMARC and MX of your sender domain. It tells you whether your mail passes as genuine at all.
- Pro version: Failed sends can also be reported over a web address — to a chat room, for instance. A message about broken mail rarely arrives by mail.
- Pro version: Particular messages can be sent over a different outgoing mail server than the rest — newsletters apart from order confirmations, for instance.
- In the Free version a card on the dashboard and on the queue page advertises the Pro version. The log screens stay free of it.
- Pro version: Every domain health finding now comes with what to enter in order to fix it.
- Domain health is on by default and runs once, the first time you open the dashboard.
- Pro version: Below the credentials of a second send route there is now a "Test the connection" button. It checks what you have just entered, without saving.
- Domain health has a screen of its own. The dashboard panel now only shows which check is failing.
- Pro version: There you see, for each check, what is actually in your domain's DNS — and what to change when something is wrong.
Changed
- Domain health now explains, in both versions, what SPF, DKIM, DMARC and MX are actually about.
- Pro version: Every finding now says in plain words what to do — and a section of its own explains where such a record goes and which three fields to fill in.
- The two editions are now called Free version and Pro version everywhere — the same names the shop uses.
- The interface is tidier: the options have seven tabs instead of sixteen, and every screen leads to the other two.
- The dashboard shows volume for the last 30 days, with domain health beside it instead of below.
- Pro version: In the Joomla menu under Components the Pro version now reads "Mail Log Pro".
Fixed
- A deleted DKIM selector kept its old finding. Domain health therefore showed DKIM twice.
- If the outgoing mail server fails completely, the mail now shows up in the log as failed. Until now it was missing entirely.
- The title of the options screen showed an internal key instead of "Mail Log Options".
- After an update the browser sometimes still served the old styling until you force-reloaded the page. That no longer happens.
- The notification about a failed send showed internal abbreviations instead of text.
Notes
- The ID is recorded from the update onwards. Older entries leave the line empty.
- Pro version: On an erasure request the log entries are removed for good. Check beforehand whether a statutory retention period applies.
- Pro version: The report is off by default. Switch it on under "Report" in the options and create the "Send report" task in the scheduler.
- Pro version: Queue and backup route are off by default. Switch them on in the options and create the "Work through the queue" task in the scheduler.
- The panel runs one check by itself the first time you open it. For a daily check, create the "Check domain health" task in the scheduler.
- Pro version: The second channel is off by default. Enter the address under "Alerts" in the options. The recipient addresses of the failed message leave your site in the process.
- Pro version: Send routes are off by default and the only setting with which Mail Log interferes with ordinary sending. Read the manual chapter before switching them on.
- Pro version: No test mail is sent: the connection is established and the login checked, nothing more.
- In the Free version the Pro version's settings are shown but locked.
Version 1.0.5 – 18 September 2026
Fixed
- On PHP 8.5 every page showed warnings about outdated functions at the top. They are gone.
- The links in the overview panel always led to the German manual. They now follow the configured language.
Version 1.0.4 – 12 August 2026
Changed
- The installation details of the three parts were cleared of entries that had no effect, so that the package passes the review of the Joomla! Extensions Directory.
Fixed
- An English message in the overview ended with a superfluous space.
Version 1.0.3 – 1 August 2026
Changed
- The package and its three parts now carry meaningful names in the extension manager; technical abbreviations stood there before.
Version 1.0.2 – 31 July 2026
Added
- Emails from command line and scheduler runs are logged; nothing was captured there before.
- The option "logged contexts" now actually takes effect. With no selection, every context is still logged.
- The list points out entries from earlier versions that cannot contain a message text, and links them for deletion.
Changed
- Downloading the raw message now additionally requires the permission "view message text". Groups without it lose the download; super users are not affected.
- New installations log completely out of the box: full message text, raw message and mails with a sensitive subject as well. Existing installations keep their settings.
Fixed
- The message text of logged emails always stayed empty. It is captured again, as are attachments, reply-to, headers and the error message of failed deliveries.
- Resending from the log works again — without a stored message text it was not possible.
- With encrypted storage the masking patterns for sensitive content never took effect. Masking now happens before encrypting.
- On fresh installations nothing was masked although the options showed two masking patterns as active.
- The detection of HTML messages now also covers multipart messages and a plain-text alternative that has been set.
- With a truncated message text stored, the detail view did not show the original size.
- Saving the options made attachments from versions before 0.1.0 inaccessible because their storage location was lost.
- The options button appeared for groups without the necessary permission and refused the click.
Version 1.0.1 – 31 July 2026
Added
- After an installation or update an overview panel appears with version, status and entry points to getting started, download key and manual.
- A click on "Enable updates" leads straight to the update sites, already filtered to missing download keys.
- The extension manager now shows the list of changes behind the version number.
Language
- The messages shown during installation and update are available in German and English.
Version 1.0.0 – 20 July 2026
Added
- Initial release.