Re: [Django] ERROR (EXTERNAL IP): Service Unavailable
by Mark Sapiro
On 2/25/21 9:38 AM, dancab(a)caltech.edu wrote:
> Mark,
>
> Is it only this list that has an issue?
>
> Yes, this is the only list that is having the issue.
>
> Can you visit other pages for this list?
>
> Yes, I'm able to view the members list, list settings, templates, etc.
>
> I've restarted the service and tried to access the held messages for the list once again. Here's what is in the mailman log.
>
>
> ERROR 2021-02-25 17:28:14,197 393 postorius Mailman REST API not available
> Traceback (most recent call last):
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen
> chunked=chunked,
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request
> six.raise_from(e, None)
> File "<string>", line 3, in raise_from
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request
> httplib_response = conn.getresponse()
> File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
> response.begin()
> File "/usr/lib64/python3.6/http/client.py", line 307, in begin
> version, status, reason = self._read_status()
> File "/usr/lib64/python3.6/http/client.py", line 276, in _read_status
> raise RemoteDisconnected("Remote end closed connection without"
> http.client.RemoteDisconnected: Remote end closed connection without response
This is from Django's log. What's in Mailman core's mailman.log?
Since everything else is accessing the REST API with no problem, I think
core must be stuck on something and timing out. Is there a time delay
between trying to get the held messages view and the "Mailman REST API
not available. Please start Mailman core." response?
Also is there a non-zero count in the badge on the Held messages tab?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years
Re: Internal Server Errors in mailmanweb.log
by Washington Odhiambo
On Sat, Jan 24, 2026 at 12:11 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/22/26 00:53, Washington Odhiambo via Mailman-users wrote:
> > On Thu, Dec 25, 2025 at 10:46 AM Washington Odhiambo <odhiambo(a)gmail.com
> >
> > wrote:
> >
> > For some reason, my mailmanweb (I am using Gunicorn) has been misbehaving
> > lately.
> > The last change I ever made to my MM3 installation is when I applied the
> > patch mentioned in this thread.
> > The misbehavior manifests in the Postrorius web UI becoming inaccessible,
> > much as mailmanweb is running.
>
> It looks like all the logged errors result from an attempt to export a
> thread from HyperKitty. Is it this export that precipitates the issue?
I am not trying to export any threads at all. I haven't tried doing it for
whatever reason.
So the fact that there is even an attempt at exporting it is strange.
I first encountered this issue when I got notified of some held messages
that required moderation.
Postorius failed to load. And on checking the status of mailmaweb, I
realized it's running, but using so much RAM.
I restarted it and I was able to access Postorius.
And now this has become an almost daily routine - restarting it.
> I.e, can you access Postorius first thing after a clean start of
> mailman web?
Yes.
What I have realized though is that after restarting it, with time its
memory usage begins to increase significantly fast.
Within no time, it's already using 1GB+ RAM.
As I write this email, this is what I just seen on checking it:
```
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Fri 2026-01-23 16:43:28 EAT; 20h ago
Main PID: 1758633 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 2.0G
CPU: 8h 4min 40.949s
CGroup: /system.slice/mailmanweb.service
├─1758633 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2665379 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2665624 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:10:46 eu.kictanet.or.ke gunicorn[2663345]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:19 eu.kictanet.or.ke gunicorn[2663765]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:36 eu.kictanet.or.ke gunicorn[2663948]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:52 eu.kictanet.or.ke gunicorn[2664060]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:27 eu.kictanet.or.ke gunicorn[2664535]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:40 eu.kictanet.or.ke gunicorn[2664626]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:59 eu.kictanet.or.ke gunicorn[2664813]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:33 eu.kictanet.or.ke gunicorn[2665220]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:51 eu.kictanet.or.ke gunicorn[2665379]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:14:05 eu.kictanet.or.ke gunicorn[2665624]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
```
> If so, is it only when you try to export a thread from HyperKitty that the
> issues start?
>
I am not trying to export any threads at all.
Check this:
root@eu:/home/wash# systemctl restart mailmanweb
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 6s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 158.0M
CPU: 3.358s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 12s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.3M
CPU: 6.971s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 15s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.4M
CPU: 8.193s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 18s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 210.5M
CPU: 8.629s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 38s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 1.3G
CPU: 24.429s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 month, 2 weeks
Re: Speed up importing mailman2 lists
by Stephen J. Turnbull
Mark Sapiro writes:
> On 2/19/25 06:08, t.maintz(a)fz-juelich.de wrote:
> > We are currently planning to migrate from mailman2 to mailman3 as
> > a container, have around 1500 lists and would like to complete
> > the migration ideally in a few hours.
I've done two massive migrations in the last year. In the first (~20k
lists), the lists were down for maybe two hours, but it took 22 hours
for HyperKitty to populate, mostly in Xapian indexing we realized in
post-mortem analysis. In the second (~1k lists), no perceptible
downtime because they have their own bespoke archiver that has a
list-manager-agnostic API.
The trick to zero delivery downtime is that you can configure your MTA
to route to Mailman 3 if the list exists there, if not route to
Mailman 2 if the list exists there, and if not continue to any lower
priority routes. It worked as designed (mops sweat off brow ;-). We
did take Postorius and the Mailman 2 management CGIs and email command
addresses offline for the duration (3 hours in the first case, 30
mminutes in the second). This is sraightforward if Mailman 2 and
Mailman 3 are running on the same host. Life is more complex if
you're spinning up Mailman 3 in a separate node but it should be
possible.
I think if you're migrating to HyperKitty you can speed up the
migration by shutting off indexing, and doing that later at the cost
of confusing people who expect the lists to be indexed. I'm not sure
if it's possible to migrate the archives concurrently with accepting
new posts, or maybe to migrate archives in advance and backfill any
posts that arrive during the list migration. And there's no reason
why you can't leave the legacy Mailman 2 archives up for browsing
as a backup for as long as needed.
Steve
1 year
Re: Change base mailman URL path
by Mark Sapiro
On 4/6/23 20:07, chad.hays86(a)gmail.com wrote:
> Hi, I recently completed the a Mailman3 install using these[1] instructions. I'm able to access the web interface, the Django admin app, etc off the root domain URL. For example: https://mydomain.org/mailman3, https://mydomain.org/admin, https://mydomain.org/archives
>
> What's the most straightforward way to put all of these URL paths behind a different context? For example: https://mydomain.org/lists/mailman3, https://mydomain.org/lists/admin, https://mydomain.org/lists/archives
>
> I'm running Apache2 as my web server and am using mod_proxy to proxy requests to uwsgi.
There are two pieces to this:
For the Django side, copy
/opt/mailman/venv/lib/python3.x/site-packages/mailman_web/urls.py to
/etc/mailman3/urls.py where python3.x is the python version in your venv
and edit that file as in
```
30,34c30,34
< path('mailman3/', include('postorius.urls')),
< path('archives/', include('hyperkitty.urls')),
< path('', include('django_mailman3.urls')),
< path('accounts/', include('allauth.urls')),
< path('admin/', admin.site.urls),
---
> path('lists/mailman3/', include('postorius.urls')),
> path('lists/archives/', include('hyperkitty.urls')),
> path('lists/', include('django_mailman3.urls')),
> path('lists/accounts/', include('allauth.urls')),
> path('lists/admin/', admin.site.urls),
```
and add the following to /etc/mailman3/settings.py
ROOT_URLCONF = 'urls'
Then for the apache side, it depends what you have for your ProxyPass
directives are. If you have several like
```
ProxyPass "/mailman3" "http://127.0.0.1:8000/mailman3"
ProxyPass "/archives" "http://127.0.0.1:8000/archives"
...
```
change those to
```
ProxyPass "/lists/mailman3" "http://127.0.0.1:8000/lists/mailman3"
ProxyPass "/lists/archives" "http://127.0.0.1:8000/lists/archives"
```
If you have just one like
```
ProxyPass "/" "http://127.0.0.1:8000/"
```
change it to
```
ProxyPass "/lists" "http://127.0.0.1:8000/lists"
```
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
2 years, 11 months
Re: ModuleNotFoundError: No module named 'mailman_web'
by gordon@dickens.com
This is the entire error sent via email every minute or so:
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman-web", line 5, in <module>
from mailman_web.manage import main
ModuleNotFoundError: No module named 'mailman_web'
When I try to login to mailman then I get thse following error:
Service Unavailable: /mailman3/lists/
Report at /mailman3/lists/
Service Unavailable: /mailman3/lists/
Request Method: GET
Request URL: http://host2.mailhub4u.com/mailman3/lists/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Tue, 31 Oct 2023 21:08:56 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: gordon
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
PHPSESSID = 'a36fftlm8j0khrlciu3uut8n5a'
testing = '1'
sid = '8a3f6ce1fe7c07389eea7d68f5346563'
sessiontest = '1'
Horde = '48dflipuqm8oi32on7dadjffl8'
horde_secret_key = '4jhq7cri14q2vdkvs3r6r2auqk'
sessionid = 'gsrrjekrl6huw5myr37lop21cyltpmst'
META:
CSRF_COOKIE = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_AUTHORIZATION = 'Basic cm9vdDokQ3JAYmJ5LVAzbGljYW4k'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = 'csrftoken=BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS; PHPSESSID=a36fftlm8j0khrlciu3uut8n5a; testing=1; sid=8a3f6ce1fe7c07389eea7d68f5346563; sessiontest=1; Horde=48dflipuqm8oi32on7dadjffl8; horde_secret_key=4jhq7cri14q2vdkvs3r6r2auqk; sessionid=gsrrjekrl6huw5myr37lop21cyltpmst'
HTTP_HOST = '127.0.0.1:8000'
HTTP_REFERER = 'https://host2.mailhub4u.com/mailman3/lists/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0'
HTTP_X_FORWARDED_FOR = '173.165.166.34'
HTTP_X_FORWARDED_HOST = 'host2.mailhub4u.com'
HTTP_X_FORWARDED_SERVER = 'host2.mailhub4u.com'
PATH_INFO = '/mailman3/lists/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/mailman3/lists/'
SCRIPT_NAME = ''
SERVER_NAME = 'slc.mailhub4u.com'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 0
uwsgi.node = b'slc.mailhub4u.com'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f509a270810>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'gordon(a)mailhub4u.com'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f509d83d0d0>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)host2.mailhub4u.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'host2.mailhub4u.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': 'fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '209.95.44.128', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)host2.mailhub4u.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
2 years, 4 months
Re: Issue with Held Messages
by Mark Sapiro
On 08/19/2016 10:39 PM, Jean-Luc Wasmer wrote:
> On 2016-08-19 17:58, Mark Sapiro wrote:
>> On 08/17/2016 09:17 PM, Jean-Luc Wasmer wrote:
>>>
>>> No matter what action I set for member posts (Hold for moderator,
>>> Reject) they are always delivered.
>>
>>
>> I don't know why this would be. Perhaps the member's moderation is set
>> to Accept immediately - you can see this on ther member's options page
>> in Postorius when logged in as a list owner.
>
> Apart from "Mode of Delivery" that is set to "Regular" for the user,
> none of the following attributes are set:
>
> Mail Delivery
> Receive own posts to the list
> Receive acknowledgement mails
> Conceal address from the subscriber list
> Avoid duplicate copies of messages
If you look at the user's options when logged in as a list owner, you
should see an additional "Administration options" section below those
with a "Moderation" setting. What is that set to?
...
> By the way, I didn't mention before but in Settings | Message
> Acceptance, the "Acceptable aliases:" box contains "[]". When I try to
> Save changes after modifying something, I gut "An error occured: []" in
> the yellow banner (instead of "The settings have been updated.").
What happens if you clear the Acceptable aliases box before saving?
...
>> This is apparently <https://gitlab.com/mailman/mailmanclient/issues/10>
>> fixed by <https://gitlab.com/mailman/mailmanclient/merge_requests/16>
>
> Any ETA when this will be pushed to "mailman-bundler"?
I expect bundler will be updated when 3.1 is released and that should be
soon.
You may find <https://wiki.list.org/x/17891998> of interest.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
9 years, 6 months
Database deadlock when trying to delete a member.
by Simon Coggins
Hi,
I’ve got a strange error. I migrated from mailman 2.1 to 3 using the migration guide on the website and things have been working fine. But I’m in the process of testing the new syncmembers command to replace some inhouse mailman API code we wrote. I’ve tracked my problem down to what appears to be a deadlock in the postgresql database. When trying to delete certain users the SQL query hangs and never returns.
After doing some tracing and tracking it down to the database, I enabled DB logging of all queries and saw that the following query was never returning:
DELETE FROM member WHERE member.id = 166814
If I try to run it manually I get the same issue, in psql it never returns.
mailman=# explain analyze DELETE FROM member WHERE member.id = 166814;
[… 60 seconds passes…]
^CCancel request sent
ERROR: canceling statement due to user request
CONTEXT: while deleting tuple (2998,72) in relation "member"
I’m just wondering if there are any commands or scripts I can run to verify the database and it’s constraints to see if there is some error in the database data? Or where you’d recommend I go from here? It only impacts the user on this specific list. If I add this user to another list and remove them, everything works fine.
This is on a test system so I can do various testing. I’m trying to find the root cause so that I can verify my production system isn’t impacted by the same thing.
Setup Details:
OS: Oracle Linux 7 (Redhat)
Installed using pip via virtualenv talking to a local pgsql database on the same box.
Data was migrated from a mailman 2.1 install into mailman3 using migration instructions on the website.
PIP Modules versions:
django-mailman3 1.3.5
mailman 3.3.3
mailman-hyperkitty 1.1.0
mailmanclient 3.3.2
postorius 1.3.4
psycopg2-binary 2.8.5
RPM packages:
postgresql12-12.6-1PGDG.rhel7.x86_64
postgresql12-server-12.6-1PGDG.rhel7.x86_64
postgresql12-libs-12.6-1PGDG.rhel7.x86_64
postgresql12-devel-12.6-1PGDG.rhel7.x86_64
-Simon
4 years, 11 months
Re: Newbie question 2: Rewriting issue for bounced emails
by William Oliver
On Sun, 2021-12-26 at 16:47 -0800, Mark Sapiro wrote:
> On 12/26/21 3:06 PM, William Oliver wrote:
> >
> > When running mailman3, do I need to set up a completely different
> > virtual domain for it to run in?
>
> No.
>
>
> > My "real" domain name is
> > libertyfp.org, and I'm trying to make mailman work on that domain,
> > e.g.
> > "testlist(a)libertyfp.org." I'm starting to get the idea that I need
> > to
> > stick a completely different domain in there for the mailinglist.
>
> No.
>
> DNS or anywhere outside your server.
>
> Have you actually set an alias domain in Postorius for the
> libertyfp.org
> domain. It doesn't matter what name it is as long as it isn't
> a real domain. A good choice is x.libertyfp.org. Have you set that
> or
> things like
>
> testlist(a)libertyfp.org testlist(a)x.libertyfp.org
> testlist-bounces(a)libertyfp.org testlist-bounces(a)x.libertyfp.org
> testlist-confirm(a)libertyfp.org testlist-confirm(a)x.libertyfp.org
> ...
[snip]
Ah. I misunderstood you. I thought you meant that I had to tweak
*postfix* to get this done. It's not that you weren't clear, it's that
when I read the mailman3 instructions, I got the impression that
*mailman* would set the alias domain automatically, so I was dead set
on munging postfix.
This makes more sense, and I can back out of some of the changes I made
in postfix, which for the last couple of rounds was mostly flailing
about randomly -- I've heard that's often not a good admin strategy.
So.. if I need to do it myself, can you point me to what file I need to
create/modify in the /opt/mailman/mm tree to set up the alias?
Thanks!
billo
4 years, 2 months
Re: spanish localization
by Victoriano Giralt
El sáb, 13-02-2021 a las 16:44 -0800, Mark Sapiro escribió:
> On 2/13/21 4:08 PM, Victoriano Giralt wrote:
> > Mark, please, how do you check when translations happened? Nov 7th is a
> > very significant date for me (it is my wedding anniversary) and I'm 90%
> > sure that I dedicated time to Weblate after that date...
>
> With respect to Mailman core, all I'm doing is downloading the .po for
> Spanish and comparing it to mailman/messages/es/LC_MESSAGES/mailman.po
> from the Mailman core 3.3.3 package on PyPI and they are identical.
>
> If there are translated strings on weblate that are different from that,
> they don't show up in the downloaded
> <https://hosted.weblate.org/download/gnu-mailman/mailman/es/>;.
And you are very right and I have fallen as a newbee ... and first of all I
apologise for the noise.
I've been doing diffs with files downloaded from Weblate and those
installed on the server by pip. As I should have done from the start.
Mailman core and hyperkitty show no differences. Postorius shows a bunch
and django_mailman3 just a couple.
I leave for others a more detailed check of the strings between downloaded
.po files and Weblate online strings, it's too late here.
>
> And I too want to help. It would be a help to me if you can give me
> examples of specific strings whose weblate translation differs from
> what's in the distributed .po files.
And you have helped me, making me thing twice and stop moaning and going
for the facts.
Apologetic-thankful-big-mouth-shut-ly, Victoriano.
--
Victoriano Giralt Innovation Director
Digital Transformation Vicerectorate University of Malaga
+34952131415 SPAIN
==================================================================
Note: signature.asc is the electronic signature of present message
A: Yes.
> Q: Are you sure ?
>> A: Because it reverses the logical flow of conversation.
>>> Q: Why is top posting annoying in email ?
5 years
Re: Localization of auto-responses, question marks in welcome message
by Stephen J. Turnbull
Claus-Justus Heine via Mailman-users writes:
> Kind thanks for the response. I have to apologize: my "test user" had
> its preferred language set to en_US, so that was the reason for the
> question marks. So this was indeed a user-error (i.e. my fault).
But we'd like to have that user get the English version of the
message. One of two things seems reasonable:
1. You have customized the German template, but not the English
template. In that case, I think it makes sense for Mailman to
assume the German template has important information that the
English does not, and send the German template with its
appropriate encoding (UTF-8, nowadays). The fact that en_US can
be encoded in ASCII should not affect the encoding of the de
template, ever.[1]
2. You have not customized the German template. In that case the
user should get the default English template.
How do those sound to you, as goals for Mailman behavoir?
So ISTM this is a Mailman issue, if Mailman is sending out the German
message with question marks substituted for non-ASCII characters, or
if Mailman is sending out the German message with US-ASCII as the
Content-Type charset parameter. The only way I can see this as a user
(admin) issue is if you overwrote the English template with German
(and even then, it's nuts for Mailman not to use UTF-8 for English
what with directed quotes, emoji, and all the other enhancements to
the character repertoire that US English speakers use).
Can you tell me a little more about whether you configured any custom
templates, and if so, how? That is, did you use the Postorius text
field or overwrite files directly?
Steve
Footnotes:
[1] Note to self: perhaps the admin UI can check the list of
supported languages and warn if some but not all are customized.
3 years, 10 months