mirror of
https://github.com/modoboa/modoboa.git
synced 2026-04-25 17:06:01 +03:00
[GH-ISSUE #3583] webmail gives a blank page #1860
Labels
No labels
bug
bug
dependencies
design
documentation
duplicate
enhancement
enhancement
enhancement
feedback-needed
help-needed
help-needed
installer
invalid
looking-for-sponsors
modoboa-contacts
new-ui
new-ui
pr
pull-request
pyconfr
python
question
security
stale
webmail
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/modoboa-modoboa#1860
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @1stoneofjordan on GitHub (Jul 16, 2025).
Original GitHub issue: https://github.com/modoboa/modoboa/issues/3583
Impacted versions
Steps to reproduce
try to make use of integrated webmail interface
All is working fine Postfix and Dovecot works as expected
sent testmail and dovecote create all folders
radicale/calendar is working
Current behavior
Try to use webmail gives a blank page
Nginx :
[16/Jul/2025:10:30:19 +0200] "GET /api/v2/webmail/mailboxes/ HTTP/2.0" 404 47 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
uwsgi:
mail.papageno.at [pid: 1170|app: 1|req: 116/416] 94.136.29.244 () {60 vars in 1030 bytes} [Wed Jul 16 10:30:19 2025] GET /api/v2/webmail/mailboxes/ => generated 47 bytes in 172 msecs (HTTP/2.0 404) 5 headers in 160 bytes (1 switches on core 0)
Expected behavior
Seeing a Webmail interface instead a blank page
Video/Screenshot link (optional)
@tonioo commented on GitHub (Jul 16, 2025):
@1stoneofjordan I guess you mean 2.4.1 ?
What type of user do you use?
@1stoneofjordan commented on GitHub (Jul 16, 2025):
Thank you for your fat repyl
opps sorry typo ! your right 2.4.1
I use atm domain admin users
@tonioo commented on GitHub (Jul 16, 2025):
And you confirm this domain admin has a mailbox?
@1stoneofjordan commented on GitHub (Jul 16, 2025):
yes i sent mail via shell on mail gateway and mail comes folders are created on modoboa
my first thought was : if the folders not created by incoming mail there is no webmail so i sent a mail
Jul 15 13:36:30 mail postfix/lmtp[3626]: 32B16607FE: to=admin@papageno.at, relay=mail.papageno.at[private/dovecot-lmtp], delay=0.17, delays=0.07/0.04/0.04/0.02, dsn=2.1.5, status=deliverable (250 2.1.5 OK)
Jul 15 13:36:35 mail amavis[1191]: (01191-01) Passed CLEAN {RelayedOpenRelay}, [192.168.216.50]:33192 [94.136.29.244] postmaster@pmg.papageno.at -> admin@papageno.at, Message-ID: 20250715113629.3CE12161309@pmg.papageno.at, mail_id: MFNXD9Gwg8AV, Hits: -1.709, size: 2471, queued_as: 5689561741, 2222 ms
Jul 15 13:36:35 mail postfix/smtpd[3612]: proxy-accept: END-OF-MESSAGE: 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 5689561741; from=postmaster@pmg.papageno.at to=admin@papageno.at proto=ESMTP helo=<pmg.papageno.at>
Jul 15 13:36:35 mail dovecot[556]: lmtp(admin@papageno.at)<3627>: msgid=20250715113629.3CE12161309@pmg.papageno.at: saved mail to INBOX
Jul 15 13:36:35 mail postfix/lmtp[3626]: 5689561741: to=admin@papageno.at, relay=mail.papageno.at[private/dovecot-lmtp], delay=0.26, delays=0.07/0.01/0/0.17, dsn=2.0.0, status=sent (250 2.0.0 admin@papageno.at WBp5GUM9dmgrDgAAeX0t1Q Saved)
Here the ls of the location
I
ls -la /srv/vmail/papageno.at/admin/Maildir/
insgesamt 40
drwx------ 5 vmail vmail 4096 15. Jul 13:36 .
drwx------ 3 vmail vmail 4096 15. Jul 13:36 ..
drwx------ 2 vmail vmail 4096 15. Jul 13:36 cur
-rw------- 1 vmail vmail 684 15. Jul 13:36 dovecot.index.cache
-rw------- 1 vmail vmail 344 15. Jul 13:36 dovecot.index.log
-rw------- 1 vmail vmail 452 15. Jul 13:36 dovecot.list.index.log
-rw------- 1 vmail vmail 97 15. Jul 13:36 dovecot-uidlist
-rw------- 1 vmail vmail 8 15. Jul 13:36 dovecot-uidvalidity
-r--r--r-- 1 vmail vmail 0 15. Jul 13:36 dovecot-uidvalidity.68763d43
-rw------- 1 vmail vmail 0 15. Jul 13:36 maildirfolder
drwx------ 2 vmail vmail 4096 15. Jul 13:36 new
drwx------ 2 vmail vmail 4096 15. Jul 13:36 tmp
@tonioo commented on GitHub (Jul 16, 2025):
Can you check that /etc/dovecot/conf.d/dovecot-oauth2.conf.ext file exists?
@1stoneofjordan commented on GitHub (Jul 16, 2025):
exist
ls -la /etc/dovecot/conf.d/dovecot-oauth2.conf.ext
-rw-r--r-- 1 root root 334 15. Jul 12:19 /etc/dovecot/conf.d/dovecot-oauth2.conf.ext
@1stoneofjordan commented on GitHub (Jul 16, 2025):
can it be it comes from the self signed cert ?
i have more probs now :
i created a normal user and dont have permission to change language for example
logs give me :
Jul 16 14:13:33 mail dovecot[556]: auth: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
dovecot[556]: auth: Error: oauth2(thomas.hoeferer@papageno.at,127.0.0.1,<Nmvm0Qo6Got/AAAB>): oauth2 failed: Introspection failed: SSL handshaking with 192.168.216.40:443 failed: read(SSL (conn:192.168.216.40:443,id=1)) failed: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
Becouse self signed cert dont have a CA
@1stoneofjordan commented on GitHub (Jul 16, 2025):
this comes if try to sccess sieve filters under normal user
Jul 16 14:20:08 mail dovecot[556]: auth: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
Jul 16 14:20:08 mail dovecot[556]: auth: Error: oauth2(thomas.hoeferer@papageno.at,127.0.0.1,<c4jp6Qo6oq1/AAAB>): oauth2 failed: Introspection failed: SSL handshaking with 192.168.216.40:443 failed: read(SSL (conn:192.168.216.40:443,id=3)) failed: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
Jul 16 14:20:14 mail dovecot[556]: managesieve-login: Disconnected: Connection closed (client didn't finish SASL auth, waited 33 secs): user=thomas.hoeferer@papageno.at, method=OAUTHBEARER, rip=127.0.0.1, lip=127.0.0.1, secured, session=<oFVI6Ao68sJ/AAAB>
Jul 16 14:20:18 mail dovecot[556]: auth: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
Jul 16 14:20:18 mail dovecot[556]: auth: Error: oauth2(thomas.hoeferer@papageno.at,127.0.0.1,<7f086go6GsN/AAAB>): oauth2 failed: Introspection failed: SSL handshaking with 192.168.216.40:443 failed: read(SSL (conn:192.168.216.40:443,id=4)) failed: Received invalid SSL certificate: self-signed certificate: /CN=mail.papageno.at (check ssl_client_ca_* settings?)
@tonioo commented on GitHub (Jul 16, 2025):
Good catch. Indeed, you need a valid certificate to make OpenID authentication work smoothly
@1stoneofjordan commented on GitHub (Jul 16, 2025):
i created a normal user named thomas.hoefere@papageno.at
Settings in domain and ad,im are unlimited for testing
i log in :
mail modoboa.auth[224356]: INFO User 'thomas.hoeferer@papageno.at' successfully logged in
192.168.216.40 = modoboa
192.168.216.50 = mail gateway
i send from gw a mail to this user and get :
Jul 16 14:23:09 mail postfix/smtpd[230686]: connect from unknown[192.168.216.50]
Jul 16 14:23:09 mail postfix/smtpd[230686]: Anonymous TLS connection established from unknown[192.168.216.50]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)
Jul 16 14:23:09 mail postfix/smtpd[230686]: NOQUEUE: reject: RCPT from unknown[192.168.216.50]: 550 5.1.1 thomas.hoeferer@papageno.at: Recipient address rejected: undeliverable address: host mail.papageno.at[private/dovecot-lmtp] said: 550 5.1.1 thomas.hoeferer@papageno.at User doesn't exist: thomas.hoeferer@papageno.at (in reply to RCPT TO command); from=<> to=thomas.hoeferer@papageno.at proto=ESMTP helo=<pmg.papageno.at>
Jul 16 14:23:09 mail postfix/smtpd[230686]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "thomas.hoeferer@papageno.at" from client "unknown[192.168.216.50]"
Jul 16 14:23:09 mail postfix/smtpd[230686]: disconnect from unknown[192.168.216.50] ehlo=2 starttls=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=6/8
Jul 16 14:23:14 mail dovecot[556]: managesieve-login: Disconnected: Inactivity (client didn't finish SASL auth, waited 180 secs): user=thomas.hoeferer@papageno.at, method=OAUTHBEARER, rip=127.0.0.1, lip=127.0.0.1, secured, session=<7f086go6GsN/AAAB>
@1stoneofjordan commented on GitHub (Jul 16, 2025):
kk all clear i will apply i have wildcard should work for all or ? I reply if done
@1stoneofjordan commented on GitHub (Jul 16, 2025):
ok applied a valid *.papageno.at cert
Nginx is fines , postfix to
domainname:mail.papageno.at
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
31:3f:87:12:d5:85:15:8d:14:4a:5e:2e:c2:44:cc:24
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Domain Validation CA SHA2
Validity
Not Before: Feb 28 10:55:31 2025 GMT
Not After : Feb 28 10:55:30 2026 GMT
Subject: CN=*.papageno.at
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
nothing happened except the error message is gone by accessing sieve setting.
I cnat change language of a normal user becouse of rights
I have no webmail access , not as dom admin user neither as normal user
another thing i doint understand
I send a mail from GW becouse direct is not possible: (wich is fine btw)
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 pmg.papageno.at Mail Papageno ready
helo xxeon.com
250 pmg.papageno.at
mail from: thomas.hoeferer@papageno.at
250 2.1.0 Ok
rcpt to: thomas.hoeferer@papageno.at
250 2.1.5 Ok
data
354 End data with .
test
.
250 2.0.0 Ok: queued as E6EEA161444
on the GW i get : (we dint care about DKIM DMAR and others atm OK ? )
2025-07-16T14:40:26.987382+02:00 pmg postfix/smtpd[64726]: connect from localhost.localdomain[127.0.0.1]
2025-07-16T14:40:36.947161+02:00 pmg postfix/smtpd[64726]: E6EEA161444: client=localhost.localdomain[127.0.0.1]
2025-07-16T14:40:46.052085+02:00 pmg postfix/cleanup[64731]: E6EEA161444: message-id=20250716124036.E6EEA161444@pmg.papageno.at
2025-07-16T14:40:46.054694+02:00 pmg postfix/qmgr[26392]: E6EEA161444: from=thomas.hoeferer@papageno.at, size=341, nrcpt=1 (queue active)
2025-07-16T14:40:46.229954+02:00 pmg pmg-smtp-filter[62780]: 16145F68779DCE341E0: new mail message-id=20250716124036.E6EEA161444@pmg.papageno.at#012
2025-07-16T14:40:46.814156+02:00 pmg pmg-smtp-filter[62780]: 16145F68779DCE341E0: SA score=2/5 time=0.507 bayes=undefined autolearn=disabled hits=ALL_TRUSTED(-1),KAM_BLANKSUBJECT(0.25),KAM_DMARC_STATUS(0.01),MISSING_HEADERS(1.207),MISSING_SUBJECT(1.767)
2025-07-16T14:40:46.848505+02:00 pmg postfix/smtpd[64738]: connect from localhost.localdomain[127.0.0.1]
2025-07-16T14:40:46.853779+02:00 pmg postfix/smtpd[64738]: D0548161466: client=localhost.localdomain[127.0.0.1], orig_client=localhost.localdomain[127.0.0.1]
2025-07-16T14:40:46.896240+02:00 pmg postfix/cleanup[64731]: D0548161466: message-id=20250716124036.E6EEA161444@pmg.papageno.at
2025-07-16T14:40:46.900207+02:00 pmg postfix/qmgr[26392]: D0548161466: from=thomas.hoeferer@papageno.at, size=916, nrcpt=1 (queue active)
2025-07-16T14:40:46.900466+02:00 pmg postfix/smtpd[64738]: disconnect from localhost.localdomain[127.0.0.1] ehlo=1 xforward=1 mail=1 rcpt=1 data=1 commands=5
2025-07-16T14:40:46.900945+02:00 pmg pmg-smtp-filter[62780]: 16145F68779DCE341E0: accept mail to thomas.hoeferer@papageno.at (D0548161466) (rule: default-accept)
2025-07-16T14:40:46.908640+02:00 pmg pmg-smtp-filter[62780]: 16145F68779DCE341E0: processing time: 0.687 seconds (0.507, 0.068, 0)
2025-07-16T14:40:46.909787+02:00 pmg postfix/lmtp[64733]: E6EEA161444: to=thomas.hoeferer@papageno.at, relay=127.0.0.1[127.0.0.1]:10024, delay=12, delays=11/0.11/0.05/0.7, dsn=2.5.0, status=sent (250 2.5.0 OK (16145F68779DCE341E0))
2025-07-16T14:40:46.910292+02:00 pmg postfix/qmgr[26392]: E6EEA161444: removed
2025-07-16T14:40:48.030833+02:00 pmg postfix/smtp[64739]: D0548161466: to=thomas.hoeferer@papageno.at, relay=192.168.216.40[192.168.216.40]:25, delay=1.2, delays=0.05/0.11/0.58/0.45, dsn=5.1.1, status=bounced (host 192.168.216.40[192.168.216.40] said: 550 5.1.1 thomas.hoeferer@papageno.at: Recipient address rejected: undeliverable address: host mail.papageno.at[private/dovecot-lmtp] said: 550 5.1.1 thomas.hoeferer@papageno.at User doesn't exist: thomas.hoeferer@papageno.at (in reply to RCPT TO command) (in reply to RCPT TO command))
2025-07-16T14:40:48.042405+02:00 pmg postfix/qmgr[26392]: D0548161466: removed
on Modoboa:
Jul 16 14:40:47 mail postfix/smtpd[1479]: connect from unknown[192.168.216.50]
Jul 16 14:40:47 mail postfix/smtpd[1479]: Anonymous TLS connection established from unknown[192.168.216.50]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
Jul 16 14:40:48 mail postfix/smtpd[1479]: NOQUEUE: reject: RCPT from unknown[192.168.216.50]: 550 5.1.1 thomas.hoeferer@papageno.at: Recipient address rejected: undeliverable address: host mail.papageno.at[private/dovecot-lmtp] said: 550 5.1.1 thomas.hoeferer@papageno.at User doesn't exist: thomas.hoeferer@papageno.at (in reply to RCPT TO command); from=thomas.hoeferer@papageno.at to=thomas.hoeferer@papageno.at proto=ESMTP helo=<pmg.papageno.at>
Jul 16 14:40:48 mail postfix/smtpd[1479]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "thomas.hoeferer@papageno.at" from client "unknown[192.168.216.50]"
Jul 16 14:40:48 mail postfix/smtpd[1479]: disconnect from unknown[192.168.216.50] ehlo=2 starttls=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=6/8
Jul 16 14:40:48 mail postfix/postscreen[1475]: CONNECT from [192.168.216.50]:50106 to [192.168.216.40]:25
Jul 16 14:40:48 mail postfix/postscreen[1475]: PASS OLD [192.168.216.50]:50106
Jul 16 14:40:48 mail postfix/smtpd[1479]: connect from unknown[192.168.216.50]
Jul 16 14:40:48 mail postfix/smtpd[1479]: Anonymous TLS connection established from unknown[192.168.216.50]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)
Jul 16 14:40:48 mail postfix/smtpd[1479]: NOQUEUE: reject: RCPT from unknown[192.168.216.50]: 550 5.1.1 thomas.hoeferer@papageno.at: Recipient address rejected: undeliverable address: host mail.papageno.at[private/dovecot-lmtp] said: 550 5.1.1 thomas.hoeferer@papageno.at User doesn't exist: thomas.hoeferer@papageno.at (in reply to RCPT TO command); from=<> to=thomas.hoeferer@papageno.at proto=ESMTP helo=<pmg.papageno.at>
Jul 16 14:40:48 mail postfix/smtpd[1479]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "thomas.hoeferer@papageno.at" from client "unknown[192.168.216.50]"
Jul 16 14:40:48 mail postfix/smtpd[1479]: disconnect from unknown[192.168.216.50] ehlo=2 starttls=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=6/8
But i can login with ID and Password
i cant change anything about right and try to create a new calendar gives
New calendar Name
<html lang=""> <head> </head>Sorry
An internal error occured.
Jul 16 14:36:33 mail modoboa.auth[1161]: INFO User 'thomas.hoeferer@papageno.at' successfully logged in
and i see it in the GUI
@tonioo commented on GitHub (Jul 16, 2025):
And you also updated dovecot configuration after you changed the certificate?
@1stoneofjordan commented on GitHub (Jul 16, 2025):
i checked in /etc/dovecot/conf.d/10-ssl-keys.try if dovecot have the right location for the Certs and then
i rebooted the whole machine
openssl s_client -crlf -connect mail.papageno,at:993 |grep NotAfter:
connecting to 212.69.165.8
depth=0 CN=*.papageno.at
verify return:1
v:NotBefore: Feb 28 10:55:31 2025 GMT; NotAfter: Feb 28 10:55:30 2026 GMT
@1stoneofjordan commented on GitHub (Jul 16, 2025):
i need to say the system mailgateway and server are behind a firewall ports are directly forwarded to gatewy / Modoba communication in other direction is also possible without restrictions i have full DNS resolution and i see that the DNS checks of the Domain are OK for example 443 993 995 143 etc are forwarded to modoboa 25 and 587 to mailgateway wich does the transport . i can reach modoboa server withc curl or webinterface or shell no problem at all but well need to say ...who knows ;)
@tonioo commented on GitHub (Jul 16, 2025):
Can you enable debug more? (set DEBUG to True inside settings.py file and reload uwsgi)
@1stoneofjordan commented on GitHub (Jul 16, 2025):
set to
Debug = True
reboot whole machine
same as before, GUI without rights and no webmail
uwsgi :
mail.papageno.at [pid: 1147|app: 1|req: 5/17] 94.136.29.244 () {60 vars in 1047 bytes} [Wed Jul 16 16:28:02 2025] GET /api/v2/alarms/?page=1&page_size=10 => generated 52 bytes in 76 msecs (HTTP/2.0 200) 6 headers in 188 bytes (1 switches on core 0)
mail.papageno.at [pid: 1147|app: 1|req: 6/18] 94.136.29.244 () {60 vars in 1090 bytes} [Wed Jul 16 16:28:09 2025] GET /api/v2/logs/messages/?page=1&page_size=10&search= => generated 52 bytes in 123 msecs (HTTP/2.0 200) 6 headers in 188 bytes (1 switches on core 0)
mail.papageno.at [pid: 1150|app: 1|req: 7/19] 94.136.29.244 () {60 vars in 1047 bytes} [Wed Jul 16 16:28:10 2025] GET /api/v2/alarms/?page=1&page_size=10 => generated 52 bytes in 124 msecs (HTTP/2.0 200) 6 headers in 188 bytes (1 switches on core 0)
mail.papageno.at [pid: 1147|app: 1|req: 7/20] 94.136.29.244 () {60 vars in 1020 bytes} [Wed Jul 16 16:28:11 2025] GET /api/v2/identities/ => generated 1123 bytes in 170 msecs (HTTP/2.0 200) 6 headers in 190 bytes (1 switches on core 0)
mail.papageno.at [pid: 1150|app: 1|req: 8/21] 94.136.29.244 () {60 vars in 1031 bytes} [Wed Jul 16 16:28:13 2025] GET /api/v2/accounts/4/ => generated 538 bytes in 160 msecs (HTTP/2.0 200) 6 headers in 209 bytes (1 switches on core 0)
mail.papageno.at [pid: 1147|app: 1|req: 8/22] 94.136.29.244 () {60 vars in 1060 bytes} [Wed Jul 16 16:28:14 2025] GET /api/v2/senderaddresses/?mailbox=3 => generated 2 bytes in 127 msecs (HTTP/2.0 200) 6 headers in 193 bytes (1 switches on core 0)
mail.papageno.at [pid: 1148|app: 1|req: 4/23] 94.136.29.244 () {60 vars in 1036 bytes} [Wed Jul 16 16:28:18 2025] GET /api/v2/accounts/4/ => generated 538 bytes in 155 msecs (HTTP/2.0 200) 6 headers in 209 bytes (1 switches on core 0)
mail.papageno.at [pid: 1150|app: 1|req: 9/24] 94.136.29.244 () {60 vars in 1030 bytes} [Wed Jul 16 16:28:18 2025] GET /api/v2/domains/ => generated 895 bytes in 131 msecs (HTTP/2.0 200) 6 headers in 203 bytes (1 switches on core 0)
mail.papageno.at [pid: 1151|app: 1|req: 4/25] 94.136.29.244 () {60 vars in 1030 bytes} [Wed Jul 16 16:28:18 2025] GET /api/v2/domains/ => generated 895 bytes in 522 msecs (HTTP/2.0 200) 6 headers in 203 bytes (1 switches on core 0)
mail.papageno.at [pid: 1147|app: 1|req: 9/26] 94.136.29.244 () {60 vars in 1030 bytes} [Wed Jul 16 16:28:57 2025] GET /api/v2/webmail/mailboxes/ => generated 47 bytes in 117 msecs (HTTP/2.0 404) 5 headers in 160 bytes (2 switches on core 0)
mail.papageno.at [pid: 1150|app: 1|req: 10/27] 94.136.29.244 () {60 vars in 1049 bytes} [Wed Jul 16 16:30:17 2025] GET /api/v2/account/available_applications/ => generated 445 bytes in 124 msecs (HTTP/2.0 200) 6 headers in 189 bytes (1 switches on core 0)
mail.papageno.at [pid: 1151|app: 1|req: 5/28] 94.136.29.244 () {60 vars in 1030 bytes} [Wed Jul 16 16:30:22 2025] GET /api/v2/webmail/mailboxes/ => generated 47 bytes in 125 msecs (HTTP/2.0 404) 5 headers in 160 bytes (1 switches on core 0)
nginx
94.136.29.244 - - [16/Jul/2025:16:28:18 +0200] "GET /api/v2/domains/ HTTP/2.0" 200 895 "https://mail.papageno.at/admin/identities/accounts/4/edit" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:18 +0200] "GET /api/v2/domains/ HTTP/2.0" 200 895 "https://mail.papageno.at/admin/identities/accounts/4/edit" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /assets/WebmailLayout-BftSRE9P.js HTTP/2.0" 200 8902 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /assets/webmail-CURzuE4B.js HTTP/2.0" 200 2109 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /assets/WebmailLayout-UlftFiiT.css HTTP/2.0" 200 92 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /assets/MailboxView-Cgl2yDYS.js HTTP/2.0" 200 9010 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /assets/MailboxView-B-aI4XBq.css HTTP/2.0" 200 5224 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:28:57 +0200] "GET /api/v2/webmail/mailboxes/ HTTP/2.0" 404 47 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:30:18 +0200] "GET /api/v2/account/available_applications/ HTTP/2.0" 200 445 "https://mail.papageno.at/admin" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:16:30:23 +0200] "GET /api/v2/webmail/mailboxes/ HTTP/2.0" 404 47 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
all lokks good so far postgresql redis uwsgi nginx except delivering this 404 if call webmail and
{ "error": "Connection to MANAGESIEVE server failed, check your configuration" } error when i touch sieve config nad at last normal user cant change language,
I will check by myself , thought its a easy "hey you forgott that switch here" thing i will report here if i found the issue
@1stoneofjordan commented on GitHub (Jul 16, 2025):
ok did a Dovecot systemcheck and looked inside and see i have a crt issue
mabey i need a anchor inside or need to add CA lets see
Jul 16 16:36:56 Error: auth: oauth2(admin@papageno.at,127.0.0.1,<Y76t0gw6uo1/AAAB>): oauth2 failed: Introspection failed: SSL handshaking with 192.168.216.40:443 failed: read(SSL (conn:192.168.216.40:443,id=4)) failed: Received invalid SSL certificate: unable to get local issuer certificate: /CN=.papageno.at (check ssl_client_ca_ settings?)
@1stoneofjordan commented on GitHub (Jul 16, 2025):
last info for today :
fixed the oauth2 error by adding intermediate + root CA as anchor to cert file.
Error in dovecot is gone now log_errors when doin a dovecot-sysreport is empty
still no webmail
looks like /api/v2/webmail/mailboxes not exist or wont spwan
94.136.29.244 - - [16/Jul/2025:17:10:34 +0200] "GET /assets/VAlert-iGJ3gOzk.css HTTP/2.0" 200 4307 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:17:10:34 +0200] "GET /assets/MailboxView-B-aI4XBq.css HTTP/2.0" 200 5224 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
94.136.29.244 - - [16/Jul/2025:17:10:35 +0200] "GET /api/v2/webmail/mailboxes/ HTTP/2.0" 404 47 "https://mail.papageno.at/user/webmail" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
@tonioo commented on GitHub (Jul 17, 2025):
And you confirm calendars and contacts features are working?
@1stoneofjordan commented on GitHub (Jul 17, 2025):
Yes both is working without problems
i can add edit and delete contacts
i can add new calender and add edit and delete events
@1stoneofjordan commented on GitHub (Jul 17, 2025):
Here output from axios lib jfyi
XHRGET
https://mail.papageno.at/api/v2/webmail/mailboxes/
[HTTP/2 404 115ms]
Object { stack: "Ve@https://mail.papageno.at/assets/index-6uM3C9QJ.js:34:9249\nfp@https://mail.papageno.at/assets/index-6uM3C9QJ.js:36:1088\nq@https://mail.papageno.at/assets/index-6uM3C9QJ.js:36:5744\nEventHandlerNonNullnS</<@https://mail.papageno.at/assets/index-6uM3C9QJ.js:36:5817\nnS<@https://mail.papageno.at/assets/index-6uM3C9QJ.js:36:5143\nWd@https://mail.papageno.at/assets/index-6uM3C9QJ.js:38:512\npromise callback_request@https://mail.papageno.at/assets/index-6uM3C9QJ.js:39:1329\nrequest@https://mail.papageno.at/assets/index-6uM3C9QJ.js:38:1983\nzs.prototype[t]@https://mail.papageno.at/assets/index-6uM3C9QJ.js:39:1792\nZg/<@https://mail.papageno.at/assets/index-6uM3C9QJ.js:34:3690\ngetUserMailboxes@https://mail.papageno.at/assets/webmail-CURzuE4B.js:1:107\nq@https://mail.papageno.at/assets/WebmailLayout-BftSRE9P.js:1:6214\n@https://mail.papageno.at/assets/WebmailLayout-BftSRE9P.js:1:6869\nwE@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:14195\nsetup@https://mail.papageno.at/assets/WebmailLayout-BftSRE9P.js:1:6863\npr@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:38\nKb@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:47918\n$b@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:47705\nMe@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:26765\nTe@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:26641\nG@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:23190\nbe@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:27451\nrun@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:1910\nrunIfDirty@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:2220\npr@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:46\ngf@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:1799\npromise callbackhf@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:1117\nel@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:1231\nWb@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:42437\nHn/y.scheduler@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:34335\nUv/T.scheduler<@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:16224\ntrigger@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:2162\nsc@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:2577\nnotify@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:4970\ntrigger@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:4864\nset value@https://mail.papageno.at/assets/index-6uM3C9QJ.js:10:13343\nse@https://mail.papageno.at/assets/index-6uM3C9QJ.js:30:21347\nFw/he/<@https://mail.papageno.at/assets/index-6uM3C9QJ.js:30:19976\npromise callbackhe@https://mail.papageno.at/assets/index-6uM3C9QJ.js:30:19831\nre@https://mail.papageno.at/assets/index-6uM3C9QJ.js:30:19075\nonClick@https://mail.papageno.at/assets/ConnectedLayout-C0KKRFEy.js:1:14785\npr@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:38\nki@https://mail.papageno.at/assets/index-6uM3C9QJ.js:14:111\na@https://mail.papageno.at/assets/index-6uM3C9QJ.js:18:7722\n", message: "Request failed with status code 404", name: "AxiosError", code: "ERR_BAD_REQUEST", config: {…}, request: XMLHttpRequest, response: {…}, status: 404 }
index-6uM3C9QJ.js:14:662
@1stoneofjordan commented on GitHub (Jul 17, 2025):
mabey another hint ?
base url : https://mail.papageno.at/api/v2/webmail/mailboxes/ gives json: error "Application webmail not registered"
adapter: Array(3) [ "xhr", "http", "fetch" ]
allowAbsoluteUrls: true
baseURL: "https://mail.papageno.at/api/v2"
data: undefined
env: Object { FormData: FormData(), Blob: Blob() }
headers: Object { Accept: "application/json, text/plain, /", Authorization: "Bearer UvfRlmeQgYcsSTNHqVa39hjX89Tldz", "Accept-Language": "de", … }
maxBodyLength: -1
maxContentLength: -1
method: "get"
params: Object { }
timeout: 0
transformRequest: Array [ transformRequest(t, a)
transformResponse: Array [ transformResponse(t)
]
transitional: Object { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }
url: "/webmail/mailboxes/"
validateStatus: function validateStatus(t)
xsrfCookieName: "XSRF-TOKEN"
xsrfHeaderName: "X-XSRF-TOKEN"
: Object { … }
data: Object { error: "Application webmail not registered" }
headers: Object { "content-language": "de", "content-length": "47", "content-type": "application/json", … }
request: XMLHttpRequest { readyState: 4, timeout: 0, withCredentials: false, … }
status: 404
@Spitfireap commented on GitHub (Jul 17, 2025):
Hi, can you share the output of :
sudo -u postgres -i psql -d modoboa -c "SELECT name FROM oauth2_provider_application"?@Spitfireap commented on GitHub (Jul 17, 2025):
And the content of MODOBOA_APPS located in the file :
/srv/modoboa/instance/instance/settings.py@1stoneofjordan commented on GitHub (Jul 17, 2025):
here the content of settings.py
Django settings for instance project.
For more information on this file, see
https://docs.djangoproject.com/en/4.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
from logging.handlers import SysLogHandler
import os
import environ
env = environ.Env()
Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.realpath(os.path.dirname(os.path.dirname(file)))
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
Quick-start development settings - unsuitable for production
See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = [
'mail.papageno.at',
]
SITE_ID = 1
A list of all the people who get code error notifications. When DEBUG=False
and a view raises an exception, Django will email these people with the full
exception information.
See https://docs.djangoproject.com/en/dev/ref/settings/#admins
#ADMINS = [('Administrator', 'admin@example.net')]
The email address that error messages come from, such as those sent to ADMINS
#SERVER_EMAIL = 'webmaster@example.net'
Security settings
X_FRAME_OPTIONS = "SAMEORIGIN"
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
Application definition
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'django.contrib.staticfiles',
'reversion',
'oauth2_provider',
'corsheaders',
'rest_framework',
'rest_framework.authtoken',
'drf_spectacular',
'phonenumber_field',
'django_otp',
'django_otp.plugins.otp_totp',
'django_otp.plugins.otp_static',
'django_rename_app',
'django_rq',
)
A dedicated place to register Modoboa applications
Do not delete it.
Do not change the order.
MODOBOA_APPS = (
'modoboa',
'modoboa.core',
'modoboa.lib',
'modoboa.admin',
'modoboa.transport',
'modoboa.relaydomains',
'modoboa.limits',
'modoboa.parameters',
'modoboa.dnstools',
'modoboa.policyd',
'modoboa.maillog',
'modoboa.pdfcredentials',
'modoboa.dmarc',
'modoboa.imap_migration',
'modoboa.autoreply',
'modoboa.sievefilters',
'modoboa.contacts',
'modoboa.calendars',
# Modoboa extensions here.
)
INSTALLED_APPS += MODOBOA_APPS
AUTH_USER_MODEL = 'core.User'
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'x_forwarded_for.middleware.XForwardedForMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'modoboa.core.middleware.LocalConfigMiddleware',
'modoboa.lib.middleware.CommonExceptionCatcher',
'modoboa.lib.middleware.RequestCatcherMiddleware',
)
AUTHENTICATION_BACKENDS = (
#'modoboa.lib.authbackends.LDAPBackend',
#'modoboa.lib.authbackends.SMTPBackend',
'django.contrib.auth.backends.ModelBackend',
'modoboa.imap_migration.auth_backends.IMAPBackend',
)
SMTP authentication
#AUTH_SMTP_SERVER_ADDRESS = 'localhost'
#AUTH_SMTP_SERVER_PORT = 25
#AUTH_SMTP_SECURED_MODE = None # 'ssl' or 'starttls' are accepted
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
'debug': False,
},
},
]
ROOT_URLCONF = 'instance.urls'
WSGI_APPLICATION = 'instance.wsgi.application'
Database
https://docs.djangoproject.com/en/4.2/ref/settings/#databases
DATABASES = {
}
Internationalization
https://docs.djangoproject.com/en/4.2/topics/i18n/
LANGUAGE_CODE = 'en'
TIME_ZONE = 'Europe/Paris'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Default primary key field type
https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
Static files (CSS, JavaScript, Images)
https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/sitestatic/'
STATIC_ROOT = os.path.join(BASE_DIR, 'sitestatic')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
oAuth2 settings
OAUTH2_PROVIDER = {
'OIDC_ENABLED': True,
'OIDC_RP_INITIATED_LOGOUT_ENABLED': True,
'OIDC_RP_INITIATED_LOGOUT_ALWAYS_PROMPT': False,
'OIDC_RSA_PRIVATE_KEY': env.str('OIDC_RSA_PRIVATE_KEY', multiline=True),
'SCOPES': {
'openid': 'OpenID Connect scope',
'read': 'Read scope',
'write': 'Write scope',
'introspection': 'Introspect token scope',
},
'DEFAULT_SCOPES': ['openid', 'read', 'write'],
}
If CORS fail, you might want to try to set it to True
#CORS_ORIGIN_ALLOW_ALL = False
Rest framework settings
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'user': '300/minute',
'ddos': '5/second',
'ddos_lesser': '200/minute',
'login': '10/minute',
'password_recovery_request': '12/hour',
'password_recovery_totp_check': '25/hour',
'password_recovery_apply': '25/hour'
},
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning',
}
SPECTACULAR_SETTINGS = {
'SCHEMA_PATH_PREFIX': r'/api/v[0-9]',
'TITLE': 'Modoboa API',
'VERSION': None,
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAuthenticated'],
}
Modoboa settings
#MODOBOA_CUSTOM_LOGO = os.path.join(MEDIA_URL, "custom_logo.png")
Path to Dovecot binaries in case of a non-standard installation
#DOVECOT_LOOKUP_PATH = ('/path/to/dovecot', )
#DOVEADM_LOOKUP_PATH = ('/path/to/doveadm', )
List of supported schemes if doveadm is not available, given by: doveadm pw -l
#DOVECOT_SUPPORTED_SCHEMES = 'SHA512-CRYPT SHA256-CRYPT'
DOVECOT_USER = 'vmail'
MODOBOA_API_URL = 'https://api.modoboa.org/1/'
DISABLE_DASHBOARD_EXTERNAL_QUERIES = False
PID_FILE_STORAGE_PATH = '/var/run'
REDIS
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_QUOTA_DB = 0
REDIS_URL = 'redis://{}:{}/{}'.format(REDIS_HOST, REDIS_PORT, REDIS_QUOTA_DB)
To use unix socket, use this scheme instead
REDIS_HOST must point to the socket path
REDIS_URL = 'unix://{}?db={}'.format(REDIS_HOST, REDIS_QUOTA_DB)
RQ
RQ_QUEUES = {
'dkim': {
'HOST': REDIS_HOST,
'PORT': REDIS_PORT,
'DB': REDIS_QUOTA_DB,
'URL': REDIS_URL,
},
'modoboa': {
'HOST': REDIS_HOST,
'PORT': REDIS_PORT,
'DB': REDIS_QUOTA_DB,
'URL': REDIS_URL,
},
}
CACHE
CACHES = {
"default": {
"BACKEND": 'django.core.cache.backends.redis.RedisCache',
"LOCATION": REDIS_URL
}
}
Password validation
https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
{
'NAME': 'modoboa.core.password_validation.ComplexityValidator',
'OPTIONS': {
'upper': 1,
'lower': 1,
'digits': 1,
'specials': 0
}
},
]
2FA
OTP_TOTP_ISSUER = "mail.papageno.at"
Logging configuration
LOGGING = {
'version': 1,
'formatters': {
'syslog': {
'format': '%(name)s: %(levelname)s %(message)s'
},
},
'handlers': {
'mail-admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True
},
'syslog-auth': {
'class': 'logging.handlers.SysLogHandler',
'facility': SysLogHandler.LOG_AUTH,
'formatter': 'syslog',
'address': '/dev/log'
},
'syslog-mail': {
'class': 'logging.handlers.SysLogHandler',
'facility': SysLogHandler.LOG_MAIL,
'formatter': 'syslog'
},
'modoboa': {
'class': 'modoboa.core.loggers.SQLHandler',
}
},
'loggers': {
'django': {
'handlers': ['mail-admins'],
'level': 'ERROR',
'propagate': False
},
'modoboa.auth': {
'handlers': ['syslog-auth', 'modoboa'],
'level': 'INFO',
'propagate': False
},
'modoboa.admin': {
'handlers': ['modoboa'],
'level': 'INFO',
'propagate': False
},
'modoboa.policyd': {
'handlers': ['syslog-mail'],
'level': 'INFO',
'propagate': False
}
}
}
SILENCED_SYSTEM_CHECKS = [
"security.W019", # modoboa uses iframes to display e-mails
]
PHONENUMBER_DB_FORMAT = 'INTERNATIONAL'
Load settings from extensions
@1stoneofjordan commented on GitHub (Jul 17, 2025):
sorry for the TAB didnt recon i post fomat sign like #
@1stoneofjordan commented on GitHub (Jul 17, 2025):
here the query result
psql -d modoboa -c "SELECT name FROM oauth2_provider_application"
name
modoboa_frontend
Radicale
Dovecot
(3 rows)
@tonioo commented on GitHub (Jul 17, 2025):
You're missing 'modoboa.webmail' in MODOBOA_APPS variable
@1stoneofjordan commented on GitHub (Jul 17, 2025):
ok got webmail now accesible but is it possible we miss strings on other place to ? It shows me 3 unread mail if i click to folder or short after login it shows no new mail and gives me a verry (verry long) error message i saved in textfile and read it and as far as i can see there is a key error .
KeyError or should i clone a fresh installation from git ?@tonioo commented on GitHub (Jul 17, 2025):
Can you give access to this textfile?
@1stoneofjordan commented on GitHub (Jul 18, 2025):
sure i send it to you but i recon its only at domain admins , normal user are not affected . On normal user i have other issues like no right to change language to german for exampel but dont want to bother you with , i wills seach a bit by myself , overall thanks for you great work !
error.txt
@tonioo commented on GitHub (Jul 18, 2025):
Thanks to your trace, I've created the following fix: https://github.com/modoboa/modoboa/pull/3596
@oldstanda commented on GitHub (Aug 5, 2025):
Today I installed Modoboa 2.4.9 and I also get a blank page in webmail.
I can't describe it as well as @1stoneofjordan
@tonioo commented on GitHub (Aug 6, 2025):
@oldstanda Make sure about this and that you're using a valid certificate.
@oldstanda commented on GitHub (Aug 6, 2025):
Thank you for your response. I will add a video https://www.youtube.com/watch?v=pim03SXNOWc
@oldstanda commented on GitHub (Aug 7, 2025):
Thank you very much. Webmail also works in Modoboa 2.4.10.