
Prive berichten in Joomla
Joomla heeft een kleine mailbox ingebouwd in de beheeromgeving die de meeste beheerders nooit opmerken. Wanneer je inlogt en Joomla je waarschuwt dat er een update beschikbaar is, of dat er iets je aandacht nodig heeft, komt die melding vaak binnen als een privebericht. Met hetzelfde systeem kun jij en je mede-beheerders korte notities naar elkaar sturen zonder het configuratiescherm te verlaten.
Dit artikel legt uit hoe de Priveberichten-component van Joomla (com_messages) echt werkt. Het behandelt de basis voor eigenaren en redacteuren, de dagelijkse instellingen voor beheerders, en de technische details voor ontwikkelaars - de databasetabellen, het PHP-model, de e-mailmeldingen en de REST API.
Een ingebouwde inbox voor je beheerteam, verstopt in het volle zicht onder het Gebruikers-menu.
Het doel is simpel: je genoeg inzicht geven in Priveberichten om ze bewust te gebruiken in plaats van erdoor verrast te worden.
1. De Basis
1.1 Wat is de Priveberichten-component?
De Priveberichten-component (com_messages) is het ingebouwde hulpmiddel van Joomla om korte, interne berichten tussen backend-gebruikers te versturen. Het maakt al vele jaren deel uit van de Joomla-kern en bevindt zich volledig in de beheeromgeving.
Wat het kort gezegd doet:
- Het laat een backend-gebruiker een bericht (onderwerp plus tekst) sturen naar een andere backend-gebruiker.
- Het slaat elk bericht op als een rij in de databasetabel
#__messages. - Het kan de ontvanger een e-mail sturen wanneer er een nieuw bericht binnenkomt.
- Het is ook het kanaal dat Joomla zelf gebruikt om Super Users over belangrijke gebeurtenissen te informeren.
Zie het als een klein intern postvak. Het is geen frontend-chat, geen contactformulier en geen nieuwsbrieftool. Het is een rustig notitiesysteem van beheerder naar beheerder.
1.2 Wie kan een bericht ontvangen?
Dit is het allerbelangrijkste feit over Priveberichten: je kunt alleen een bericht sturen naar een gebruiker die mag inloggen op de backend. Een gewone, alleen-frontend geregistreerde gebruiker kan geen privebericht ontvangen, omdat die geen backend-inbox heeft om het in te lezen.
Joomla controleert twee dingen over de ontvanger voordat het verstuurt:
- De ontvanger moet kunnen inloggen op het beheer (
core.login.admin). - De ontvanger moet de rechten Beheren hebben op
com_messages(core.manage).
In de praktijk betekent dit dat Managers, Administrators en Super Users berichten kunnen uitwisselen. Auteurs en geregistreerde bezoekers niet.
1.3 Waar vind ik het?
In de Joomla 6-backend is het menupad:
Users → Private Messages
Onder dat menu vind je drie acties:
| Menu-item | Wat het doet |
|---|---|
| New Private Message | Opent het opstelformulier (ontvanger, onderwerp, bericht). |
| Read Private Messages | Opent je inbox - de lijst met berichten die aan jou zijn gestuurd. |
| My Settings | Je persoonlijke opties (inbox vergrendelen, e-mail bij nieuw, auto-opschonen). |
De component staat in administrator/components/com_messages/. Er is geen frontend-map - met opzet. Het is een tool die alleen in de backend werkt.
2. Een bericht versturen en lezen
2.1 Het opstelformulier
Open Users → Private Messages → New Private Message. Het formulier is bewust klein. Het heeft precies drie velden:
| Veld | Toelichting |
|---|---|
| Recipient (ontvanger) | Een keuzelijst van gebruikers die berichten mogen ontvangen. Verplicht. |
| Subject (onderwerp) | Een korte titel in platte tekst voor het bericht. Verplicht. |
| Message (bericht) | De tekst, geschreven in de standaardeditor. Verplicht. |
Er is geen CC, geen bijlage en geen uitgebreide werkbalk in de tekst. De ontvangerslijst toont alleen gebruikers die door de backend-login- en beheercontroles uit sectie 1.2 komen, zodat je niet per ongeluk iemand een bericht stuurt die het nooit kan lezen.
2.2 Lezen en beantwoorden
Open Users → Private Messages → Read Private Messages om je inbox te zien. Klik op een onderwerp om het bericht te openen. De berichtweergave toont vier dingen:
- From - de naam van de afzender.
- Date - wanneer het bericht is verstuurd.
- Subject - de titel.
- Message - de berichttekst.
Een ontvangen bericht openen markeert het automatisch als gelezen. Vanuit de berichtweergave kun je op Reply klikken, wat het opstelformulier opent met de oorspronkelijke afzender alvast ingevuld als ontvanger.
Naar bovenEen privebericht is een een-op-een notitie. Er zijn geen groepsgesprekken en geen "allen beantwoorden". Elk antwoord is een gloednieuwe berichtrij.
3. De inbox: lijst, filters en acties
3.1 De kolommen in de lijst
De inboxlijst (Read Private Messages) toont de berichten waarin jij de ontvanger bent. Het toont nooit berichten die je naar anderen hebt gestuurd. De kolommen zijn:
| Kolom | Betekenis |
|---|---|
| Selectievakje | Selecteer rijen voor een bulkactie. |
| Subject | De titel van het bericht. Klik erop om het bericht te openen. |
| Read | Een statuspictogram dat aangeeft of het bericht gelezen of nog nieuw is. |
| From | De naam van de afzender. |
| Date | Wanneer het bericht is verstuurd. De lijst sorteert standaard nieuwste eerst. |
3.2 Filteren en zoeken
Boven de lijst krijg je een zoekvak en een statusfilter:
- Het zoekvak kijkt zowel in het onderwerp als in de berichttekst.
- Het statusfilter laat je alleen gelezen of alleen ongelezen berichten tonen.
Je kunt de sorteervolgorde ook wijzigen door op een kolomkop te klikken.
3.3 Markeren en verwijderen
Selecteer een of meer rijen met de selectievakjes en gebruik dan de werkbalk om ze als gelezen of ongelezen te markeren, of om ze te verwijderen. Verwijderen is permanent - er is geen prullenbak of herstel voor priveberichten. Let op: je kunt alleen berichten in je eigen inbox markeren of verwijderen; de component laat je geen bericht aanraken dat aan iemand anders is gericht.
Naar boven4. Je persoonlijke instellingen
Elke backend-gebruiker heeft eigen voorkeuren voor priveberichten via Users → Private Messages → My Settings. Deze instellingen zijn persoonlijk: ze gelden alleen voor je eigen inbox en worden los van de berichten zelf opgeslagen (zie sectie 7.2). Er zijn drie opties.
4.1 Inbox vergrendelen
De optie Lock Inbox (intern opgeslagen als lock) is een simpele Ja/Nee-schakelaar. Wanneer je hem op Ja zet, kan niemand je nog een privebericht sturen. Elke poging om je een bericht te sturen mislukt met een "versturen mislukt"-fout. De standaard is Nee.
Dit is handig als je nooit priveberichten gebruikt en niet wilt dat je inbox volloopt met systeemmeldingen.
4.2 Stuur mij een e-mail
De optie voor de e-mailmelding (opgeslagen als mail_on_new) is ook Ja/Nee. Wanneer hij op Ja staat - wat de standaard is - mailt Joomla je telkens wanneer er een nieuw privebericht binnenkomt, zodat je niet steeds de backend hoeft te controleren. Zet hem op Nee om berichten geruisloos te ontvangen.
4.3 Automatisch opschonen na N dagen
De optie auto-opschonen (opgeslagen als auto_purge) is een aantal dagen. Joomla verwijdert automatisch berichten in je inbox die ouder zijn dan dit aantal. De standaard is 7 dagen.
- Stel een hoger getal in (bijvoorbeeld 30) om berichten langer te bewaren.
- Stel het op 0 in om automatisch verwijderen helemaal uit te schakelen.
Auto-opschonen kijkt alleen naar de leeftijd van het bericht, niet naar of je het hebt gelezen. Een ongelezen bericht ouder dan de limiet wordt ook verwijderd, dus reken niet op een laag getal als belangrijke meldingen een tijdje ongelezen kunnen blijven liggen.
Naar boven5. E-mailmeldingen
5.1 Wanneer wordt er een e-mail verstuurd?
Wanneer je een privebericht stuurt, beslist Joomla of het de ontvanger mailt op basis van diens mail_on_new-instelling, niet die van jou. Als de ontvanger e-mailmeldingen heeft aanstaan (de standaard), krijgt die een e-mail. Heeft die ze uitgezet, dan wordt het bericht toch in de inbox opgeslagen - het komt alleen geruisloos binnen.
De e-mail wordt verstuurd in de backend-taal van de ontvanger en bevat het onderwerp en een platte-tekstversie van de berichttekst, plus een link terug naar het bericht in de beheeromgeving. Het reply-to-adres wordt op de afzender gezet, zodat een directe e-mailreactie bij de juiste persoon terechtkomt.
5.2 De e-mailsjabloon
De melding gebruikt het Mail Templates-systeem van Joomla. De sjabloonsleutel is com_messages.new_message. Je kunt de bewoording aanpassen via System → Templates → Mail Templates door die sjabloon te bewerken. De beschikbare plaatsaanduidingen zijn onder andere het onderwerp, de berichttekst, de naam van de afzender, de sitenaam en de site-URL.
5.3 Wat als de e-mail mislukt?
Als je site geen e-mail kan versturen - mail is uitgeschakeld, of de mailserver weigert het bericht - raakt Joomla het privebericht niet kwijt. Het slaat het bericht nog steeds op in de inbox en logt alleen een waarschuwing dat de meldingsmail niet kon worden bezorgd. De ontvanger ziet het bericht alsnog de volgende keer dat hij zijn inbox opent.
Naar boven6. Systeemberichten van Joomla
Priveberichten zijn niet alleen voor notities van mens tot mens. De Joomla-kern gebruikt dezelfde component om beheerders over belangrijke gebeurtenissen te informeren. Het bekendste voorbeeld is de updatemelding: wanneer er een nieuwe Joomla-versie beschikbaar is, kan het systeem een privebericht in de inbox van alle Super Users plaatsen.
Onder de motorkap is dit een helper die alle ingeschakelde Super Users doorloopt en ze allemaal hetzelfde bericht stuurt, met de afzender en ontvanger ingesteld op die gebruiker. Omdat het de normale verzendroute hergebruikt, respecteren deze systeemberichten ook de mail_on_new-voorkeur van elke gebruiker en activeren ze dezelfde e-mailmelding.
Daarom log je soms in op een nieuwe melding die je niet had verwacht. Het is geen spam - het is Joomla dat zijn eigen interne postvak gebruikt om je aandacht te trekken. Wil je deze nooit, dan kun je je inbox vergrendelen (sectie 4.1), maar dan mis je ook echte meldingen, dus denk twee keer na voordat je dat op een productiesite doet.
Naar boven7. Onder de motorkap: de database
7.1 De tabel #__messages
Elk privebericht is een rij in de tabel #__messages. De kolommen zijn:
| Kolom | Betekenis |
|---|---|
message_id |
Primaire sleutel. |
user_id_from |
Het gebruikers-id van de afzender. |
user_id_to |
Het gebruikers-id van de ontvanger. |
date_time |
Wanneer het bericht is verstuurd. |
state |
Leesstatus: 0 = ongelezen/nieuw, 1 = gelezen. |
priority |
Prioriteitsniveau: 0 normaal, 1 middel, 2 belangrijk. |
subject |
De titel van het bericht. |
message |
De berichttekst. |
folder_id |
Een verouderde mapkolom, behouden voor compatibiliteit maar niet gebruikt door de huidige interface. |
Twee details zijn het weten waard. Ten eerste bestaat de kolom priority in de database, maar het standaard opstelformulier laat je hem niet instellen - dus in de praktijk heeft elk bericht dat je handmatig stuurt prioriteit 0. Hij komt vooral via de REST API naar voren. Ten tweede zijn "gelezen" en "ongelezen" gewoon de waarde van de kolom state, die de code ook beschikbaar stelt onder de alias published.
7.2 De tabel #__messages_cfg
Je persoonlijke instellingen uit sectie 4 worden niet in de berichtentabel opgeslagen. Ze staan in een aparte sleutel/waarde-tabel genaamd #__messages_cfg:
| Kolom | Betekenis |
|---|---|
user_id |
De gebruiker bij wie de instelling hoort. |
cfg_name |
De naam van de instelling: lock, mail_on_new of auto_purge. |
cfg_value |
De opgeslagen waarde (bijvoorbeeld 1 of 7). |
Elke optie is een rij. Wanneer je je instellingen opslaat, verwijdert Joomla je bestaande rijen en schrijft het een verse rij per optie. Daarom heeft een gloednieuwe gebruiker hier helemaal geen rijen en gebruikt die simpelweg de standaardwaarden.
7.3 De indexen
Beide tabellen hebben een index die je vertelt hoe Joomla ze daadwerkelijk leest.
| Tabel | Index | Waarom hij bestaat |
|---|---|---|
#__messages |
useridto_state (user_id_to, state) |
De inboxquery laadt berichten voor een ontvanger, vaak gefilterd op gelezen/ongelezen. Deze index maakt die opzoeking snel, zelfs met veel rijen. |
#__messages_cfg |
unieke idx_user_var_name (user_id, cfg_name) |
Het is een UNIQUE-sleutel, dus een gebruiker kan maar een waarde per instellingsnaam hebben. Dat garandeert dat je nooit twee tegenstrijdige mail_on_new-rijen krijgt. |
Op een eenpersoonssite maakt geen van beide indexen uit. Op een drukke backend met meerdere redacteuren en duizenden opgeslagen berichten is het de useridto_state-index die de inbox snel houdt.
7.4 Een opmerking over privacy en beveiliging
Priveberichten zijn alleen "prive" in de zin dat andere backend-gebruikers elkaars inbox niet via de interface kunnen lezen. Ze zijn niet versleuteld. Elk bericht staat als platte tekst in de tabel #__messages, wat betekent:
- Iedereen met databasetoegang (een hostingbeheerder, een DBA, een Super User die een query draait) kan elk bericht lezen.
- Berichten zitten in je normale databaseback-ups, in platte tekst.
- De meldingsmail draagt ook een platte-tekstkopie van de inhoud.
Behandel de component dus als een plek voor interne notities, niet als een kluis. Stuur nooit wachtwoorden, API-sleutels of andere geheimen via een privebericht. Moet je een inloggegeven delen, gebruik dan een speciale tool voor geheimen en stuur via Joomla alleen een verwijzing.
Naar boven8. Onder de motorkap: de PHP API
8.1 Een bericht versturen in code
De component volgt het moderne Joomla MVC-patroon. Om een bericht te versturen vanuit je eigen extensie of een CLI-script, boot je de component en gebruik je het Message-model:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$factory = $app->bootComponent('com_messages')->getMVCFactory();
$model = $factory->createModel('Message', 'Administrator', ['ignore_request' => true]);
$model->save([
'user_id_from' => 100, // afzender
'user_id_to' => 200, // ontvanger (moet een backend-gebruiker zijn)
'subject' => 'Back-up voltooid',
'message' => 'De nachtelijke back-up is zonder fouten voltooid.',
]);
De methode save() van het model doet al het zware werk: het controleert of beide gebruikers bestaan, verifieert of de ontvanger berichten mag ontvangen, respecteert de instelling voor vergrendelde inbox van de ontvanger, slaat de rij op en - als de ontvanger dat wil - stuurt het de meldingsmail.
8.2 Lezen en als gelezen markeren
Wanneer de ontvanger een bericht opent via de methode getItem() van het model, zet het model state ook op 1 voor die rij. Een bericht lezen en het als gelezen markeren zijn dezelfde handeling, en daarom is er geen aparte "markeer als gelezen"-stap wanneer je in de inbox op een onderwerp klikt.
8.3 Auto-opschonen in code
De logica voor auto-opschonen zit in het lijstmodel. Het leest de auto_purge-waarde van de gebruiker (standaard 7 als de gebruiker geen instelling heeft), en als die waarde groter is dan nul, verwijdert het rijen uit #__messages waar date_time ouder is dan zoveel dagen en user_id_to de huidige gebruiker is. Een waarde van 0 slaat het verwijderen helemaal over.
9. De Web Services API
Anders dan sommige kleine kerncomponenten, biedt Priveberichten wel een REST API. De Web Services-plugin voor messages registreert een standaardset CRUD-routes onder:
/api/index.php/v1/messages
9.1 Opvragen en lezen
Om de berichten in je inbox op te vragen, stuur je een geverifieerd GET-verzoek met een API-token:
curl -H "X-Joomla-Token: <token>" \
https://example.test/api/index.php/v1/messages
Om een enkel bericht te lezen, voeg je het id toe:
curl -H "X-Joomla-Token: <token>" \
https://example.test/api/index.php/v1/messages/42
Elk item retourneert de velden id, user_id_from, user_id_to, date_time, priority, subject, message, state en de weergavenaam van de afzender. Merk op dat de API de kolom message_id in zijn uitvoer hernoemt naar id.
9.2 Een bericht aanmaken
Om een nieuw bericht te versturen, POST je een JSON-body:
curl -X POST \
-H "X-Joomla-Token: <token>" \
-H "Content-Type: application/json" \
-d '{"user_id_to": 200, "subject": "Deploy klaar", "message": "Release 2.4 staat live."}' \
https://example.test/api/index.php/v1/messages
Omdat de API hetzelfde model gebruikt als de backend, gelden dezelfde regels: de ontvanger moet een backend-gebruiker zijn en hun instellingen voor vergrendelde inbox en e-mailmelding worden gerespecteerd. De REST-route is de enige standaardmanier om een priority anders dan nul op een bericht te zetten.
10. Rechten en ACL
Priveberichten gebruikt de standaard toegangscontrole van Joomla. Je kunt het instellen via System → Global Configuration → Private Messages → Permissions. De relevante acties zijn:
| Actie | Wat het afschermt |
|---|---|
core.admin |
De component en zijn rechten configureren. |
core.manage |
De inbox gebruiken. Dit is ook het recht dat een gebruiker geschikt maakt om berichten te ontvangen. |
core.create |
Een bericht opstellen en versturen. |
core.delete |
Berichten verwijderen. |
core.edit.state |
De gelezen/ongelezen-status wijzigen. |
Het belangrijkste punt voor beheerders is het verband tussen ACL en bezorging: een gebruiker verschijnt alleen in de ontvangerslijst als die Beheren heeft op com_messages en kan inloggen op de backend. Zegt een collega "ik krijg nooit priveberichten", dan is de gebruikelijke oorzaak dat hun gebruikersgroep een van die twee rechten mist.
11. SEO en metadata
Deze sectie is kort om een goede reden: Priveberichten heeft helemaal geen SEO-voetafdruk. De component werkt alleen in de backend, dus:
- Er zijn geen frontend-URL's, geen menu-itemtypes en geen openbare pagina's om te indexeren.
- Er zijn geen metadata, slugs of canonical-tags om te beheren.
- Zoekmachines zien nooit de inhoud van berichten, wat precies is wat je wilt voor prive interne notities.
Zoek je naar de component bij het plannen van je sitestructuur, dan is de praktische conclusie dat het nul SEO-configuratie nodig heeft. Besteed die aandacht liever aan je artikelen, categorieen en menu's.
Naar boven12. Veelgemaakte fouten en valkuilen
12.1 Een alleen-frontend gebruiker een bericht sturen
Symptoom: Een gebruiker ontbreekt in de ontvangerslijst, of een geautomatiseerde verzending mislukt voor een bepaalde persoon.
Oplossing: Die gebruiker kan niet inloggen op de backend, of mist Beheren op com_messages. Priveberichten bereiken alleen backend-gebruikers. Pas de groep van de gebruiker aan, of gebruik e-mail.
12.2 Belangrijke meldingen verdwijnen
Symptoom: Een bericht dat je wilde bewaren is vanzelf verdwenen.
Oplossing: Auto-opschonen heeft het verwijderd. De standaard is 7 dagen en het negeert de leesstatus. Verhoog het getal in My Settings, of zet het op 0 om opschonen uit te schakelen.
12.3 Er komt geen e-mail aan
Symptoom: Berichten verschijnen in de inbox maar er wordt geen meldingsmail verstuurd.
Oplossing: Controleer de mail_on_new-instelling van de ontvanger (die kan uit staan) en bevestig dat de site uberhaupt mail kan versturen via System → Global Configuration → Server → Mail Settings. Onthoud dat een mislukte mail het bericht zelf nooit blokkeert.
12.4 Een vergrendelde inbox slokt systeemmeldingen op
Symptoom: Een Super User ziet nooit Joomla-updatemeldingen.
Oplossing: Hun inbox is vergrendeld. Vergrendelen blokkeert alle binnenkomende berichten, ook echte systeemmeldingen. Ontgrendel hem in My Settings als je op die meldingen vertrouwt.
12.5 Op zoek naar verzonden berichten
Symptoom: Je kunt geen kopie vinden van een bericht dat je hebt verstuurd.
Oplossing: Er is geen "Verzonden"-map. De inbox toont alleen berichten die aan jou zijn gericht. Heb je een vastlegging nodig van wat er is verstuurd, bewaar dan je eigen kopie of bevraag de tabel #__messages rechtstreeks.
13. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:
- Priveberichten is een postvak dat alleen in de backend werkt. Het bereikt Managers, Administrators en Super Users - nooit frontend-bezoekers.
- Een gebruiker moet backend-login en Beheren op
com_messageshebben om een bericht te ontvangen. - Auto-opschonen staat standaard op 7 dagen en negeert de leesstatus. Verhoog het of zet het op
0als je meldingen wilt bewaren. - Vergrendel de inbox van een Super User niet op een productiesite - je mist dan Joomla's eigen systeemmeldingen.
- De e-mailmelding hangt af van de instelling van de ontvanger, niet van de afzender.
- Berichten worden als platte tekst opgeslagen, niet versleuteld. Stuur nooit wachtwoorden of geheimen via een privebericht.
- Er is geen Verzonden-map en geen prullenbak. Verwijderen is permanent.
- Ontwikkelaars kunnen berichten versturen via het
Message-model of het REST-eindpunt op/api/index.php/v1/messages.
14. In het kort
BERICHT VERSTUREN Users → Private Messages → New Private Message
INBOX LEZEN Users → Private Messages → Read Private Messages
PERSOONLIJKE OPTIES Users → Private Messages → My Settings
INBOX VERGRENDELEN My Settings → Lock Inbox = Ja (blokkeert alle inkomende)
E-MAIL BIJ NIEUW My Settings → geregeld via mail_on_new (standaard Aan)
AUTO-OPSCHONEN My Settings → dagen te bewaren (standaard 7, 0 = nooit)
E-MAILSJABLOON System → Templates → Mail Templates → com_messages.new_message
BERICHTENTABEL #__messages (message_id, user_id_from, user_id_to, subject, state)
INSTELLINGENTABEL #__messages_cfg (user_id, cfg_name, cfg_value)
REST-EINDPUNT /api/index.php/v1/messages
ONTVANGSTRECHTEN Backend-login + core.manage op com_messages
Naar boven15. Samenvatting
De Priveberichten-component van Joomla is een klein postvak dat alleen in de backend werkt en je beheerders stilletjes met elkaar verbindt. Twee databasetabellen bevatten alles: #__messages voor de notities en #__messages_cfg voor de voorkeuren van elke gebruiker. Een opstelformulier, een inbox en drie persoonlijke instellingen dekken de hele functie.
- Het werkt alleen tussen backend-gebruikers met de juiste rechten.
- Het kan ontvangers mailen, met een e-mailsjabloon dat je kunt bewerken.
- Joomla zelf gebruikt het om systeemmeldingen aan Super Users te bezorgen.
- Auto-opschonen houdt inboxen netjes, en een REST API stelt het beschikbaar aan scripts.
De meeste sites kunnen Priveberichten op de verstandige standaardwaarden laten staan en er nooit meer aan denken. Maar als je team op backend-meldingen vertrouwt - updatewaarschuwingen, deploy-meldingen of simpele interne notities - loont het om te begrijpen hoe bezorging, vergrendeling en auto-opschonen op elkaar inwerken. Vermoed je dat je beheerders belangrijke Joomla-meldingen mislopen, of wil je je eigen extensie op dit interne postvak aansluiten, dan is dat precies het soort detail dat het waard is om te controleren voordat het voor een verrassing zorgt.
Naar boven

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.


